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(control_mark_color, B_CONTROL_MARK_COLOR) 47 I(navigation_base_color, B_NAVIGATION_BASE_COLOR), 48 I(navigation_pulse_color, B_NAVIGATION_PULSE_COLOR), 49 I(shine_color, B_SHINE_COLOR), 50 I(shadow_color, B_SHADOW_COLOR), 51 I(menu_background_color, B_MENU_BACKGROUND_COLOR), 52 I(menu_selected_background_color, B_MENU_SELECTED_BACKGROUND_COLOR), 53 I(menu_item_text_color, B_MENU_ITEM_TEXT_COLOR), 54 I(menu_selected_item_text_color, B_MENU_SELECTED_ITEM_TEXT_COLOR), 55 I(menu_selected_border_color, B_MENU_SELECTED_BORDER_COLOR), 56 I(list_background_color, B_LIST_BACKGROUND_COLOR), 57 I(list_selected_background_color, B_LIST_SELECTED_BACKGROUND_COLOR), 58 I(list_item_text_color, B_LIST_ITEM_TEXT_COLOR), 59 I(list_selected_item_text_color, B_LIST_SELECTED_ITEM_TEXT_COLOR), 60 I(scroll_bar_thumb_color, B_SCROLL_BAR_THUMB_COLOR), 61 I(tooltip_background_color, B_TOOL_TIP_BACKGROUND_COLOR), 62 I(tooltip_text_color, B_TOOL_TIP_TEXT_COLOR), 63 I(success_color, B_SUCCESS_COLOR), 64 I(failure_color, B_FAILURE_COLOR), 65 I(keyboard_navigation_color, B_KEYBOARD_NAVIGATION_COLOR), 66 I(menu_selection_background_color, B_MENU_SELECTION_BACKGROUND_COLOR), 67 I(desktop_color, B_DESKTOP_COLOR), 68 I(window_tab_color, B_WINDOW_TAB_COLOR), 69 I(window_text_color, B_WINDOW_TEXT_COLOR), 70 I(window_inactive_tab_color, B_WINDOW_INACTIVE_TAB_COLOR), 71 I(window_inactive_text_color, B_WINDOW_INACTIVE_TEXT_COLOR), 72 I(window_border_color, B_WINDOW_BORDER_COLOR), 73 I(window_inactive_border_color, B_WINDOW_INACTIVE_BORDER_COLOR), 74 {"sum", required_argument, 0, 's'}, 75 {"refresh", no_argument, 0, 'r'}, 76 {"help", no_argument, 0, 'h'}, 77 {NULL} 78 }; 79 80 81 extern const char *__progname; 82 static const char *sProgramName = __progname; 83 84 85 void 86 usage(void) 87 { 88 printf("%s [-sum md5sum] [colID colspec] [-refresh]\n", sProgramName); 89 printf("Tweak the default window decorator colors.\n"); 90 printf("\t-sum deprecated option, kept for compatibility\n"); 91 printf("\t-refresh refresh the entire display (force update)\n"); 92 printf("\tcolID can be:\n"); 93 printf("\t-activetab\n"); 94 printf("\t-frame\n"); 95 printf("\t-activeborder\n"); 96 printf("\t-inactiveborder\n"); 97 printf("\t-activetitle\n"); 98 printf("\t-inactivetitle\n"); 99 printf("\tcolspec is a 6 digit hexadecimal color number. \n" 100 "\t\t\t(rrggbb, html format)\n"); 101 } 102 103 104 static int 105 UpdateUIColor(color_which which, const char *str) 106 { 107 rgb_color color; 108 unsigned int r, g, b; 109 if (which < 0) 110 return -1; 111 // parse 112 if (!str || !str[0]) 113 return -1; 114 if (str[0] == '#') 115 str++; 116 if (sscanf(str, "%02x%02x%02x", &r, &g, &b) < 3) 117 return -1; 118 color.red = r; 119 color.green = g; 120 color.blue = b; 121 color.alpha = 255; 122 //printf("setting %d to {%d, %d, %d, %d}\n", which, r, g, b, 255); 123 set_ui_color(which, color); 124 return B_OK; 125 } 126 127 int 128 main(int argc, char **argv) 129 { 130 BApplication app("application/x-vnd.Haiku-WindowShade"); 131 int c; 132 133 // parse command line parameters 134 135 while ((c = getopt_long_only(argc, argv, "h", kLongOptions, NULL)) != -1) { 136 switch (c) { 137 case 0: 138 UpdateUIColor((color_which)sColorWhich, optarg); 139 break; 140 case 'h': 141 usage(); 142 return 0; 143 default: 144 usage(); 145 return 1; 146 147 case 'r': 148 { 149 // TODO: refresh (but shouldn't be needed) 150 BString name; 151 if (get_decorator(name)) 152 set_decorator(name); 153 break; 154 } 155 156 case 's': 157 // IGNORED, for compatibility with original app 158 break; 159 } 160 sColorWhich = -1; 161 } 162 163 return 0; 164 } 165