1 /* 2 * Copyright 2007-2011, Haiku Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * François Revol, revol@free.fr 7 * Axel Dörfler, axeld@pinc-software.de 8 */ 9 10 11 #include <getopt.h> 12 #include <stdio.h> 13 14 #include <Application.h> 15 #include <InterfaceDefs.h> 16 #include <String.h> 17 18 #include <private/interface/DecoratorPrivate.h> 19 20 21 using namespace BPrivate; 22 23 24 static int sColorWhich = -1; 25 static struct option const kLongOptions[] = { 26 {"activetab", required_argument, &sColorWhich, B_WINDOW_TAB_COLOR}, 27 {"frame", required_argument, &sColorWhich, B_WINDOW_INACTIVE_TAB_COLOR}, //XXX:?? 28 {"activeborder", required_argument, &sColorWhich, -1}, //XXX:?? 29 {"inactiveborder", required_argument, &sColorWhich, -1}, //XXX:?? 30 {"activetitle", required_argument, &sColorWhich, B_WINDOW_TEXT_COLOR}, 31 {"inactivetitle", required_argument, &sColorWhich, B_WINDOW_INACTIVE_TEXT_COLOR}, 32 //temporary stuff 33 // grep ' B_.*_COLOR' headers/os/interface/InterfaceDefs.h | awk '{ print "I(" substr(tolower($1),3) ", " $1 ")," }' 34 #define I(l,v) \ 35 { #l, required_argument, &sColorWhich, v }, \ 36 { #v, required_argument, &sColorWhich, v } 37 38 I(panel_background_color, B_PANEL_BACKGROUND_COLOR), 39 I(panel_text_color, B_PANEL_TEXT_COLOR), 40 I(document_background_color, B_DOCUMENT_BACKGROUND_COLOR), 41 I(document_text_color, B_DOCUMENT_TEXT_COLOR), 42 I(control_background_color, B_CONTROL_BACKGROUND_COLOR), 43 I(control_text_color, B_CONTROL_TEXT_COLOR), 44 I(control_border_color, B_CONTROL_BORDER_COLOR), 45 I(control_highlight_color, B_CONTROL_HIGHLIGHT_COLOR), 46 I(navigation_base_color, B_NAVIGATION_BASE_COLOR), 47 I(navigation_pulse_color, B_NAVIGATION_PULSE_COLOR), 48 I(shine_color, B_SHINE_COLOR), 49 I(shadow_color, B_SHADOW_COLOR), 50 I(menu_background_color, B_MENU_BACKGROUND_COLOR), 51 I(menu_selected_background_color, B_MENU_SELECTED_BACKGROUND_COLOR), 52 I(menu_item_text_color, B_MENU_ITEM_TEXT_COLOR), 53 I(menu_selected_item_text_color, B_MENU_SELECTED_ITEM_TEXT_COLOR), 54 I(menu_selected_border_color, B_MENU_SELECTED_BORDER_COLOR), 55 I(tooltip_background_color, B_TOOL_TIP_BACKGROUND_COLOR), 56 I(tooltip_text_color, B_TOOL_TIP_TEXT_COLOR), 57 I(success_color, B_SUCCESS_COLOR), 58 I(failure_color, B_FAILURE_COLOR), 59 I(keyboard_navigation_color, B_KEYBOARD_NAVIGATION_COLOR), 60 I(menu_selection_background_color, B_MENU_SELECTION_BACKGROUND_COLOR), 61 I(desktop_color, B_DESKTOP_COLOR), 62 I(window_tab_color, B_WINDOW_TAB_COLOR), 63 I(window_text_color, B_WINDOW_TEXT_COLOR), 64 I(window_inactive_tab_color, B_WINDOW_INACTIVE_TAB_COLOR), 65 I(window_inactive_text_color, B_WINDOW_INACTIVE_TEXT_COLOR), 66 I(window_border_color, B_WINDOW_BORDER_COLOR), 67 I(window_inactive_border_color, B_WINDOW_INACTIVE_BORDER_COLOR), 68 {"sum", required_argument, 0, 's'}, 69 {"refresh", no_argument, 0, 'r'}, 70 {"help", no_argument, 0, 'h'}, 71 {NULL} 72 }; 73 74 75 extern const char *__progname; 76 static const char *sProgramName = __progname; 77 78 79 void 80 usage(void) 81 { 82 printf("%s [-sum md5sum] [colID colspec] [-refresh]\n", sProgramName); 83 printf("Tweak the default window decorator colors.\n"); 84 printf("\t-sum deprecated option, kept for compatibility\n"); 85 printf("\t-refresh refresh the entire display (force update)\n"); 86 printf("\tcolID can be:\n"); 87 printf("\t-activetab\n"); 88 printf("\t-frame\n"); 89 printf("\t-activeborder\n"); 90 printf("\t-inactiveborder\n"); 91 printf("\t-activetitle\n"); 92 printf("\t-inactivetitle\n"); 93 printf("\tcolspec is a 6 digit hexadecimal color number. \n" 94 "\t\t\t(rrggbb, html format)\n"); 95 } 96 97 98 static int 99 UpdateUIColor(color_which which, const char *str) 100 { 101 rgb_color color; 102 unsigned int r, g, b; 103 if (which < 0) 104 return -1; 105 // parse 106 if (!str || !str[0]) 107 return -1; 108 if (str[0] == '#') 109 str++; 110 if (sscanf(str, "%02x%02x%02x", &r, &g, &b) < 3) 111 return -1; 112 color.red = r; 113 color.green = g; 114 color.blue = b; 115 color.alpha = 255; 116 //printf("setting %d to {%d, %d, %d, %d}\n", which, r, g, b, 255); 117 set_ui_color(which, color); 118 return B_OK; 119 } 120 121 int 122 main(int argc, char **argv) 123 { 124 BApplication app("application/x-vnd.Haiku-WindowShade"); 125 int c; 126 127 // parse command line parameters 128 129 while ((c = getopt_long_only(argc, argv, "h", kLongOptions, NULL)) != -1) { 130 switch (c) { 131 case 0: 132 UpdateUIColor((color_which)sColorWhich, optarg); 133 break; 134 case 'h': 135 usage(); 136 return 0; 137 default: 138 usage(); 139 return 1; 140 141 case 'r': 142 { 143 // TODO: refresh (but shouldn't be needed) 144 BString name; 145 if (get_decorator(name)) 146 set_decorator(name); 147 break; 148 } 149 150 case 's': 151 // IGNORED, for compatibility with original app 152 break; 153 } 154 sColorWhich = -1; 155 } 156 157 return 0; 158 } 159