OLD | NEW |
1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <algorithm> | 5 #include <algorithm> |
6 #include <cairo.h> | 6 #include <cairo.h> |
7 #include <math.h> | 7 #include <math.h> |
8 #include <gmodule.h> | 8 #include <gmodule.h> |
9 #include <gtk/gtk.h> | 9 #include <gtk/gtk.h> |
10 #include <string.h> | 10 #include <string.h> |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 static_cast<double>(0x0) / 255.0; | 102 static_cast<double>(0x0) / 255.0; |
103 static const double INDICATOR_STROKE_PRESSED_G = | 103 static const double INDICATOR_STROKE_PRESSED_G = |
104 static_cast<double>(0x0) / 255.0; | 104 static_cast<double>(0x0) / 255.0; |
105 static const double INDICATOR_STROKE_PRESSED_B = | 105 static const double INDICATOR_STROKE_PRESSED_B = |
106 static_cast<double>(0x0) / 255.0; | 106 static_cast<double>(0x0) / 255.0; |
107 | 107 |
108 static const double INDICATOR_STROKE_R = 0; | 108 static const double INDICATOR_STROKE_R = 0; |
109 static const double INDICATOR_STROKE_G = 0; | 109 static const double INDICATOR_STROKE_G = 0; |
110 static const double INDICATOR_STROKE_B = 0; | 110 static const double INDICATOR_STROKE_B = 0; |
111 | 111 |
| 112 static const double MENU_BG_R = 1; |
| 113 static const double MENU_BG_G = 1; |
| 114 static const double MENU_BG_B = 1; |
| 115 |
112 static const double MENU_BG_HIGHLIGHT_R = SELECTED_TEXT_BG_R; | 116 static const double MENU_BG_HIGHLIGHT_R = SELECTED_TEXT_BG_R; |
113 static const double MENU_BG_HIGHLIGHT_G = SELECTED_TEXT_BG_G; | 117 static const double MENU_BG_HIGHLIGHT_G = SELECTED_TEXT_BG_G; |
114 static const double MENU_BG_HIGHLIGHT_B = SELECTED_TEXT_BG_B; | 118 static const double MENU_BG_HIGHLIGHT_B = SELECTED_TEXT_BG_B; |
115 | 119 |
116 static const double MENU_BORDER_R = static_cast<double>(0x55) / 255.0; | 120 static const double MENU_GRADIENT_R0 = 1; |
117 static const double MENU_BORDER_G = static_cast<double>(0x55) / 255.0; | 121 static const double MENU_GRADIENT_G0 = 1; |
118 static const double MENU_BORDER_B = static_cast<double>(0x55) / 255.0; | 122 static const double MENU_GRADIENT_B0 = 1; |
| 123 static const double MENU_GRADIENT_R1 = static_cast<double>(0xF0) / 255.0; |
| 124 static const double MENU_GRADIENT_G1 = static_cast<double>(0xF0) / 255.0; |
| 125 static const double MENU_GRADIENT_B1 = static_cast<double>(0xF0) / 255.0; |
119 | 126 |
120 // Ideal arrow size for menus. | 127 // Ideal arrow size for menus. |
121 static const int MENU_IDEAL_ARROW_SIZE = 5; | 128 static const int MENU_IDEAL_ARROW_SIZE = 5; |
122 | 129 |
123 // Ideal size of the inner circle for selected radio buttons. | 130 // Ideal size of the inner circle for selected radio buttons. |
124 static const int MENU_RADIO_BUTTON_INDICATOR_IDEAL_SIZE = 5; | 131 static const int MENU_RADIO_BUTTON_INDICATOR_IDEAL_SIZE = 5; |
125 | 132 |
126 // Ideal size of the inner circle for selected radio buttons. | 133 // Ideal size of the inner circle for selected radio buttons. |
127 static const int RADIO_BUTTON_INDICATOR_IDEAL_SIZE = 7; | 134 static const int RADIO_BUTTON_INDICATOR_IDEAL_SIZE = 7; |
128 | 135 |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 static const double TOOLTIP_SHADOW_G = 0; | 243 static const double TOOLTIP_SHADOW_G = 0; |
237 static const double TOOLTIP_SHADOW_B = 0; | 244 static const double TOOLTIP_SHADOW_B = 0; |
238 | 245 |
239 // Alpha for shadow pixels, from outer-most to inner-most. | 246 // Alpha for shadow pixels, from outer-most to inner-most. |
240 static const double TOOLTIP_SHADOW_ALPHAS[] = { 0.1, 0.2 }; | 247 static const double TOOLTIP_SHADOW_ALPHAS[] = { 0.1, 0.2 }; |
241 | 248 |
242 // Outermost shadow corner radius is 10 pixel tooltip border corner radius | 249 // Outermost shadow corner radius is 10 pixel tooltip border corner radius |
243 // plus TOOLTIP_SHADOW_DEPTH. | 250 // plus TOOLTIP_SHADOW_DEPTH. |
244 static const int TOOLTIP_CORNER_RADIUS = 10 + TOOLTIP_SHADOW_DEPTH; | 251 static const int TOOLTIP_CORNER_RADIUS = 10 + TOOLTIP_SHADOW_DEPTH; |
245 | 252 |
| 253 // Widget name of GtkCombBox popup menu. |
| 254 static const char* kGtkComboBoxPopupMenu = "gtk-combobox-popup-menu"; |
| 255 |
246 // Widget name of ChromeOS options tab. | 256 // Widget name of ChromeOS options tab. |
247 static const char* kChromeOsOptionsTabName = "chromeos-options-tab"; | 257 static const char* kChromeOsOptionsTabName = "chromeos-options-tab"; |
248 | 258 |
249 // Check whether given widget's name is the same as name_to_check. | 259 // Check whether given widget's name is the same as name_to_check. |
250 static bool WidgetHasName(GtkWidget* widget, const char* name_to_check) { | 260 static bool WidgetHasName(GtkWidget* widget, const char* name_to_check) { |
251 const char* widget_name = gtk_widget_get_name(widget); | 261 const char* widget_name = gtk_widget_get_name(widget); |
252 return widget_name && !strcmp(widget_name, name_to_check); | 262 return widget_name && !strcmp(widget_name, name_to_check); |
253 } | 263 } |
254 | 264 |
255 // Check whether given widget uses RGBA visuals. | 265 // Check whether given widget uses RGBA visuals. |
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
740 GtkWidget* widget, | 750 GtkWidget* widget, |
741 gint x, | 751 gint x, |
742 gint y, | 752 gint y, |
743 gint w, | 753 gint w, |
744 gint h) { | 754 gint h) { |
745 ScopedSurface cr(window, area); | 755 ScopedSurface cr(window, area); |
746 | 756 |
747 cairo_rectangle(cr.get(), x, y, w, h); | 757 cairo_rectangle(cr.get(), x, y, w, h); |
748 | 758 |
749 ScopedPattern pattern; | 759 ScopedPattern pattern; |
750 AddRoundRectGradient(cr.get(), &pattern, h, false); | 760 if (WidgetHasName(widget, kGtkComboBoxPopupMenu)) { |
751 cairo_fill_preserve(cr.get()); | 761 cairo_set_source_rgb(cr.get(), MENU_BG_R, MENU_BG_G, MENU_BG_B); |
752 | 762 } else { |
753 cairo_set_source_rgb(cr.get(), MENU_BORDER_R, MENU_BORDER_G, MENU_BORDER_B); | 763 pattern.reset(cairo_pattern_create_linear(0, 0, 0, h)); |
754 DrawSinglePixelWideRectangle(cr.get(), x, y, w, h); | 764 cairo_pattern_add_color_stop_rgb(pattern.get(), 0, MENU_GRADIENT_R0, |
| 765 MENU_GRADIENT_G0, MENU_GRADIENT_B0); |
| 766 cairo_pattern_add_color_stop_rgb(pattern.get(), 1, MENU_GRADIENT_R1, |
| 767 MENU_GRADIENT_G1, MENU_GRADIENT_B1); |
| 768 cairo_set_source(cr.get(), pattern.get()); |
| 769 } |
| 770 cairo_fill(cr.get()); |
755 } | 771 } |
756 | 772 |
757 static void DrawMenuHorizontalSeparator(GtkStyle* style, | 773 static void DrawMenuHorizontalSeparator(GtkStyle* style, |
758 GdkWindow* window, | 774 GdkWindow* window, |
759 GtkStateType state_type, | 775 GtkStateType state_type, |
760 GdkRectangle* area, | 776 GdkRectangle* area, |
761 GtkWidget* widget, | 777 GtkWidget* widget, |
762 gint x1, | 778 gint x1, |
763 gint x2, | 779 gint x2, |
764 gint y) { | 780 gint y) { |
(...skipping 745 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1510 GtkStateType state_type, | 1526 GtkStateType state_type, |
1511 GdkRectangle* area, | 1527 GdkRectangle* area, |
1512 GtkWidget* widget, | 1528 GtkWidget* widget, |
1513 const gchar* detail, | 1529 const gchar* detail, |
1514 gint y1, | 1530 gint y1, |
1515 gint y2, | 1531 gint y2, |
1516 gint x) { | 1532 gint x) { |
1517 // We currently don't have any vertical separators. If we do need them, be | 1533 // We currently don't have any vertical separators. If we do need them, be |
1518 // sure and special case so that we don't draw the separator for comboboxs: | 1534 // sure and special case so that we don't draw the separator for comboboxs: |
1519 } | 1535 } |
OLD | NEW |