diff --git a/designer-base/src/main/java/com/fr/design/fun/DefaultValueAdjustProvider.java b/designer-base/src/main/java/com/fr/design/fun/DefaultValueAdjustProvider.java index 0abe78b34a..db39cce3a7 100644 --- a/designer-base/src/main/java/com/fr/design/fun/DefaultValueAdjustProvider.java +++ b/designer-base/src/main/java/com/fr/design/fun/DefaultValueAdjustProvider.java @@ -3,6 +3,8 @@ package com.fr.design.fun; import com.fr.base.Utils; import com.fr.base.chart.BaseChartCollection; import com.fr.chartx.attr.ChartProvider; +import com.fr.design.style.color.ColorSelectorStyle; +import com.fr.design.style.color.FRColorSelectorStyle; import com.fr.general.FRFont; import com.fr.report.cell.CellElement; import com.fr.stable.collections.combination.Pair; @@ -73,4 +75,12 @@ public interface DefaultValueAdjustProvider extends Selectable { return new Pair<>(new Color[0], new Color[0]); } + + /** + * 支持插件自定义主题色选择器风格 + * @return ColorSelectorStyle + */ + default ColorSelectorStyle getColorSelector(){ + return FRColorSelectorStyle.getInstance(); + } } diff --git a/designer-base/src/main/java/com/fr/design/style/color/ColorConfig.java b/designer-base/src/main/java/com/fr/design/style/color/ColorConfig.java new file mode 100644 index 0000000000..3a4c31d190 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/style/color/ColorConfig.java @@ -0,0 +1,32 @@ +package com.fr.design.style.color; + +import java.awt.Color; + +/** + * 颜色选择器中单元颜色具体配置 + */ +public class ColorConfig { + private boolean supportTheme; + private DeriveAlgorithm algorithm; + + private ColorConfig(boolean supportTheme, DeriveAlgorithm algorithm) { + this.supportTheme = supportTheme; + this.algorithm = algorithm; + } + + public static ColorConfig createThemeColorConfig(DeriveAlgorithm deriveAlgorithm) { + return new ColorConfig(true, deriveAlgorithm); + } + + public static ColorConfig createThemeColorConfig(boolean supportTheme, DeriveAlgorithm deriveAlgorithm) { + return new ColorConfig(supportTheme, deriveAlgorithm); + } + + public boolean isSupportTheme() { + return supportTheme; + } + + public Color[] getDeriveColorArr(Color color, int defaultDeriveCount) { + return algorithm.getDeriveColorArr(color, defaultDeriveCount); + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/style/color/ColorSelectorStyle.java b/designer-base/src/main/java/com/fr/design/style/color/ColorSelectorStyle.java new file mode 100644 index 0000000000..78f3fabe7c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/style/color/ColorSelectorStyle.java @@ -0,0 +1,10 @@ +package com.fr.design.style.color; + +import java.util.List; + +/** + * 颜色选择器风格 + */ +public interface ColorSelectorStyle { + List getColorConfigs(); +} diff --git a/designer-base/src/main/java/com/fr/design/style/color/DeriveAlgorithm.java b/designer-base/src/main/java/com/fr/design/style/color/DeriveAlgorithm.java new file mode 100644 index 0000000000..25219f5e4f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/style/color/DeriveAlgorithm.java @@ -0,0 +1,28 @@ +package com.fr.design.style.color; + +import com.fr.base.theme.FineColorDeriveState; + +import java.awt.Color; + +public interface DeriveAlgorithm { + /** + * 通用的衍生规则 + */ + DeriveAlgorithm PLAIN_ALGORITHM = new DeriveAlgorithm() { + @Override + public Color[] getDeriveColorArr(Color color, int defaultDeriveCount) { + return FineColorDeriveState.getDeriveColorArr(color, false, defaultDeriveCount); + } + }; + + /** + * 默认的衍生规则,主要针对字体和背景 + */ + DeriveAlgorithm DEFAULT_DERIVE_ALGORITHM = new DeriveAlgorithm() { + public Color[] getDeriveColorArr(Color color, int defaultDeriveCount) { + return FineColorDeriveState.getDeriveColorArr(color, true, defaultDeriveCount); + } + }; + + Color[] getDeriveColorArr(Color color, int defaultDeriveCount); +} diff --git a/designer-base/src/main/java/com/fr/design/style/color/FRColorSelectorStyle.java b/designer-base/src/main/java/com/fr/design/style/color/FRColorSelectorStyle.java new file mode 100644 index 0000000000..d9d3144761 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/style/color/FRColorSelectorStyle.java @@ -0,0 +1,34 @@ +package com.fr.design.style.color; + +import java.util.ArrayList; +import java.util.List; + +public class FRColorSelectorStyle implements ColorSelectorStyle { + private static class Holder { + private static final FRColorSelectorStyle INSTANCE = new FRColorSelectorStyle(); + } + + public static FRColorSelectorStyle getInstance() { + return FRColorSelectorStyle.Holder.INSTANCE; + } + + private FRColorSelectorStyle() { + } + + public List getColorConfigs() { + ArrayList colorConfigs = new ArrayList<>(); + // 8列主题色 + colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); + colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); + colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); + colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); + colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); + colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); + colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); + colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); + // 2列灰度色 + colorConfigs.add(ColorConfig.createThemeColorConfig(false, DeriveAlgorithm.DEFAULT_DERIVE_ALGORITHM)); + colorConfigs.add(ColorConfig.createThemeColorConfig(false, DeriveAlgorithm.DEFAULT_DERIVE_ALGORITHM)); + return colorConfigs; + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java b/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java index 3a9c37a5f1..a855162848 100644 --- a/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java +++ b/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java @@ -1,14 +1,13 @@ package com.fr.design.style.color; import com.fr.base.FineColor; -import com.fr.base.theme.FineColorDeriveState; import com.fr.base.theme.TemplateTheme; import com.fr.design.DesignerEnvManager; -import com.fr.design.base.mode.DesignModeContext; import com.fr.design.border.UIRoundedBorder; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.BasicPane; import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.fun.DefaultValueAdjustProvider; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; @@ -16,6 +15,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.theme.dialog.TemplateThemeProfileDialog; +import com.fr.design.utils.DesignUtils; import javax.swing.BorderFactory; import javax.swing.JButton; @@ -61,7 +61,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { private final JPanel menuColorPane; private ColorCell[][] themeColorCellGrid; - private ColorSelectorStyle colorSelector; + private ColorSelectorStyle colorSelector ; public static NewColorSelectPane createColorSelectPaneWithTheme(boolean supportTheme) { return new NewColorSelectPane(true, supportTheme); @@ -159,8 +159,11 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { JPanel centerPane = new JPanel(new GridLayout(1, 8, DEFAULT_COLOR_HOR_INTERVAL, 0)); menuColorPane.add(northPane, BorderLayout.NORTH); menuColorPane.add(centerPane, BorderLayout.CENTER); - this.colorSelector = DesignModeContext.isDuchampMode() ? ColorSelectorStyle.FVS : ColorSelectorStyle.FR; - + this.colorSelector = FRColorSelectorStyle.getInstance(); + DefaultValueAdjustProvider valueAdjust = DesignUtils.getValueAdjust(); + if (valueAdjust != null) { + this.colorSelector = valueAdjust.getColorSelector(); + } Color[] colorArray = new Color[]{ // 8列主题色 Color.decode("#FFFFFF"), @@ -181,11 +184,11 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { themeColorCellGrid = new ColorCell[colorArray.length][DEFAULT_DERIVE_COUNT]; for (int i = 0; i < colorArray.length; i++) { ColorCell[] colorCellColumn = new ColorCell[DEFAULT_DERIVE_COUNT]; - ColorConfig colorConfig = colorSelector.getColorConfig(i); + ColorConfig colorConfig = getColorConfig(colorSelector, i); Color color = colorArray[i]; Color[] deriveColorArr = colorConfig.getDeriveColorArr(color, DEFAULT_DERIVE_COUNT); for (int j = 0; j < deriveColorArr.length; j++) { - colorCellColumn[j] = createFineColorCell(deriveColorArr[j], !colorConfig.supportTheme, i, j); + colorCellColumn[j] = createFineColorCell(deriveColorArr[j], !colorConfig.isSupportTheme(), i, j); } themeColorCellGrid[i] = colorCellColumn; } @@ -224,7 +227,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { } for (int i = 0; i < standardColors.size(); i++) { Color standardColor = standardColors.get(i); - ColorConfig colorConfig = colorSelector.getColorConfig(i); + ColorConfig colorConfig = getColorConfig(colorSelector, i); Color[] deriveColorArr = colorConfig.getDeriveColorArr(standardColor, DEFAULT_DERIVE_COUNT); for (int j = 0; j < deriveColorArr.length; j++) { themeColorCellGrid[i][j].setColor(deriveColorArr[j]); @@ -451,105 +454,13 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { } } - /** - * 颜色衍生算法 - */ - private enum DeriveAlgorithm { - /** - * 调整明度和纯度 - */ - PLAIN_ALGORITHM { - public Color[] getDeriveColorArr(Color color, int defaultDeriveCount) { - return FineColorDeriveState.getDeriveColorArr(color, false, defaultDeriveCount); - } - }, - - /** - * 只调整明度 - */ - DEFAULT_DERIVE_ALGORITHM { - public Color[] getDeriveColorArr(Color color, int defaultDeriveCount) { - return FineColorDeriveState.getDeriveColorArr(color, true, defaultDeriveCount); - } - }; - - public abstract Color[] getDeriveColorArr(Color color, int defaultDeriveCount); - } - - /** - * 每个主题色的具体配置 - */ - private static class ColorConfig { - private boolean supportTheme; - private DeriveAlgorithm algorithm; - - private ColorConfig(boolean supportTheme, DeriveAlgorithm algorithm) { - this.supportTheme = supportTheme; - this.algorithm = algorithm; - } - public static ColorConfig createThemeColorConfig(DeriveAlgorithm deriveAlgorithm) { - return new ColorConfig(true, deriveAlgorithm); + public ColorConfig getColorConfig(ColorSelectorStyle colorSelector, int i) { + List colorConfigs = colorSelector.getColorConfigs(); + if (i < 0 || i >= colorConfigs.size()) { + return colorConfigs.get(0); } - - public static ColorConfig createThemeColorConfig(boolean supportTheme, DeriveAlgorithm deriveAlgorithm) { - return new ColorConfig(supportTheme, deriveAlgorithm); - } - - - public Color[] getDeriveColorArr(Color color, int defaultDeriveCount){ - return algorithm.getDeriveColorArr(color, defaultDeriveCount); - } - } - - /** - * 支持不同风格的主题色选择面板 - */ - private enum ColorSelectorStyle { - FR, - FVS { - public List getColorConfigs() { - ArrayList colorConfigs = new ArrayList<>(); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.DEFAULT_DERIVE_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.DEFAULT_DERIVE_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - return colorConfigs; - } - }; - - public List getColorConfigs() { - ArrayList colorConfigs = new ArrayList<>(); - // 8列主题色 - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(DeriveAlgorithm.PLAIN_ALGORITHM)); - // 2列灰度色 - colorConfigs.add(ColorConfig.createThemeColorConfig(false, DeriveAlgorithm.DEFAULT_DERIVE_ALGORITHM)); - colorConfigs.add(ColorConfig.createThemeColorConfig(false, DeriveAlgorithm.DEFAULT_DERIVE_ALGORITHM)); - return colorConfigs; - } - - public ColorConfig getColorConfig(int i) { - List colorConfigs = getColorConfigs(); - if (i < 0 || i >= colorConfigs.size()) { - return colorConfigs.get(0); - } - return colorConfigs.get(i); - } - - + return colorConfigs.get(i); } }