diff --git a/src/main.c b/src/main.c index 1e316e1c..e4ae928a 100644 --- a/src/main.c +++ b/src/main.c @@ -288,6 +288,8 @@ const char *helpstring = -info Print general info about the system\n\ -help Print this message\n\ -pixelscale The amount of pixels to show for one Medley screen pixel.\n\ + -fg/-foreground Screen foreground color, default Black. X color name or #RRBBGG hex\n\ + -bg/-background Screen background color, default White. X color name or #RRBBGG hex\n\ -sc[reen] x] The Medley screen geometry\n\ -t The window title\n\ -title <title> The window title\n"; @@ -316,6 +318,12 @@ const char *nethubHelpstring = ""; extern int insnsCountdownForTimerAsyncEmulation; #endif +#if defined(XWINDOW) || defined(SDL) +char foregroundColorName[64] = {0}; +extern char foregroundColorName[64]; +char backgroundColorName[64] = {0}; +extern char backgroundColorName[64]; +#endif /************************************************************************/ /* */ /* M A I N E N T R Y P O I N T */ @@ -488,8 +496,21 @@ int main(int argc, char *argv[]) (void)fprintf(stderr, "Missing argument after -title\n"); exit(1); } + } else if (strcmp(argv[i], "-fg") == 0 || strcmp(argv[i], "-foreground") == 0) { + if (argc > ++i) { + strncpy(foregroundColorName, argv[i], sizeof(foregroundColorName) - 1); + } else { + (void)fprintf(stderr, "Missing argument after -fg/-foreground\n"); + exit(1); + } + } else if (strcmp(argv[i], "-bg") == 0 || strcmp(argv[i], "-background") == 0) { + if (argc > ++i) { + strncpy(backgroundColorName, argv[i], sizeof(backgroundColorName) - 1); + } else { + (void)fprintf(stderr, "Missing argument after -bg/-background\n"); + exit(1); + } } - #endif /* SDL */ /* Can only do this under SUNOs, for now */ else if (!strcmp(argv[i], "-E")) { /**** ethernet info ****/ diff --git a/src/sdl.c b/src/sdl.c index 9739792b..5efa4d66 100644 --- a/src/sdl.c +++ b/src/sdl.c @@ -40,8 +40,8 @@ static SDL_Surface *sdl_buffersurface = NULL; static int buffer_size = 0; static void *buffer = NULL; #endif -static Uint32 sdl_white; -static Uint32 sdl_black; +static Uint32 sdl_foreground_color; +static Uint32 sdl_background_color; static Uint32 sdl_foreground; static Uint32 sdl_background; static int sdl_bytesperpixel; @@ -167,6 +167,764 @@ int keymap[] = { // 111, /* (K5F SUN-OPEN) */ -1, -1 }; + +const struct ColorNameToRGB { + char * name; uint8_t red; uint8_t green; uint8_t blue; +} colornames[] = { +{"alice blue", 240, 248, 255}, +{"AliceBlue", 240, 248, 255}, +{"antique white", 250, 235, 215}, +{"AntiqueWhite", 250, 235, 215}, +{"AntiqueWhite1", 255, 239, 219}, +{"AntiqueWhite2", 238, 223, 204}, +{"AntiqueWhite3", 205, 192, 176}, +{"AntiqueWhite4", 139, 131, 120}, +{"aquamarine", 127, 255, 212}, +{"aquamarine1", 127, 255, 212}, +{"aquamarine2", 118, 238, 198}, +{"aquamarine3", 102, 205, 170}, +{"aquamarine4", 69, 139, 116}, +{"azure", 240, 255, 255}, +{"azure1", 240, 255, 255}, +{"azure2", 224, 238, 238}, +{"azure3", 193, 205, 205}, +{"azure4", 131, 139, 139}, +{"beige", 245, 245, 220}, +{"bisque", 255, 228, 196}, +{"bisque1", 255, 228, 196}, +{"bisque2", 238, 213, 183}, +{"bisque3", 205, 183, 158}, +{"bisque4", 139, 125, 107}, +{"black", 0, 0, 0}, +{"blanched almond", 255, 235, 205}, +{"BlanchedAlmond", 255, 235, 205}, +{"blue", 0, 0, 255}, +{"blue violet", 138, 43, 226}, +{"blue1", 0, 0, 255}, +{"blue2", 0, 0, 238}, +{"blue3", 0, 0, 205}, +{"blue4", 0, 0, 139}, +{"BlueViolet", 138, 43, 226}, +{"brown", 165, 42, 42}, +{"brown1", 255, 64, 64}, +{"brown2", 238, 59, 59}, +{"brown3", 205, 51, 51}, +{"brown4", 139, 35, 35}, +{"burlywood", 222, 184, 135}, +{"burlywood1", 255, 211, 155}, +{"burlywood2", 238, 197, 145}, +{"burlywood3", 205, 170, 125}, +{"burlywood4", 139, 115, 85}, +{"cadet blue", 95, 158, 160}, +{"CadetBlue", 95, 158, 160}, +{"CadetBlue1", 152, 245, 255}, +{"CadetBlue2", 142, 229, 238}, +{"CadetBlue3", 122, 197, 205}, +{"CadetBlue4", 83, 134, 139}, +{"chartreuse", 127, 255, 0}, +{"chartreuse1", 127, 255, 0}, +{"chartreuse2", 118, 238, 0}, +{"chartreuse3", 102, 205, 0}, +{"chartreuse4", 69, 139, 0}, +{"chocolate", 210, 105, 30}, +{"chocolate1", 255, 127, 36}, +{"chocolate2", 238, 118, 33}, +{"chocolate3", 205, 102, 29}, +{"chocolate4", 139, 69, 19}, +{"coral", 255, 127, 80}, +{"coral1", 255, 114, 86}, +{"coral2", 238, 106, 80}, +{"coral3", 205, 91, 69}, +{"coral4", 139, 62, 47}, +{"cornflower blue", 100, 149, 237}, +{"CornflowerBlue", 100, 149, 237}, +{"cornsilk", 255, 248, 220}, +{"cornsilk1", 255, 248, 220}, +{"cornsilk2", 238, 232, 205}, +{"cornsilk3", 205, 200, 177}, +{"cornsilk4", 139, 136, 120}, +{"cyan", 0, 255, 255}, +{"cyan1", 0, 255, 255}, +{"cyan2", 0, 238, 238}, +{"cyan3", 0, 205, 205}, +{"cyan4", 0, 139, 139}, +{"dark blue", 0, 0, 139}, +{"dark cyan", 0, 139, 139}, +{"dark goldenrod", 184, 134, 11}, +{"dark gray", 169, 169, 169}, +{"dark green", 0, 100, 0}, +{"dark grey", 169, 169, 169}, +{"dark khaki", 189, 183, 107}, +{"dark magenta", 139, 0, 139}, +{"dark olive green", 85, 107, 47}, +{"dark orange", 255, 140, 0}, +{"dark orchid", 153, 50, 204}, +{"dark red", 139, 0, 0}, +{"dark salmon", 233, 150, 122}, +{"dark sea green", 143, 188, 143}, +{"dark slate blue", 72, 61, 139}, +{"dark slate gray", 47, 79, 79}, +{"dark slate grey", 47, 79, 79}, +{"dark turquoise", 0, 206, 209}, +{"dark violet", 148, 0, 211}, +{"DarkBlue", 0, 0, 139}, +{"DarkCyan", 0, 139, 139}, +{"DarkGoldenrod", 184, 134, 11}, +{"DarkGoldenrod1", 255, 185, 15}, +{"DarkGoldenrod2", 238, 173, 14}, +{"DarkGoldenrod3", 205, 149, 12}, +{"DarkGoldenrod4", 139, 101, 8}, +{"DarkGray", 169, 169, 169}, +{"DarkGreen", 0, 100, 0}, +{"DarkGrey", 169, 169, 169}, +{"DarkKhaki", 189, 183, 107}, +{"DarkMagenta", 139, 0, 139}, +{"DarkOliveGreen", 85, 107, 47}, +{"DarkOliveGreen1", 202, 255, 112}, +{"DarkOliveGreen2", 188, 238, 104}, +{"DarkOliveGreen3", 162, 205, 90}, +{"DarkOliveGreen4", 110, 139, 61}, +{"DarkOrange", 255, 140, 0}, +{"DarkOrange1", 255, 127, 0}, +{"DarkOrange2", 238, 118, 0}, +{"DarkOrange3", 205, 102, 0}, +{"DarkOrange4", 139, 69, 0}, +{"DarkOrchid", 153, 50, 204}, +{"DarkOrchid1", 191, 62, 255}, +{"DarkOrchid2", 178, 58, 238}, +{"DarkOrchid3", 154, 50, 205}, +{"DarkOrchid4", 104, 34, 139}, +{"DarkRed", 139, 0, 0}, +{"DarkSalmon", 233, 150, 122}, +{"DarkSeaGreen", 143, 188, 143}, +{"DarkSeaGreen1", 193, 255, 193}, +{"DarkSeaGreen2", 180, 238, 180}, +{"DarkSeaGreen3", 155, 205, 155}, +{"DarkSeaGreen4", 105, 139, 105}, +{"DarkSlateBlue", 72, 61, 139}, +{"DarkSlateGray", 47, 79, 79}, +{"DarkSlateGray1", 151, 255, 255}, +{"DarkSlateGray2", 141, 238, 238}, +{"DarkSlateGray3", 121, 205, 205}, +{"DarkSlateGray4", 82, 139, 139}, +{"DarkSlateGrey", 47, 79, 79}, +{"DarkTurquoise", 0, 206, 209}, +{"DarkViolet", 148, 0, 211}, +{"deep pink", 255, 20, 147}, +{"deep sky blue", 0, 191, 255}, +{"DeepPink", 255, 20, 147}, +{"DeepPink1", 255, 20, 147}, +{"DeepPink2", 238, 18, 137}, +{"DeepPink3", 205, 16, 118}, +{"DeepPink4", 139, 10, 80}, +{"DeepSkyBlue", 0, 191, 255}, +{"DeepSkyBlue1", 0, 191, 255}, +{"DeepSkyBlue2", 0, 178, 238}, +{"DeepSkyBlue3", 0, 154, 205}, +{"DeepSkyBlue4", 0, 104, 139}, +{"dim gray", 105, 105, 105}, +{"dim grey", 105, 105, 105}, +{"DimGray", 105, 105, 105}, +{"DimGrey", 105, 105, 105}, +{"dodger blue", 30, 144, 255}, +{"DodgerBlue", 30, 144, 255}, +{"DodgerBlue1", 30, 144, 255}, +{"DodgerBlue2", 28, 134, 238}, +{"DodgerBlue3", 24, 116, 205}, +{"DodgerBlue4", 16, 78, 139}, +{"firebrick", 178, 34, 34}, +{"firebrick1", 255, 48, 48}, +{"firebrick2", 238, 44, 44}, +{"firebrick3", 205, 38, 38}, +{"firebrick4", 139, 26, 26}, +{"floral white", 255, 250, 240}, +{"FloralWhite", 255, 250, 240}, +{"forest green", 34, 139, 34}, +{"ForestGreen", 34, 139, 34}, +{"gainsboro", 220, 220, 220}, +{"ghost white", 248, 248, 255}, +{"GhostWhite", 248, 248, 255}, +{"gold", 255, 215, 0}, +{"gold1", 255, 215, 0}, +{"gold2", 238, 201, 0}, +{"gold3", 205, 173, 0}, +{"gold4", 139, 117, 0}, +{"goldenrod", 218, 165, 32}, +{"goldenrod1", 255, 193, 37}, +{"goldenrod2", 238, 180, 34}, +{"goldenrod3", 205, 155, 29}, +{"goldenrod4", 139, 105, 20}, +{"gray", 190, 190, 190}, +{"gray0", 0, 0, 0}, +{"gray1", 3, 3, 3}, +{"gray10", 26, 26, 26}, +{"gray100", 255, 255, 255}, +{"gray11", 28, 28, 28}, +{"gray12", 31, 31, 31}, +{"gray13", 33, 33, 33}, +{"gray14", 36, 36, 36}, +{"gray15", 38, 38, 38}, +{"gray16", 41, 41, 41}, +{"gray17", 43, 43, 43}, +{"gray18", 46, 46, 46}, +{"gray19", 48, 48, 48}, +{"gray2", 5, 5, 5}, +{"gray20", 51, 51, 51}, +{"gray21", 54, 54, 54}, +{"gray22", 56, 56, 56}, +{"gray23", 59, 59, 59}, +{"gray24", 61, 61, 61}, +{"gray25", 64, 64, 64}, +{"gray26", 66, 66, 66}, +{"gray27", 69, 69, 69}, +{"gray28", 71, 71, 71}, +{"gray29", 74, 74, 74}, +{"gray3", 8, 8, 8}, +{"gray30", 77, 77, 77}, +{"gray31", 79, 79, 79}, +{"gray32", 82, 82, 82}, +{"gray33", 84, 84, 84}, +{"gray34", 87, 87, 87}, +{"gray35", 89, 89, 89}, +{"gray36", 92, 92, 92}, +{"gray37", 94, 94, 94}, +{"gray38", 97, 97, 97}, +{"gray39", 99, 99, 99}, +{"gray4", 10, 10, 10}, +{"gray40", 102, 102, 102}, +{"gray41", 105, 105, 105}, +{"gray42", 107, 107, 107}, +{"gray43", 110, 110, 110}, +{"gray44", 112, 112, 112}, +{"gray45", 115, 115, 115}, +{"gray46", 117, 117, 117}, +{"gray47", 120, 120, 120}, +{"gray48", 122, 122, 122}, +{"gray49", 125, 125, 125}, +{"gray5", 13, 13, 13}, +{"gray50", 127, 127, 127}, +{"gray51", 130, 130, 130}, +{"gray52", 133, 133, 133}, +{"gray53", 135, 135, 135}, +{"gray54", 138, 138, 138}, +{"gray55", 140, 140, 140}, +{"gray56", 143, 143, 143}, +{"gray57", 145, 145, 145}, +{"gray58", 148, 148, 148}, +{"gray59", 150, 150, 150}, +{"gray6", 15, 15, 15}, +{"gray60", 153, 153, 153}, +{"gray61", 156, 156, 156}, +{"gray62", 158, 158, 158}, +{"gray63", 161, 161, 161}, +{"gray64", 163, 163, 163}, +{"gray65", 166, 166, 166}, +{"gray66", 168, 168, 168}, +{"gray67", 171, 171, 171}, +{"gray68", 173, 173, 173}, +{"gray69", 176, 176, 176}, +{"gray7", 18, 18, 18}, +{"gray70", 179, 179, 179}, +{"gray71", 181, 181, 181}, +{"gray72", 184, 184, 184}, +{"gray73", 186, 186, 186}, +{"gray74", 189, 189, 189}, +{"gray75", 191, 191, 191}, +{"gray76", 194, 194, 194}, +{"gray77", 196, 196, 196}, +{"gray78", 199, 199, 199}, +{"gray79", 201, 201, 201}, +{"gray8", 20, 20, 20}, +{"gray80", 204, 204, 204}, +{"gray81", 207, 207, 207}, +{"gray82", 209, 209, 209}, +{"gray83", 212, 212, 212}, +{"gray84", 214, 214, 214}, +{"gray85", 217, 217, 217}, +{"gray86", 219, 219, 219}, +{"gray87", 222, 222, 222}, +{"gray88", 224, 224, 224}, +{"gray89", 227, 227, 227}, +{"gray9", 23, 23, 23}, +{"gray90", 229, 229, 229}, +{"gray91", 232, 232, 232}, +{"gray92", 235, 235, 235}, +{"gray93", 237, 237, 237}, +{"gray94", 240, 240, 240}, +{"gray95", 242, 242, 242}, +{"gray96", 245, 245, 245}, +{"gray97", 247, 247, 247}, +{"gray98", 250, 250, 250}, +{"gray99", 252, 252, 252}, +{"green", 0, 255, 0}, +{"green yellow", 173, 255, 47}, +{"green1", 0, 255, 0}, +{"green2", 0, 238, 0}, +{"green3", 0, 205, 0}, +{"green4", 0, 139, 0}, +{"GreenYellow", 173, 255, 47}, +{"grey", 190, 190, 190}, +{"grey0", 0, 0, 0}, +{"grey1", 3, 3, 3}, +{"grey10", 26, 26, 26}, +{"grey100", 255, 255, 255}, +{"grey11", 28, 28, 28}, +{"grey12", 31, 31, 31}, +{"grey13", 33, 33, 33}, +{"grey14", 36, 36, 36}, +{"grey15", 38, 38, 38}, +{"grey16", 41, 41, 41}, +{"grey17", 43, 43, 43}, +{"grey18", 46, 46, 46}, +{"grey19", 48, 48, 48}, +{"grey2", 5, 5, 5}, +{"grey20", 51, 51, 51}, +{"grey21", 54, 54, 54}, +{"grey22", 56, 56, 56}, +{"grey23", 59, 59, 59}, +{"grey24", 61, 61, 61}, +{"grey25", 64, 64, 64}, +{"grey26", 66, 66, 66}, +{"grey27", 69, 69, 69}, +{"grey28", 71, 71, 71}, +{"grey29", 74, 74, 74}, +{"grey3", 8, 8, 8}, +{"grey30", 77, 77, 77}, +{"grey31", 79, 79, 79}, +{"grey32", 82, 82, 82}, +{"grey33", 84, 84, 84}, +{"grey34", 87, 87, 87}, +{"grey35", 89, 89, 89}, +{"grey36", 92, 92, 92}, +{"grey37", 94, 94, 94}, +{"grey38", 97, 97, 97}, +{"grey39", 99, 99, 99}, +{"grey4", 10, 10, 10}, +{"grey40", 102, 102, 102}, +{"grey41", 105, 105, 105}, +{"grey42", 107, 107, 107}, +{"grey43", 110, 110, 110}, +{"grey44", 112, 112, 112}, +{"grey45", 115, 115, 115}, +{"grey46", 117, 117, 117}, +{"grey47", 120, 120, 120}, +{"grey48", 122, 122, 122}, +{"grey49", 125, 125, 125}, +{"grey5", 13, 13, 13}, +{"grey50", 127, 127, 127}, +{"grey51", 130, 130, 130}, +{"grey52", 133, 133, 133}, +{"grey53", 135, 135, 135}, +{"grey54", 138, 138, 138}, +{"grey55", 140, 140, 140}, +{"grey56", 143, 143, 143}, +{"grey57", 145, 145, 145}, +{"grey58", 148, 148, 148}, +{"grey59", 150, 150, 150}, +{"grey6", 15, 15, 15}, +{"grey60", 153, 153, 153}, +{"grey61", 156, 156, 156}, +{"grey62", 158, 158, 158}, +{"grey63", 161, 161, 161}, +{"grey64", 163, 163, 163}, +{"grey65", 166, 166, 166}, +{"grey66", 168, 168, 168}, +{"grey67", 171, 171, 171}, +{"grey68", 173, 173, 173}, +{"grey69", 176, 176, 176}, +{"grey7", 18, 18, 18}, +{"grey70", 179, 179, 179}, +{"grey71", 181, 181, 181}, +{"grey72", 184, 184, 184}, +{"grey73", 186, 186, 186}, +{"grey74", 189, 189, 189}, +{"grey75", 191, 191, 191}, +{"grey76", 194, 194, 194}, +{"grey77", 196, 196, 196}, +{"grey78", 199, 199, 199}, +{"grey79", 201, 201, 201}, +{"grey8", 20, 20, 20}, +{"grey80", 204, 204, 204}, +{"grey81", 207, 207, 207}, +{"grey82", 209, 209, 209}, +{"grey83", 212, 212, 212}, +{"grey84", 214, 214, 214}, +{"grey85", 217, 217, 217}, +{"grey86", 219, 219, 219}, +{"grey87", 222, 222, 222}, +{"grey88", 224, 224, 224}, +{"grey89", 227, 227, 227}, +{"grey9", 23, 23, 23}, +{"grey90", 229, 229, 229}, +{"grey91", 232, 232, 232}, +{"grey92", 235, 235, 235}, +{"grey93", 237, 237, 237}, +{"grey94", 240, 240, 240}, +{"grey95", 242, 242, 242}, +{"grey96", 245, 245, 245}, +{"grey97", 247, 247, 247}, +{"grey98", 250, 250, 250}, +{"grey99", 252, 252, 252}, +{"honeydew", 240, 255, 240}, +{"honeydew1", 240, 255, 240}, +{"honeydew2", 224, 238, 224}, +{"honeydew3", 193, 205, 193}, +{"honeydew4", 131, 139, 131}, +{"hot pink", 255, 105, 180}, +{"HotPink", 255, 105, 180}, +{"HotPink1", 255, 110, 180}, +{"HotPink2", 238, 106, 167}, +{"HotPink3", 205, 96, 144}, +{"HotPink4", 139, 58, 98}, +{"indian red", 205, 92, 92}, +{"IndianRed", 205, 92, 92}, +{"IndianRed1", 255, 106, 106}, +{"IndianRed2", 238, 99, 99}, +{"IndianRed3", 205, 85, 85}, +{"IndianRed4", 139, 58, 58}, +{"ivory", 255, 255, 240}, +{"ivory1", 255, 255, 240}, +{"ivory2", 238, 238, 224}, +{"ivory3", 205, 205, 193}, +{"ivory4", 139, 139, 131}, +{"khaki", 240, 230, 140}, +{"khaki1", 255, 246, 143}, +{"khaki2", 238, 230, 133}, +{"khaki3", 205, 198, 115}, +{"khaki4", 139, 134, 78}, +{"lavender", 230, 230, 250}, +{"lavender blush", 255, 240, 245}, +{"LavenderBlush", 255, 240, 245}, +{"LavenderBlush1", 255, 240, 245}, +{"LavenderBlush2", 238, 224, 229}, +{"LavenderBlush3", 205, 193, 197}, +{"LavenderBlush4", 139, 131, 134}, +{"lawn green", 124, 252, 0}, +{"LawnGreen", 124, 252, 0}, +{"lemon chiffon", 255, 250, 205}, +{"LemonChiffon", 255, 250, 205}, +{"LemonChiffon1", 255, 250, 205}, +{"LemonChiffon2", 238, 233, 191}, +{"LemonChiffon3", 205, 201, 165}, +{"LemonChiffon4", 139, 137, 112}, +{"light blue", 173, 216, 230}, +{"light coral", 240, 128, 128}, +{"light cyan", 224, 255, 255}, +{"light goldenrod", 238, 221, 130}, +{"light goldenrod yellow", 250, 250, 210}, +{"light gray", 211, 211, 211}, +{"light green", 144, 238, 144}, +{"light grey", 211, 211, 211}, +{"light pink", 255, 182, 193}, +{"light salmon", 255, 160, 122}, +{"light sea green", 32, 178, 170}, +{"light sky blue", 135, 206, 250}, +{"light slate blue", 132, 112, 255}, +{"light slate gray", 119, 136, 153}, +{"light slate grey", 119, 136, 153}, +{"light steel blue", 176, 196, 222}, +{"light yellow", 255, 255, 224}, +{"LightBlue", 173, 216, 230}, +{"LightBlue1", 191, 239, 255}, +{"LightBlue2", 178, 223, 238}, +{"LightBlue3", 154, 192, 205}, +{"LightBlue4", 104, 131, 139}, +{"LightCoral", 240, 128, 128}, +{"LightCyan", 224, 255, 255}, +{"LightCyan1", 224, 255, 255}, +{"LightCyan2", 209, 238, 238}, +{"LightCyan3", 180, 205, 205}, +{"LightCyan4", 122, 139, 139}, +{"LightGoldenrod", 238, 221, 130}, +{"LightGoldenrod1", 255, 236, 139}, +{"LightGoldenrod2", 238, 220, 130}, +{"LightGoldenrod3", 205, 190, 112}, +{"LightGoldenrod4", 139, 129, 76}, +{"LightGoldenrodYellow", 250, 250, 210}, +{"LightGray", 211, 211, 211}, +{"LightGreen", 144, 238, 144}, +{"LightGrey", 211, 211, 211}, +{"LightPink", 255, 182, 193}, +{"LightPink1", 255, 174, 185}, +{"LightPink2", 238, 162, 173}, +{"LightPink3", 205, 140, 149}, +{"LightPink4", 139, 95, 101}, +{"LightSalmon", 255, 160, 122}, +{"LightSalmon1", 255, 160, 122}, +{"LightSalmon2", 238, 149, 114}, +{"LightSalmon3", 205, 129, 98}, +{"LightSalmon4", 139, 87, 66}, +{"LightSeaGreen", 32, 178, 170}, +{"LightSkyBlue", 135, 206, 250}, +{"LightSkyBlue1", 176, 226, 255}, +{"LightSkyBlue2", 164, 211, 238}, +{"LightSkyBlue3", 141, 182, 205}, +{"LightSkyBlue4", 96, 123, 139}, +{"LightSlateBlue", 132, 112, 255}, +{"LightSlateGray", 119, 136, 153}, +{"LightSlateGrey", 119, 136, 153}, +{"LightSteelBlue", 176, 196, 222}, +{"LightSteelBlue1", 202, 225, 255}, +{"LightSteelBlue2", 188, 210, 238}, +{"LightSteelBlue3", 162, 181, 205}, +{"LightSteelBlue4", 110, 123, 139}, +{"LightYellow", 255, 255, 224}, +{"LightYellow1", 255, 255, 224}, +{"LightYellow2", 238, 238, 209}, +{"LightYellow3", 205, 205, 180}, +{"LightYellow4", 139, 139, 122}, +{"lime green", 50, 205, 50}, +{"LimeGreen", 50, 205, 50}, +{"linen", 250, 240, 230}, +{"magenta", 255, 0, 255}, +{"magenta1", 255, 0, 255}, +{"magenta2", 238, 0, 238}, +{"magenta3", 205, 0, 205}, +{"magenta4", 139, 0, 139}, +{"maroon", 176, 48, 96}, +{"maroon1", 255, 52, 179}, +{"maroon2", 238, 48, 167}, +{"maroon3", 205, 41, 144}, +{"maroon4", 139, 28, 98}, +{"medium aquamarine", 102, 205, 170}, +{"medium blue", 0, 0, 205}, +{"medium orchid", 186, 85, 211}, +{"medium purple", 147, 112, 219}, +{"medium sea green", 60, 179, 113}, +{"medium slate blue", 123, 104, 238}, +{"medium spring green", 0, 250, 154}, +{"medium turquoise", 72, 209, 204}, +{"medium violet red", 199, 21, 133}, +{"MediumAquamarine", 102, 205, 170}, +{"MediumBlue", 0, 0, 205}, +{"MediumOrchid", 186, 85, 211}, +{"MediumOrchid1", 224, 102, 255}, +{"MediumOrchid2", 209, 95, 238}, +{"MediumOrchid3", 180, 82, 205}, +{"MediumOrchid4", 122, 55, 139}, +{"MediumPurple", 147, 112, 219}, +{"MediumPurple1", 171, 130, 255}, +{"MediumPurple2", 159, 121, 238}, +{"MediumPurple3", 137, 104, 205}, +{"MediumPurple4", 93, 71, 139}, +{"MediumSeaGreen", 60, 179, 113}, +{"MediumSlateBlue", 123, 104, 238}, +{"MediumSpringGreen", 0, 250, 154}, +{"MediumTurquoise", 72, 209, 204}, +{"MediumVioletRed", 199, 21, 133}, +{"midnight blue", 25, 25, 112}, +{"MidnightBlue", 25, 25, 112}, +{"mint cream", 245, 255, 250}, +{"MintCream", 245, 255, 250}, +{"misty rose", 255, 228, 225}, +{"MistyRose", 255, 228, 225}, +{"MistyRose1", 255, 228, 225}, +{"MistyRose2", 238, 213, 210}, +{"MistyRose3", 205, 183, 181}, +{"MistyRose4", 139, 125, 123}, +{"moccasin", 255, 228, 181}, +{"navajo white", 255, 222, 173}, +{"NavajoWhite", 255, 222, 173}, +{"NavajoWhite1", 255, 222, 173}, +{"NavajoWhite2", 238, 207, 161}, +{"NavajoWhite3", 205, 179, 139}, +{"NavajoWhite4", 139, 121, 94}, +{"navy", 0, 0, 128}, +{"navy blue", 0, 0, 128}, +{"NavyBlue", 0, 0, 128}, +{"old lace", 253, 245, 230}, +{"OldLace", 253, 245, 230}, +{"olive drab", 107, 142, 35}, +{"OliveDrab", 107, 142, 35}, +{"OliveDrab1", 192, 255, 62}, +{"OliveDrab2", 179, 238, 58}, +{"OliveDrab3", 154, 205, 50}, +{"OliveDrab4", 105, 139, 34}, +{"orange", 255, 165, 0}, +{"orange red", 255, 69, 0}, +{"orange1", 255, 165, 0}, +{"orange2", 238, 154, 0}, +{"orange3", 205, 133, 0}, +{"orange4", 139, 90, 0}, +{"OrangeRed", 255, 69, 0}, +{"OrangeRed1", 255, 69, 0}, +{"OrangeRed2", 238, 64, 0}, +{"OrangeRed3", 205, 55, 0}, +{"OrangeRed4", 139, 37, 0}, +{"orchid", 218, 112, 214}, +{"orchid1", 255, 131, 250}, +{"orchid2", 238, 122, 233}, +{"orchid3", 205, 105, 201}, +{"orchid4", 139, 71, 137}, +{"pale goldenrod", 238, 232, 170}, +{"pale green", 152, 251, 152}, +{"pale turquoise", 175, 238, 238}, +{"pale violet red", 219, 112, 147}, +{"PaleGoldenrod", 238, 232, 170}, +{"PaleGreen", 152, 251, 152}, +{"PaleGreen1", 154, 255, 154}, +{"PaleGreen2", 144, 238, 144}, +{"PaleGreen3", 124, 205, 124}, +{"PaleGreen4", 84, 139, 84}, +{"PaleTurquoise", 175, 238, 238}, +{"PaleTurquoise1", 187, 255, 255}, +{"PaleTurquoise2", 174, 238, 238}, +{"PaleTurquoise3", 150, 205, 205}, +{"PaleTurquoise4", 102, 139, 139}, +{"PaleVioletRed", 219, 112, 147}, +{"PaleVioletRed1", 255, 130, 171}, +{"PaleVioletRed2", 238, 121, 159}, +{"PaleVioletRed3", 205, 104, 137}, +{"PaleVioletRed4", 139, 71, 93}, +{"papaya whip", 255, 239, 213}, +{"PapayaWhip", 255, 239, 213}, +{"peach puff", 255, 218, 185}, +{"PeachPuff", 255, 218, 185}, +{"PeachPuff1", 255, 218, 185}, +{"PeachPuff2", 238, 203, 173}, +{"PeachPuff3", 205, 175, 149}, +{"PeachPuff4", 139, 119, 101}, +{"peru", 205, 133, 63}, +{"pink", 255, 192, 203}, +{"pink1", 255, 181, 197}, +{"pink2", 238, 169, 184}, +{"pink3", 205, 145, 158}, +{"pink4", 139, 99, 108}, +{"plum", 221, 160, 221}, +{"plum1", 255, 187, 255}, +{"plum2", 238, 174, 238}, +{"plum3", 205, 150, 205}, +{"plum4", 139, 102, 139}, +{"powder blue", 176, 224, 230}, +{"PowderBlue", 176, 224, 230}, +{"purple", 160, 32, 240}, +{"purple1", 155, 48, 255}, +{"purple2", 145, 44, 238}, +{"purple3", 125, 38, 205}, +{"purple4", 85, 26, 139}, +{"red", 255, 0, 0}, +{"red1", 255, 0, 0}, +{"red2", 238, 0, 0}, +{"red3", 205, 0, 0}, +{"red4", 139, 0, 0}, +{"rosy brown", 188, 143, 143}, +{"RosyBrown", 188, 143, 143}, +{"RosyBrown1", 255, 193, 193}, +{"RosyBrown2", 238, 180, 180}, +{"RosyBrown3", 205, 155, 155}, +{"RosyBrown4", 139, 105, 105}, +{"royal blue", 65, 105, 225}, +{"RoyalBlue", 65, 105, 225}, +{"RoyalBlue1", 72, 118, 255}, +{"RoyalBlue2", 67, 110, 238}, +{"RoyalBlue3", 58, 95, 205}, +{"RoyalBlue4", 39, 64, 139}, +{"saddle brown", 139, 69, 19}, +{"SaddleBrown", 139, 69, 19}, +{"salmon", 250, 128, 114}, +{"salmon1", 255, 140, 105}, +{"salmon2", 238, 130, 98}, +{"salmon3", 205, 112, 84}, +{"salmon4", 139, 76, 57}, +{"sandy brown", 244, 164, 96}, +{"SandyBrown", 244, 164, 96}, +{"sea green", 46, 139, 87}, +{"SeaGreen", 46, 139, 87}, +{"SeaGreen1", 84, 255, 159}, +{"SeaGreen2", 78, 238, 148}, +{"SeaGreen3", 67, 205, 128}, +{"SeaGreen4", 46, 139, 87}, +{"seashell", 255, 245, 238}, +{"seashell1", 255, 245, 238}, +{"seashell2", 238, 229, 222}, +{"seashell3", 205, 197, 191}, +{"seashell4", 139, 134, 130}, +{"sienna", 160, 82, 45}, +{"sienna1", 255, 130, 71}, +{"sienna2", 238, 121, 66}, +{"sienna3", 205, 104, 57}, +{"sienna4", 139, 71, 38}, +{"sky blue", 135, 206, 235}, +{"SkyBlue", 135, 206, 235}, +{"SkyBlue1", 135, 206, 255}, +{"SkyBlue2", 126, 192, 238}, +{"SkyBlue3", 108, 166, 205}, +{"SkyBlue4", 74, 112, 139}, +{"slate blue", 106, 90, 205}, +{"slate gray", 112, 128, 144}, +{"slate grey", 112, 128, 144}, +{"SlateBlue", 106, 90, 205}, +{"SlateBlue1", 131, 111, 255}, +{"SlateBlue2", 122, 103, 238}, +{"SlateBlue3", 105, 89, 205}, +{"SlateBlue4", 71, 60, 139}, +{"SlateGray", 112, 128, 144}, +{"SlateGray1", 198, 226, 255}, +{"SlateGray2", 185, 211, 238}, +{"SlateGray3", 159, 182, 205}, +{"SlateGray4", 108, 123, 139}, +{"SlateGrey", 112, 128, 144}, +{"snow", 255, 250, 250}, +{"snow1", 255, 250, 250}, +{"snow2", 238, 233, 233}, +{"snow3", 205, 201, 201}, +{"snow4", 139, 137, 137}, +{"spring green", 0, 255, 127}, +{"SpringGreen", 0, 255, 127}, +{"SpringGreen1", 0, 255, 127}, +{"SpringGreen2", 0, 238, 118}, +{"SpringGreen3", 0, 205, 102}, +{"SpringGreen4", 0, 139, 69}, +{"steel blue", 70, 130, 180}, +{"SteelBlue", 70, 130, 180}, +{"SteelBlue1", 99, 184, 255}, +{"SteelBlue2", 92, 172, 238}, +{"SteelBlue3", 79, 148, 205}, +{"SteelBlue4", 54, 100, 139}, +{"tan", 210, 180, 140}, +{"tan1", 255, 165, 79}, +{"tan2", 238, 154, 73}, +{"tan3", 205, 133, 63}, +{"tan4", 139, 90, 43}, +{"thistle", 216, 191, 216}, +{"thistle1", 255, 225, 255}, +{"thistle2", 238, 210, 238}, +{"thistle3", 205, 181, 205}, +{"thistle4", 139, 123, 139}, +{"tomato", 255, 99, 71}, +{"tomato1", 255, 99, 71}, +{"tomato2", 238, 92, 66}, +{"tomato3", 205, 79, 57}, +{"tomato4", 139, 54, 38}, +{"turquoise", 64, 224, 208}, +{"turquoise1", 0, 245, 255}, +{"turquoise2", 0, 229, 238}, +{"turquoise3", 0, 197, 205}, +{"turquoise4", 0, 134, 139}, +{"violet", 238, 130, 238}, +{"violet red", 208, 32, 144}, +{"VioletRed", 208, 32, 144}, +{"VioletRed1", 255, 62, 150}, +{"VioletRed2", 238, 58, 140}, +{"VioletRed3", 205, 50, 120}, +{"VioletRed4", 139, 34, 82}, +{"wheat", 245, 222, 179}, +{"wheat1", 255, 231, 186}, +{"wheat2", 238, 216, 174}, +{"wheat3", 205, 186, 150}, +{"wheat4", 139, 126, 102}, +{"white", 255, 255, 255}, +{"white smoke", 245, 245, 245}, +{"WhiteSmoke", 245, 245, 245}, +{"yellow", 255, 255, 0}, +{"yellow green", 154, 205, 50}, +{"yellow1", 255, 255, 0}, +{"yellow2", 238, 238, 0}, +{"yellow3", 205, 205, 0}, +{"yellow4", 139, 139, 0}, +{"YellowGreen", 154, 205, 50}, +}; + /* clang-format on */ static const DLword bitmask[16] = {1 << 15, 1 << 14, 1 << 13, 1 << 12, 1 << 11, 1 << 10, 1 << 9, 1 << 8, 1 << 7, 1 << 6, 1 << 5, 1 << 4, @@ -186,7 +944,38 @@ extern DLword *EmCursorBitMap68K; extern DLword *CTopKeyevent; extern int URaid_req; extern LispPTR *KEYBUFFERING68k; +extern char foregroundColorName[64]; +extern char backgroundColorName[64]; +/* + * sdl_MapColorName approximates the X11 color parsing, + * taking either a #RRGGBB hex value, or a name that is mapped + * through the X11 color names table, returning an SDL pixel + * according to the given pixel format + */ +static Uint32 sdl_MapColorName(const SDL_PixelFormat * format, char *name) { + /* check for #RRBBGG format */ + if (name[0]=='#' && strlen(name) == 7 && strspn(&name[1], "0123456789abcdefABCDEF") == 6) { + unsigned long pixval = strtoul(&name[1], NULL, 16); +#if SDL_MAJOR_VERSION == 2 + return SDL_MapRGB(format, (pixval >> 16) & 0xFF, (pixval >> 8) & 0xFF, pixval & 0xFF); +#else + return SDL_MapRGB(format, NULL, (pixval >> 16) & 0xFF, (pixval >> 8) & 0xFF, pixval & 0xFF); +#endif + } + /* then try for a named color */ + for (int i = 0; i < sizeof(colornames)/sizeof(colornames[0]); i++) { + if (0 == strcasecmp(name, colornames[i].name)) { +#if SDL_MAJOR_VERSION == 2 + return SDL_MapRGB(format, colornames[i].red, colornames[i].green, colornames[i].blue); +#else + return SDL_MapRGB(format, NULL, colornames[i].red, colornames[i].green, colornames[i].blue); +#endif + } + } + /* fail */ + return(0); +} void DoRing() { DLword w, r; KBEVENT *kbevent; @@ -556,11 +1345,11 @@ static void sdl_update_viewport(int width, int height) { static int last_keystate[512] = {0}; void sdl_set_invert(int flag) { if (flag) { - sdl_foreground = sdl_white; - sdl_background = sdl_black; + sdl_foreground = sdl_background_color; + sdl_background = sdl_foreground_color; } else { - sdl_foreground = sdl_black; - sdl_background = sdl_white; + sdl_foreground = sdl_foreground_color; + sdl_background = sdl_background_color; } sdl_notify_damage(0, 0, sdl_displaywidth, sdl_displayheight); } @@ -820,10 +1609,12 @@ int init_SDL(char *windowtitle, int w, int h, int s) { printf("Creating texture...\n"); sdl_texture = SDL_CreateTexture(sdl_renderer, sdl_pixelformat->format, SDL_TEXTUREACCESS_STREAMING, width, height); - sdl_black = SDL_MapRGB(sdl_pixelformat, 0, 0, 0); - sdl_white = SDL_MapRGB(sdl_pixelformat, 255, 255, 255); - sdl_foreground = sdl_black; - sdl_background = sdl_white; + sdl_foreground_color = sdl_MapColorName(sdl_pixelformat, + foregroundColorName[0] ? foregroundColorName : "black"); + sdl_background_color = sdl_MapColorName(sdl_pixelformat, + backgroundColorName[0] ? backgroundColorName : "white"); + sdl_foreground = sdl_foreground_color; + sdl_background = sdl_background_color; #if SDL_MAJOR_VERSION == 2 sdl_bytesperpixel = sdl_pixelformat->BytesPerPixel; #else @@ -833,10 +1624,12 @@ int init_SDL(char *windowtitle, int w, int h, int s) { printf("Creating window surface and buffer surface\n"); sdl_windowsurface = SDL_GetWindowSurface(sdl_window); sdl_pixelformat = sdl_windowsurface->format; - sdl_black = SDL_MapRGB(sdl_pixelformat, 0, 0, 0); - sdl_white = SDL_MapRGB(sdl_pixelformat, 255, 255, 255); - sdl_foreground = sdl_black; - sdl_background = sdl_white; + sdl_foreground_color = sdl_MapColorName(sdl_pixelformat, + foregroundColorName[0] ? foregroundColorName : "black"); + sdl_background_color = sdl_MapColorName(sdl_pixelformat, + backgroundColorName[0] ? backgroundColorName : "white"); + sdl_foreground = sdl_foreground_color; + sdl_background = sdl_background_color; #if SDL_MAJOR_VERSION == 2 sdl_bytesperpixel = sdl_pixelformat->BytesPerPixel; #else diff --git a/src/xlspwin.c b/src/xlspwin.c index 811072c9..8ed8b493 100644 --- a/src/xlspwin.c +++ b/src/xlspwin.c @@ -17,6 +17,7 @@ #include <X11/Xlib.h> // for XCreateSimpleWindow, XMapWindow, XChangeWin... #include <X11/Xutil.h> // for XSizeHints, XStringListToTextProperty, XWMH... #include <stdio.h> // for NULL +#include <stdlib.h> // for exit #include "commondefs.h" // for error #include "dbprint.h" // for TPRINT #include "devif.h" // for (anonymous), MRegion, OUTER_SB_WIDTH, Defin... @@ -50,6 +51,7 @@ extern int LispWindowRequestedX, LispWindowRequestedY; extern unsigned LispWindowRequestedWidth, LispWindowRequestedHeight; extern int noscroll; +extern Colormap Colors; /* * globals defined in this module */ @@ -66,9 +68,16 @@ Cursor WaitCursor, DefaultCursor, VertScrollCursor, VertThumbCursor, ScrollUpCur /* */ /* */ /************************************************************************/ +static unsigned long foregroundPixel; +static unsigned long backgroundPixel; void Create_LispWindow(DspInterface dsp) { + extern char foregroundColorName[]; + extern char backgroundColorName[]; + XColor foregroundColor_xcsd; + XColor backgroundColor_xcsd; + Status status; XSizeHints szhint = {0}; XWMHints Lisp_WMhints = {0}; XClassHint xclasshint = {0}; @@ -92,13 +101,33 @@ void Create_LispWindow(DspInterface dsp) Row3 = dsp->Visible.height + (OUTER_SB_WIDTH(dsp) / 2); screen = ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id)); + /* set up default display as black on white */ + foregroundPixel = BlackPixelOfScreen(screen); + backgroundPixel = WhitePixelOfScreen(screen); + /* parse and record non-default color specs for foreground and background */ + if (foregroundColorName[0]) { + status = XAllocNamedColor(dsp->display_id, Colors, foregroundColorName, &foregroundColor_xcsd, &foregroundColor_xcsd); + if (status == 0) { + fprintf(stderr, "Color allocation failed for foreground color: %s\n", foregroundColorName); + exit(1); + } + foregroundPixel = foregroundColor_xcsd.pixel; + } + if (backgroundColorName[0]) { + status = XAllocNamedColor(dsp->display_id, Colors, backgroundColorName, &backgroundColor_xcsd, &backgroundColor_xcsd); + if (status == 0) { + fprintf(stderr, "Color allocation failed for background color: %s\n", backgroundColorName); + exit(1); + } + backgroundPixel = backgroundColor_xcsd.pixel; + } dsp->LispWindow = XCreateSimpleWindow( dsp->display_id, RootWindowOfScreen(screen), LispWindowRequestedX, /* Default upper left */ LispWindowRequestedY, /* Default upper left */ dsp->Visible.width + OUTER_SB_WIDTH(dsp), /* Default width */ dsp->Visible.height + OUTER_SB_WIDTH(dsp), /* Default height */ 0, /* Default border */ - BlackPixelOfScreen(screen), WhitePixelOfScreen(screen)); + foregroundPixel, backgroundPixel); Lisp_SetWinAttributes.bit_gravity = dsp->BitGravity; Lisp_SetWinAttributes.override_redirect = False; @@ -114,10 +143,8 @@ void Create_LispWindow(DspInterface dsp) /* Have to make the GC before we make the icon. */ gcv.function = GXcopy; - gcv.foreground = - BlackPixelOfScreen(ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id))); - gcv.background = - WhitePixelOfScreen(ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id))); + gcv.foreground = foregroundPixel; + gcv.background = backgroundPixel; dsp->Copy_GC = XCreateGC(dsp->display_id, dsp->LispWindow, GCForeground | GCBackground | GCFunction, &gcv); @@ -146,7 +173,7 @@ void Create_LispWindow(DspInterface dsp) dsp->DisplayWindow = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, 0, 0, dsp->Visible.width, dsp->Visible.height, 0, - BlackPixelOfScreen(screen), WhitePixelOfScreen(screen)); + foregroundPixel, backgroundPixel); XChangeWindowAttributes(dsp->display_id, dsp->DisplayWindow, CWBitGravity | CWOverrideRedirect | CWBackingStore, &Lisp_SetWinAttributes); @@ -159,14 +186,14 @@ void Create_LispWindow(DspInterface dsp) dsp->ScrollBarPixmap = XCreatePixmapFromBitmapData( dsp->display_id, dsp->LispWindow, (char *)check_bits, check_width, check_height, - BlackPixelOfScreen(screen), WhitePixelOfScreen(screen), (unsigned)DefaultDepthOfScreen(screen)); + foregroundPixel, backgroundPixel, (unsigned)DefaultDepthOfScreen(screen)); dsp->GravityOnPixmap = XCreatePixmapFromBitmapData( - dsp->display_id, dsp->LispWindow, (char *)check_bits, 16, 16, BlackPixelOfScreen(screen), - WhitePixelOfScreen(screen), (unsigned)DefaultDepthOfScreen(screen)); + dsp->display_id, dsp->LispWindow, (char *)check_bits, 16, 16, foregroundPixel, + backgroundPixel, (unsigned)DefaultDepthOfScreen(screen)); dsp->GravityOffPixmap = XCreatePixmapFromBitmapData( - dsp->display_id, dsp->LispWindow, (char *)plain_bits, 16, 16, BlackPixelOfScreen(screen), - WhitePixelOfScreen(screen), (unsigned)DefaultDepthOfScreen(screen)); + dsp->display_id, dsp->LispWindow, (char *)plain_bits, 16, 16, foregroundPixel, + backgroundPixel, (unsigned)DefaultDepthOfScreen(screen)); set_Xcursor(dsp, default_cursor.cuimage, (int)default_cursor.cuhotspotx, (int)(15 - default_cursor.cuhotspoty), &DefaultCursor, 0); @@ -197,7 +224,7 @@ void Create_LispWindow(DspInterface dsp) 0 - (int)dsp->InternalBorderWidth, /* y */ dsp->ScrollBarWidth, /* width */ dsp->Visible.height, dsp->InternalBorderWidth, - BlackPixelOfScreen(screen), WhitePixelOfScreen(screen)); + foregroundPixel, backgroundPixel); DefineCursor(dsp, dsp->VerScrollBar, &VertScrollCursor); XMapWindow(dsp->display_id, dsp->VerScrollBar); @@ -205,7 +232,7 @@ void Create_LispWindow(DspInterface dsp) 0 - (int)dsp->InternalBorderWidth, (int)Row2, /* y */ dsp->Visible.width, /* width */ dsp->ScrollBarWidth, dsp->InternalBorderWidth, - BlackPixelOfScreen(screen), WhitePixelOfScreen(screen)); + foregroundPixel, backgroundPixel); DefineCursor(dsp, dsp->HorScrollBar, &HorizScrollCursor); XChangeWindowAttributes(dsp->display_id, dsp->HorScrollBar, CWOverrideRedirect, &Lisp_SetWinAttributes); @@ -216,7 +243,7 @@ void Create_LispWindow(DspInterface dsp) (dsp->Visible.y * (int)dsp->Visible.height) / (int)dsp->Display.height, /* y */ dsp->ScrollBarWidth, /* width */ ((dsp->Visible.height * dsp->Visible.height) / dsp->Display.height) + 1, - dsp->InternalBorderWidth, BlackPixelOfScreen(screen), WhitePixelOfScreen(screen)); + dsp->InternalBorderWidth, foregroundPixel, backgroundPixel); XChangeWindowAttributes(dsp->display_id, dsp->VerScrollButton, CWOverrideRedirect, &Lisp_SetWinAttributes); XSetWindowBackgroundPixmap(dsp->display_id, dsp->VerScrollButton, dsp->ScrollBarPixmap); @@ -228,8 +255,8 @@ void Create_LispWindow(DspInterface dsp) (dsp->Visible.x * (int)dsp->Visible.width) / (int)dsp->Display.width, 0 - (int)dsp->InternalBorderWidth, /* y */ ((dsp->Visible.width * dsp->Visible.width) / dsp->Display.width) + 1, - dsp->ScrollBarWidth, dsp->InternalBorderWidth, BlackPixelOfScreen(screen), - WhitePixelOfScreen(screen)); + dsp->ScrollBarWidth, dsp->InternalBorderWidth, foregroundPixel, + backgroundPixel); XChangeWindowAttributes(dsp->display_id, dsp->HorScrollButton, CWOverrideRedirect, &Lisp_SetWinAttributes); XSetWindowBackgroundPixmap(dsp->display_id, dsp->HorScrollButton, dsp->ScrollBarPixmap); @@ -237,8 +264,8 @@ void Create_LispWindow(DspInterface dsp) XMapWindow(dsp->display_id, dsp->HorScrollButton); dsp->NWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, (int)Col2, (int)Row2, GravSize, - GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen), - WhitePixelOfScreen(screen)); + GravSize, dsp->InternalBorderWidth, foregroundPixel, + backgroundPixel); XSetWindowBackgroundPixmap(dsp->display_id, dsp->NWGrav, dsp->GravityOnPixmap); DefineCursor(dsp, dsp->NWGrav, &DefaultCursor); XChangeWindowAttributes(dsp->display_id, dsp->NWGrav, CWOverrideRedirect, &Lisp_SetWinAttributes); @@ -246,8 +273,8 @@ void Create_LispWindow(DspInterface dsp) XMapWindow(dsp->display_id, dsp->NWGrav); dsp->SEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, (int)Col3, (int)Row3, GravSize, - GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen), - WhitePixelOfScreen(screen)); + GravSize, dsp->InternalBorderWidth, foregroundPixel, + backgroundPixel); XSetWindowBackgroundPixmap(dsp->display_id, dsp->SEGrav, dsp->GravityOffPixmap); DefineCursor(dsp, dsp->SEGrav, &DefaultCursor); XChangeWindowAttributes(dsp->display_id, dsp->SEGrav, CWOverrideRedirect, &Lisp_SetWinAttributes); @@ -255,16 +282,16 @@ void Create_LispWindow(DspInterface dsp) XMapWindow(dsp->display_id, dsp->SEGrav); dsp->SWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, (int)Col2, (int)Row3, GravSize, - GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen), - WhitePixelOfScreen(screen)); + GravSize, dsp->InternalBorderWidth, foregroundPixel, + backgroundPixel); XSetWindowBackgroundPixmap(dsp->display_id, dsp->SWGrav, dsp->GravityOffPixmap); DefineCursor(dsp, dsp->SWGrav, &DefaultCursor); XClearWindow(dsp->display_id, dsp->NWGrav); XMapWindow(dsp->display_id, dsp->SWGrav); dsp->NEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, (int)Col3, (int)Row2, GravSize, - GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen), - WhitePixelOfScreen(screen)); + GravSize, dsp->InternalBorderWidth, foregroundPixel, + backgroundPixel); XSetWindowBackgroundPixmap(dsp->display_id, dsp->NEGrav, dsp->GravityOffPixmap); DefineCursor(dsp, dsp->NEGrav, &DefaultCursor); XClearWindow(dsp->display_id, dsp->NWGrav); @@ -280,14 +307,12 @@ void Create_LispWindow(DspInterface dsp) void lisp_Xvideocolor(int flag) { - Screen *screen; XEvent event = {0}; XGCValues gcv = {0}; unsigned long newForeground; XLOCK; - screen = ScreenOfDisplay(currentdsp->display_id, DefaultScreen(currentdsp->display_id)); - newForeground = flag ? WhitePixelOfScreen(screen) : BlackPixelOfScreen(screen); + newForeground = flag ? backgroundPixel : foregroundPixel; /* window -- are we making a change? */ XGetGCValues(currentdsp->display_id, currentdsp->Copy_GC, GCForeground | GCBackground, &gcv); diff --git a/src/xrdopt.c b/src/xrdopt.c index 6140b581..31c882a9 100644 --- a/src/xrdopt.c +++ b/src/xrdopt.c @@ -87,6 +87,8 @@ extern char Icon_Title[255]; char Icon_Title[255]; extern char cursorColor[255]; char cursorColor[255] = {0}; +extern char foregroundColorName[64]; +extern char backgroundColorName[64]; extern char sysout_name_cl[]; extern char sysout_name_xrm[]; @@ -118,7 +120,9 @@ void print_Xusage(const char *prog) (void)fprintf(stderr, " [-sysout] [<sysout>] -path to the Medley image\n"); (void)fprintf(stderr, " -h[elp] -prints this text\n"); (void)fprintf(stderr, " -info -prints configuration info\n"); - (void)fprintf(stderr, " -cursorColor X11-color-spec -sets foreground cursor color\n"); + (void)fprintf(stderr, " -cursorColor X11-color-spec -sets foreground cursor color\n"); + (void)fprintf(stderr, " -fg|-foreground X11-color-spec -sets foreground display color\n"); + (void)fprintf(stderr, " -bg|-background X11-color-spec -sets background display color\n"); (void)fprintf(stderr, " -d[isplay] <host>:<display>.<screen>\n"); (void)fprintf(stderr, " -g[eometry] <geom> -size & placement for the medley window on your X " @@ -277,6 +281,14 @@ void read_Xoption(int *argc, char *argv[]) (void)strncpy(cursorColor, value.addr, sizeof(cursorColor) - 1); } + if (XrmGetResource(rDB, "ldex.foreground", "Ldex.foreground", str_type, &value) == True) { + (void)strncpy(foregroundColorName, value.addr, sizeof(foregroundColorName) - 1); + } + + if (XrmGetResource(rDB, "ldex.background", "Ldex.background", str_type, &value) == True) { + (void)strncpy(backgroundColorName, value.addr, sizeof(backgroundColorName) - 1); + } + if (XrmGetResource(rDB, "ldex.NoFork", "Ldex.NoFork", str_type, &value) == True) { please_fork = 0; }