Browse Source

REPORT-58543【主题切换】字符颜色的主题色控件中的色块没有选中状态

fix-lag
kerry 3 years ago
parent
commit
a4350ad4ba
  1. 1
      designer-base/src/main/java/com/fr/design/gui/ibutton/UIColorButton.java
  2. 40
      designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ComponentPreviewPane.java
  3. 7
      designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ecpreview/cell/AbstractPreviewCell.java
  4. 4
      designer-base/src/main/java/com/fr/design/style/color/ColorControlWindow.java
  5. 5
      designer-base/src/main/java/com/fr/design/style/color/ColorControlWindowWithAuto.java
  6. 92
      designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java

1
designer-base/src/main/java/com/fr/design/gui/ibutton/UIColorButton.java

@ -136,6 +136,7 @@ public class UIColorButton extends UIButton implements PopupHider, UIObserver, G
} }
popupWin = this.getColorControlWindow(); popupWin = this.getColorControlWindow();
popupWin.setColor(color);
GUICoreUtils.showPopupMenu(popupWin, this, POPUP_MENU_SHIFT, this.getSize().height); GUICoreUtils.showPopupMenu(popupWin, this, POPUP_MENU_SHIFT, this.getSize().height);
} }

40
designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ComponentPreviewPane.java

@ -6,7 +6,6 @@ import com.fr.base.background.ImageBackground;
import com.fr.base.theme.FormTheme; import com.fr.base.theme.FormTheme;
import com.fr.base.theme.settings.ThemedComponentStyle; import com.fr.base.theme.settings.ThemedComponentStyle;
import com.fr.design.border.UIRoundedBorder; import com.fr.design.border.UIRoundedBorder;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.form.ui.Label; import com.fr.form.ui.Label;
import com.fr.form.ui.LayoutBorderStyle; import com.fr.form.ui.LayoutBorderStyle;
@ -20,15 +19,20 @@ import javax.swing.BorderFactory;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import javax.swing.border.Border; import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import java.awt.AlphaComposite; import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.Composite; import java.awt.Composite;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Image; import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Shape; import java.awt.Shape;
import java.awt.Stroke;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D; import java.awt.geom.RoundRectangle2D;
@ -67,7 +71,11 @@ public abstract class ComponentPreviewPane extends UINoOpaquePanel implements Th
ThemedComponentStyle componentStyle = theme.getComponentStyle(); ThemedComponentStyle componentStyle = theme.getComponentStyle();
style = componentStyle.getStyle(); style = componentStyle.getStyle();
setBorder(new UIRoundedBorder(style.getBorder(), style.getColor(), style.getBorderRadius())); if (style.getBorder() == 0) {
setBorder(null);
} else {
setBorder(new UIRoundedBorder(style.getBorder(), style.getColor(), style.getBorderRadius()));
}
int paddingTop = componentStyle.getPaddingTop(); int paddingTop = componentStyle.getPaddingTop();
int paddingBottom = componentStyle.getPaddingBottom(); int paddingBottom = componentStyle.getPaddingBottom();
@ -116,8 +124,10 @@ public abstract class ComponentPreviewPane extends UINoOpaquePanel implements Th
data.setInsetImagePadding(titlePacker.getInsetImagePadding()); data.setInsetImagePadding(titlePacker.getInsetImagePadding());
data.setInsetRelativeTextLeft(titlePacker.isInsetRelativeTextLeft()); data.setInsetRelativeTextLeft(titlePacker.isInsetRelativeTextLeft());
data.setInsetRelativeTextRight(titlePacker.isInsetRelativeTextRight()); data.setInsetRelativeTextRight(titlePacker.isInsetRelativeTextRight());
this.setBorder(new BottomLineBorder(componentStyle.getStyle().getColor(), componentStyle.getStyle().getBorder()));
} }
@Override @Override
public void paintComponent(Graphics g) { public void paintComponent(Graphics g) {
super.paintComponent(g); super.paintComponent(g);
@ -145,6 +155,32 @@ public abstract class ComponentPreviewPane extends UINoOpaquePanel implements Th
} }
public static class BottomLineBorder extends LineBorder {
private BottomLineBorder(Color color, int thickness) {
super(color, thickness);
}
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Graphics2D g2d = (Graphics2D) g;
Color oldColor = g2d.getColor();
Stroke oldStroke = g2d.getStroke();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(getLineColor());
g2d.setStroke(new BasicStroke(getThickness() * 2));
g2d.drawLine(0, height, width, height);
g2d.setStroke(oldStroke);
g2d.setColor(oldColor);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
}
}
private static class Utils { private static class Utils {
private static void paintBackground(Graphics2D g2d, Background background, Shape shape, float opacity) { private static void paintBackground(Graphics2D g2d, Background background, Shape shape, float opacity) {
if (background != null) { if (background != null) {

7
designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ecpreview/cell/AbstractPreviewCell.java

@ -1,8 +1,6 @@
package com.fr.design.mainframe.theme.preview.ecpreview.cell; package com.fr.design.mainframe.theme.preview.ecpreview.cell;
import com.fr.base.ScreenResolution;
import com.fr.base.Style; import com.fr.base.Style;
import javax.swing.JComponent; import javax.swing.JComponent;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics; import java.awt.Graphics;
@ -10,6 +8,8 @@ import java.awt.Graphics2D;
public abstract class AbstractPreviewCell extends JComponent { public abstract class AbstractPreviewCell extends JComponent {
protected Style style = Style.DEFAULT_STYLE; protected Style style = Style.DEFAULT_STYLE;
private static final int NO_SCALE_RESOLUTION = 100;
public void refresh(Style style) { public void refresh(Style style) {
this.style = style; this.style = style;
@ -17,9 +17,8 @@ public abstract class AbstractPreviewCell extends JComponent {
public void paint(Graphics g) { public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g; Graphics2D g2d = (Graphics2D) g;
int resolution = ScreenResolution.getScreenResolution();
Style.paintBackground(g2d, style, getWidth(), getHeight()); Style.paintBackground(g2d, style, getWidth(), getHeight());
paintContent(g2d, resolution); paintContent(g2d, NO_SCALE_RESOLUTION);
Style.paintBorder(g2d, style, getWidth(), getHeight()); Style.paintBorder(g2d, style, getWidth(), getHeight());
} }

4
designer-base/src/main/java/com/fr/design/style/color/ColorControlWindow.java

@ -38,6 +38,10 @@ public abstract class ColorControlWindow extends JPopupMenu {
return selectionPopupPane.getColor(); return selectionPopupPane.getColor();
} }
public void setColor(Color color) {
selectionPopupPane.setColor(color);
}
public PopupHider getPopupHider() { public PopupHider getPopupHider() {
return popupHider; return popupHider;
} }

5
designer-base/src/main/java/com/fr/design/style/color/ColorControlWindowWithAuto.java

@ -39,6 +39,11 @@ public abstract class ColorControlWindowWithAuto extends ColorControlWindow {
return selectionPopupPaneWithAuto.getColor(); return selectionPopupPaneWithAuto.getColor();
} }
public void setColor(Color color) {
selectionPopupPaneWithAuto.setColor(color);
}
protected void initSelectionPopupPane(boolean isSupportTransparent) { protected void initSelectionPopupPane(boolean isSupportTransparent) {
selectionPopupPaneWithAuto = new ColorSelectionPopupPaneWithAuto(isSupportTransparent); selectionPopupPaneWithAuto = new ColorSelectionPopupPaneWithAuto(isSupportTransparent);
this.add(selectionPopupPaneWithAuto, BorderLayout.CENTER); this.add(selectionPopupPaneWithAuto, BorderLayout.CENTER);

92
designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java

@ -1,6 +1,7 @@
package com.fr.design.style.color; package com.fr.design.style.color;
import com.fr.base.FineColor; import com.fr.base.FineColor;
import com.fr.base.theme.FineColorDeriveState;
import com.fr.base.theme.TemplateTheme; import com.fr.base.theme.TemplateTheme;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.border.UIRoundedBorder; import com.fr.design.border.UIRoundedBorder;
@ -37,10 +38,11 @@ import java.util.List;
*/ */
public class NewColorSelectPane extends BasicPane implements ColorSelectable { public class NewColorSelectPane extends BasicPane implements ColorSelectable {
private static final long serialVersionUID = -8634152305687249392L; private static final long serialVersionUID = -8634152305687249392L;
private static final float BRIGHTNESS_VALUE = 0.15F;
private static final float PURITY_VALUE = 0.1F;
private static final int WIDTH = 197; private static final int WIDTH = 197;
private static final int HEIGHT = 250; private static final int HEIGHT = 250;
//颜色衍生的数量
private static final int DEFAULT_DERIVE_COUNT = 5;
private FineColor color = null; // color private FineColor color = null; // color
// color setting action. // color setting action.
@ -56,7 +58,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
private final JPanel menuColorPane; private final JPanel menuColorPane;
private ColorCell[][] themeColorCellGrid; private ColorCell[][] themeColorCellGrid;
public static NewColorSelectPane createColorSelectPaneWithTheme(boolean supportTheme){ public static NewColorSelectPane createColorSelectPaneWithTheme(boolean supportTheme) {
return new NewColorSelectPane(true, supportTheme); return new NewColorSelectPane(true, supportTheme);
} }
@ -79,15 +81,15 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
initSelectButton(isSupportTransparent); initSelectButton(isSupportTransparent);
// center // center
JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane();
centerPane.setBorder(BorderFactory.createEmptyBorder(10, 4, 0 ,4)); centerPane.setBorder(BorderFactory.createEmptyBorder(10, 4, 0, 4));
this.add(centerPane, BorderLayout.CENTER); this.add(centerPane, BorderLayout.CENTER);
menuColorPane = getMenuColorPane(); menuColorPane = getMenuColorPane();
if(isSupportThemeColor){ if (isSupportThemeColor) {
JPanel themePane = initThemeColorPane(); JPanel themePane = initThemeColorPane();
centerPane.add(themePane); centerPane.add(themePane);
}else { } else {
centerPane.add(menuColorPane); centerPane.add(menuColorPane);
initMenuColorPane(); initMenuColorPane();
} }
@ -130,7 +132,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
centerPane.add(centerPane1); centerPane.add(centerPane1);
} }
private JPanel createStandardColorPane(){ private JPanel createStandardColorPane() {
JPanel jPanel = new JPanel(new GridLayout(1, 10, 3, 0)); JPanel jPanel = new JPanel(new GridLayout(1, 10, 3, 0));
Color[] colorArray = ColorFactory.STANDARD_COLORS; Color[] colorArray = ColorFactory.STANDARD_COLORS;
for (int i = 0; i < colorArray.length; i++) { for (int i = 0; i < colorArray.length; i++) {
@ -139,7 +141,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
return jPanel; return jPanel;
} }
private JPanel initThemeColorPane(){ private JPanel initThemeColorPane() {
menuColorPane.removeAll(); menuColorPane.removeAll();
JPanel themeColorPane = new JPanel(new BorderLayout(0, 5)); JPanel themeColorPane = new JPanel(new BorderLayout(0, 5));
themeColorPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); themeColorPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
@ -153,7 +155,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
menuColorPane.add(northPane, BorderLayout.NORTH); menuColorPane.add(northPane, BorderLayout.NORTH);
menuColorPane.add(centerPane, BorderLayout.CENTER); menuColorPane.add(centerPane, BorderLayout.CENTER);
Color[] colorArray = new Color[] { Color[] colorArray = new Color[]{
// 8列主题色 // 8列主题色
Color.decode("#FFFFFF"), Color.decode("#FFFFFF"),
Color.decode("#CCCCCC"), Color.decode("#CCCCCC"),
@ -165,22 +167,20 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
Color.decode("#CCCCCC"), Color.decode("#CCCCCC"),
// 2列灰度色 // 2列灰度色
Color.decode("#808080"), Color.decode("#333333"),
Color.decode("#B3B3B3"), Color.decode("#FFFFFF"),
}; };
if (themeColorCellGrid == null) { if (themeColorCellGrid == null) {
themeColorCellGrid = new ColorCell[colorArray.length][5]; themeColorCellGrid = new ColorCell[colorArray.length][DEFAULT_DERIVE_COUNT];
for (int i = 0; i < colorArray.length; i++) { for (int i = 0; i < colorArray.length; i++) {
ColorCell[] colorCellColumn = new ColorCell[5]; ColorCell[] colorCellColumn = new ColorCell[DEFAULT_DERIVE_COUNT];
boolean isDefaultColor = (i == colorArray.length - 1 || i == colorArray.length - 2); boolean isDefaultColor = (i == colorArray.length - 1 || i == colorArray.length - 2);
Color color = colorArray[i]; Color color = colorArray[i];
colorCellColumn[0] = createFineColorCell(color, isDefaultColor, i, 2); Color[] deriveColorArr = FineColorDeriveState.getDeriveColorArr(color, isDefaultColor, DEFAULT_DERIVE_COUNT);
colorCellColumn[2] = createFineColorCell(color = saturationDown(color, isDefaultColor, true), isDefaultColor, i, 1); for (int j = 0; j < deriveColorArr.length; j++) {
colorCellColumn[1] = createFineColorCell(saturationDown(color, isDefaultColor, true), isDefaultColor, i, 0); colorCellColumn[j] = createFineColorCell(deriveColorArr[j], isDefaultColor, i, j);
color = colorArray[i]; }
colorCellColumn[3] = createFineColorCell(color = saturationDown(color, isDefaultColor, false), isDefaultColor, i, 3);
colorCellColumn[4] = createFineColorCell(saturationDown(color, isDefaultColor, false), isDefaultColor, i, 4);
themeColorCellGrid[i] = colorCellColumn; themeColorCellGrid[i] = colorCellColumn;
} }
} }
@ -189,11 +189,10 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
northPane.add(themeColorCellGrid[i][0]); northPane.add(themeColorCellGrid[i][0]);
} }
for (int i = 0; i < colorArray.length; i++) { for (int i = 0; i < colorArray.length; i++) {
JPanel columnPane = new JPanel(new GridLayout(4, 1, 0, 3)); JPanel columnPane = new JPanel(new GridLayout(DEFAULT_DERIVE_COUNT - 1, 1, 0, 3));
columnPane.add(themeColorCellGrid[i][1]); for (int j = 1; j < DEFAULT_DERIVE_COUNT; j++) {
columnPane.add(themeColorCellGrid[i][2]); columnPane.add(themeColorCellGrid[i][j]);
columnPane.add(themeColorCellGrid[i][3]); }
columnPane.add(themeColorCellGrid[i][4]);
centerPane.add(columnPane); centerPane.add(columnPane);
} }
@ -206,7 +205,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
if (TemplateThemeProfileDialog.isEditingTheme()) { if (TemplateThemeProfileDialog.isEditingTheme()) {
standardColors = TemplateThemeProfileDialog.getEditingColorScheme(); standardColors = TemplateThemeProfileDialog.getEditingColorScheme();
} else { } else {
JTemplate<?,?> template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); JTemplate<?, ?> template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (template != null) { if (template != null) {
TemplateTheme theme = template.getTemplateTheme(); TemplateTheme theme = template.getTemplateTheme();
if (theme != null) { if (theme != null) {
@ -220,14 +219,10 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
for (int i = 0; i < themeColorCellGrid.length - 2; i++) { for (int i = 0; i < themeColorCellGrid.length - 2; i++) {
Color color = standardColors.get(i); Color color = standardColors.get(i);
Color[] deriveColorArr = FineColorDeriveState.getDeriveColorArr(color, false, DEFAULT_DERIVE_COUNT);
themeColorCellGrid[i][0].setColor(color); for (int j = 0; j < deriveColorArr.length; j++) {
themeColorCellGrid[i][2].setColor(color = saturationDown(color, false, true)); themeColorCellGrid[i][j].setColor(deriveColorArr[j]);
themeColorCellGrid[i][1].setColor(saturationDown(color, false, true)); }
color = standardColors.get(i);
themeColorCellGrid[i][3].setColor(color = saturationDown(color, false, false));
themeColorCellGrid[i][4].setColor(saturationDown(color, false, false));
} }
} }
@ -236,21 +231,6 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
return isDefaultColor ? new FineColorCell(color, this) : new FineColorCell(color, this, x, y); return isDefaultColor ? new FineColorCell(color, this) : new FineColorCell(color, this, x, y);
} }
/**
* 调整明度和纯度默认色只调整明度
* @param color
* @param isDefaultColor
* @return
*/
public static Color saturationDown(Color color, boolean isDefaultColor, boolean isLight) {
float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), new float[3]);
if (!isDefaultColor) {
hsb[1] = isLight ? Math.max(0, hsb[1] - PURITY_VALUE) : Math.min(1, hsb[1] + PURITY_VALUE);
}
hsb[2] = isLight ? Math.min(1, hsb[2] + BRIGHTNESS_VALUE) : Math.max(0, hsb[2] - BRIGHTNESS_VALUE);
Color color1 = Color.getHSBColor(hsb[0], hsb[1], hsb[2]);
return color1;
}
private void initMenuColorPane() { private void initMenuColorPane() {
menuColorPane.setLayout(new GridLayout(5, 8, 3, 3)); menuColorPane.setLayout(new GridLayout(5, 8, 3, 3));
@ -274,7 +254,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
return true; return true;
} }
protected void initSelectButton(boolean isSupportTransparent){ protected void initSelectButton(boolean isSupportTransparent) {
this.isSupportTransparent = isSupportTransparent; this.isSupportTransparent = isSupportTransparent;
this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout());
this.setBorder(new UIRoundedBorder(UIConstants.TOOLBAR_BORDER_COLOR, 1, 5)); this.setBorder(new UIRoundedBorder(UIConstants.TOOLBAR_BORDER_COLOR, 1, 5));
@ -288,6 +268,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
/** /**
* 添加监听 * 添加监听
*
* @param changeListener 监听 * @param changeListener 监听
*/ */
public void addChangeListener(ChangeListener changeListener) { public void addChangeListener(ChangeListener changeListener) {
@ -340,7 +321,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
setFineColor(fineColor); setFineColor(fineColor);
} }
private void setFineColor(FineColor fineColor){ private void setFineColor(FineColor fineColor) {
this.color = fineColor; this.color = fineColor;
// fire color change. // fire color change.
@ -351,7 +332,9 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
changeListener.stateChanged(evt); changeListener.stateChanged(evt);
} }
} }
DesignerEnvManager.getEnvManager().getColorConfigManager().addToColorQueue(color); if (color != null) {
DesignerEnvManager.getEnvManager().getColorConfigManager().addToColorQueue(color.getColor());
}
this.repaint(); this.repaint();
} }
@ -412,12 +395,12 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
private boolean setColorRealTime; private boolean setColorRealTime;
public JPanel getPane(){ public JPanel getPane() {
return this.pane; return this.pane;
} }
public NewUsedColorPane(int columns, ColorSelectable selectable, boolean setColorRealTime){ public NewUsedColorPane(int columns, ColorSelectable selectable, boolean setColorRealTime) {
this.columns = columns; this.columns = columns;
this.selectable = selectable; this.selectable = selectable;
this.setColorRealTime = setColorRealTime; this.setColorRealTime = setColorRealTime;
@ -448,7 +431,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
* 更新最近使用颜色 * 更新最近使用颜色
*/ */
public void updateUsedColor() { public void updateUsedColor() {
int total = columns ; int total = columns;
Color[] colors = DesignerEnvManager.getEnvManager().getColorConfigManager().getColors(); Color[] colors = DesignerEnvManager.getEnvManager().getColorConfigManager().getColors();
int size = colors.length; int size = colors.length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
@ -464,4 +447,5 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
} }
} }
} }

Loading…
Cancel
Save