1 /* 2 * Copyright (C) 2015-2017, by Laszlo Szeremi under the Boost license. 3 * 4 * Pixel Perfect Engine, concrete.stylesheet module 5 */ 6 7 module PixelPerfectEngine.concrete.types.stylesheet; 8 9 import PixelPerfectEngine.graphics.bitmap; 10 import PixelPerfectEngine.graphics.fontsets; 11 import collections.hashmap; 12 /** 13 * Defines style data for the Concrete GUI. 14 */ 15 public class StyleSheet{ 16 ///Default color palette. First 16 colors are reserved for GUI defaults in a single workspace, second 16 colors are of the RGBI standard, the rest could 17 ///be used for other GUI elements such as backgrounds and icons 18 public static enum Color[] defaultpaletteforGUI = 19 [Color(0x00,0x00,0x00,0x00), //transparent 20 Color(0xFF,0xFF,0xFF,0xFF), //reserved 21 Color(0x30,0x30,0x30,0xFF), //buttonTop 22 Color(0x40,0x40,0x40,0xFF), //windowascent 23 Color(0x18,0x18,0x18,0xFF), //windowdescent 24 Color(0x10,0x10,0x10,0xff), //windowBottom 25 Color(0x20,0x20,0x20,0xff), //window 26 Color(0x00,0x00,0xaa,0xFF), //WHAascent 27 Color(0x00,0x00,0x40,0xFF), //WHAdescent 28 Color(0x00,0x00,0x70,0xFF), //WHAtop 29 Color(0x00,0x00,0xFF,0xFF), //reserved (cursors now use a given color) 30 Color(0x00,0x00,0x7F,0xFF), //reserved for windowascentB 31 Color(0xFF,0xFF,0x00,0xFF), //reserved for windowBottomB 32 Color(0x0a,0x0a,0x0a,0xFF), //windowdescentB 33 Color(0x7F,0x7F,0x7F,0xFF), //reserved for WHAascentB 34 Color(0x00,0x00,0x00,0xFF), //reserved for WHAdescentB 35 36 Color(0x00,0x00,0x00,0xFF), //Black 37 Color(0x7F,0x00,0x00,0xFF), //Dark Red 38 Color(0x00,0x7F,0x00,0xFF), //Dark Green 39 Color(0x7F,0x7F,0x00,0xFF), //Dark Yellow 40 Color(0x00,0x00,0x7F,0xFF), //Dark Blue 41 Color(0x7F,0x00,0x7F,0xFF), //Dark Purple 42 Color(0x00,0x7F,0x7F,0xFF), //Dark Turquiose 43 Color(0x7F,0x7F,0x7F,0xFF), //Grey 44 Color(0x3F,0x3F,0x3F,0xFF), //Dark Grey 45 Color(0xFF,0x00,0x00,0xFF), //Red 46 Color(0x00,0xFF,0x00,0xFF), //Green 47 Color(0xFF,0xFF,0x00,0xFF), //Yellow 48 Color(0x00,0x00,0xFF,0xFF), //Blue 49 Color(0xFF,0x00,0xFF,0xFF), //Purple 50 Color(0x00,0xFF,0xFF,0xFF), //Turquiose 51 Color(0xFF,0xFF,0xFF,0xFF), //White 52 ]; 53 //public Fontset!Bitmap8Bit[string] font; 54 public HashMap!(string, Fontset!Bitmap8Bit) font;///Fonts stored here. 55 public HashMap!(string, CharacterFormattingInfo!Bitmap8Bit) _chrFormat; ///Character formatting 56 //public CharacterFormattingInfo!Bitmap8Bit[string] _chrFormat; ///Character formatting 57 //public ubyte[string] color; ///Colors are identified by strings. 58 public HashMap!(string, ubyte) color; ///Colors are identified by strings. 59 //public ubyte[][string] pattern; ///Stores line patterns. 60 public HashMap!(string, ubyte[]) pattern; ///Stores line patterns. 61 //public Bitmap8Bit[string] images; ///For icons, pattern fills, etc... 62 public HashMap!(string, Bitmap8Bit) images; ///For icons, pattern fills, etc... 63 //public int[string] drawParameters; ///Draw parameters are used for border thickness, padding, etc... 64 public HashMap!(string, int) drawParameters; ///Draw parameters are used for border thickness, padding, etc... 65 //public string[string] fontTypes; ///Font type descriptions for various kind of components. 66 67 /** 68 * Creates a default stylesheet. 69 */ 70 public this() @safe { 71 color["transparent"] = 0x0000; 72 color["normaltext"] = 0x001F; 73 color["window"] = 0x0006; 74 color["buttonTop"] = 0x0002; 75 color["windowascent"] = 0x0003; 76 color["windowdescent"] = 0x0004; 77 color["windowinactive"] = 0x0005; 78 color["selection"] = 0x0019; 79 color["red"] = 0x0019; 80 color["WHAascent"] = 0x0007; 81 color["WHAdescent"] = 0x0008; 82 color["WHTextActive"] = 0x001F; 83 color["WHTextInactive"] = 0x0017; 84 color["WHAtop"] = 0x0009; 85 color["blue"] = 0x000A; 86 color["darkblue"] = 0x000B; 87 color["yellow"] = 0x000C; 88 color["secondarytext"] = 0x001B; 89 color["grey"] = 0x000E; 90 color["black"] = 0x000F; 91 color["white"] = 0x0001; 92 color["PopUpMenuSecondaryTextColor"] = 0x001B; 93 color["MenuBarSeparatorColor"] = 0x001F; 94 color["PanelBorder"] = 0x0010; 95 color["SliderBackground"] = 0x0004; 96 color["SliderColor"] = 0x0003; 97 color["ListViewVSep"] = 0x0000; 98 color["ListViewHSep"] = 0x0000; 99 100 drawParameters["PopUpMenuHorizPadding"] = 4; 101 drawParameters["PopUpMenuVertPadding"] = 1; 102 drawParameters["PopUpMenuMinTextSpace"] = 8; 103 drawParameters["ButtonPaddingHoriz"] = 8; 104 drawParameters["PanelTitleFirstCharOffset"] = 16; 105 drawParameters["PanelPadding"] = 4; 106 107 drawParameters["MenuBarHorizPadding"] = 4; 108 drawParameters["MenuBarVertPadding"] = 2; 109 110 drawParameters["ListBoxRowHeight"] = 16; 111 drawParameters["TextSpacingTop"] = 1; 112 drawParameters["TextSpacingBottom"] = 1; 113 drawParameters["TextSpacingSides"] = 2; 114 drawParameters["WindowLeftPadding"] = 5; 115 drawParameters["WindowRightPadding"] = 5; 116 drawParameters["WindowTopPadding"] = 20; 117 drawParameters["WindowBottomPadding"] = 5; 118 drawParameters["WindowHeaderHeight"] = 16; 119 drawParameters["ComponentHeight"] = 20; 120 drawParameters["WindowHeaderHeight"] = 16; 121 drawParameters["WHPaddingTop"] = 1; 122 drawParameters["HorizScrollBarSize"] = 16; 123 drawParameters["VertScrollBarSize"] = 16; 124 drawParameters["horizTextPadding"] = 1; 125 126 pattern["blackDottedLine"] = [0x1f, 0x1f, 0x10, 0x10]; 127 } 128 /** 129 * Adds a fontset to the stylesheet with the given ID. 130 * IMPORTANT: ID of "default" must be set at least in order to ensure fallback capabilities! 131 */ 132 public void addFontset(Fontset!Bitmap8Bit f, string ID) @safe { 133 font[ID] = f; 134 } 135 /** 136 * Returns the fontset with the given ID, or the default one if not found. 137 */ 138 public Fontset!Bitmap8Bit getFontset(string ID) @safe nothrow { 139 auto result = font[ID]; 140 if (result !is null) return result; 141 else return font["default"]; 142 } 143 /** 144 * Adds a character formatting to the stylesheet with the given identifier. 145 * IMPORTANT: ID of "default" must be set at least in order to ensure fallback capabilities! 146 */ 147 public void addChrFormatting(CharacterFormattingInfo!Bitmap8Bit frmt, string ID) @safe nothrow { 148 _chrFormat[ID] = frmt; 149 //assert(_chrFormat[type] is frmt); 150 } 151 /** 152 * Duplicates character formatting for multiple IDs. 153 */ 154 public void duplicateChrFormatting(string src, string dest) @safe nothrow { 155 _chrFormat[dest] = _chrFormat[src]; 156 157 } 158 /** 159 * Returns the character formatting with the given ID, or the default one if not found. 160 */ 161 public CharacterFormattingInfo!Bitmap8Bit getChrFormatting(string ID) @safe nothrow { 162 auto result = _chrFormat[ID]; 163 if (result !is null) return result; 164 else return _chrFormat["default"]; 165 } 166 /** 167 * Sets the given color to the supplied name to be recalled by element draw functions. 168 */ 169 public void setColor(ubyte c, string colorName) @safe nothrow { 170 color[colorName] = c; 171 } 172 /** 173 * Returns the color that matches the name, or 0 if not found. 174 */ 175 public ubyte getColor(string colorName) @safe nothrow { 176 return color[colorName]; 177 } 178 /** 179 * Sets the image of the given name. 180 */ 181 public void setImage(Bitmap8Bit bitmap, string name) @safe nothrow { 182 images[name] = bitmap; 183 } 184 /** 185 * Returns the image that matches the name, or null if not found. 186 */ 187 public Bitmap8Bit getImage(string name) @safe nothrow { 188 return images[name]; 189 } 190 } 191 192 ///Stores a global, default stylesheet. 193 ///Must be initialized alongside with the GUI. 194 public static StyleSheet globalDefaultStyle;