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