diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-25 21:25:18 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-25 21:25:18 +0000 |
commit | 925a4a4d56f43b1543fc82470ba74220aa28923d (patch) | |
tree | 5846b79498668192ce5eb5059d9b525e886d2868 /chrome/browser/gtk/bookmark_bar_gtk.cc | |
parent | 218236acdb72ed3fa11dee29ae2ca3341dc0d6c2 (diff) | |
download | chromium_src-925a4a4d56f43b1543fc82470ba74220aa28923d.zip chromium_src-925a4a4d56f43b1543fc82470ba74220aa28923d.tar.gz chromium_src-925a4a4d56f43b1543fc82470ba74220aa28923d.tar.bz2 |
gtk: port ButtonSeparatorView
BUG=13142
Review URL: http://codereview.chromium.org/173334
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24327 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/bookmark_bar_gtk.cc')
-rw-r--r-- | chrome/browser/gtk/bookmark_bar_gtk.cc | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/chrome/browser/gtk/bookmark_bar_gtk.cc b/chrome/browser/gtk/bookmark_bar_gtk.cc index a739131..373ce0f 100644 --- a/chrome/browser/gtk/bookmark_bar_gtk.cc +++ b/chrome/browser/gtk/bookmark_bar_gtk.cc @@ -48,6 +48,13 @@ const int kInstructionsPadding = 6; // Color of the instructional text. const GdkColor kInstructionsColor = GDK_COLOR_RGB(128, 128, 142); +// Middle color of the separator gradient. +const double kSeparatorColor[] = + { 194.0 / 255.0, 205.0 / 255.0, 212.0 / 212.0 }; +// Top color of the separator gradient. +const double kTopBorderColor[] = + { 222.0 / 255.0, 234.0 / 255.0, 248.0 / 255.0 }; + // The targets accepted by the toolbar and folder buttons for DnD. const int kDestTargetList[] = { GtkDndUtil::CHROME_BOOKMARK_ITEM, GtkDndUtil::CHROME_NAMED_URL, @@ -188,8 +195,11 @@ void BookmarkBarGtk::Init(Profile* profile) { g_signal_connect(bookmark_toolbar_.get(), "drag-data-received", G_CALLBACK(&OnDragReceived), this); - gtk_box_pack_start(GTK_BOX(bookmark_hbox_), gtk_vseparator_new(), + GtkWidget* vseparator = gtk_vseparator_new(); + gtk_box_pack_start(GTK_BOX(bookmark_hbox_), vseparator, FALSE, FALSE, 0); + g_signal_connect(vseparator, "expose-event", + G_CALLBACK(OnSeparatorExpose), this); // We pack the button manually (rather than using gtk_button_set_*) so that // we can have finer control over its label. @@ -828,3 +838,51 @@ gboolean BookmarkBarGtk::OnHBoxExpose(GtkWidget* widget, return FALSE; // Propagate expose to children. } + +// static +gboolean BookmarkBarGtk::OnSeparatorExpose(GtkWidget* widget, + GdkEventExpose* event, + BookmarkBarGtk* bar) { + if (bar->theme_provider_->UseGtkTheme()) + return FALSE; + + cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(widget->window)); + cairo_rectangle(cr, event->area.x, event->area.y, + event->area.width, event->area.height); + cairo_clip(cr); + + GdkColor bottom_color = + bar->theme_provider_->GetGdkColor(BrowserThemeProvider::COLOR_TOOLBAR); + double bottom_color_rgb[] = { + static_cast<double>(bottom_color.red / 257) / 255.0, + static_cast<double>(bottom_color.green / 257) / 255.0, + static_cast<double>(bottom_color.blue / 257) / 255.0, }; + + cairo_pattern_t* pattern = + cairo_pattern_create_linear(widget->allocation.x, widget->allocation.y, + widget->allocation.x, + widget->allocation.y + + widget->allocation.height); + cairo_pattern_add_color_stop_rgb( + pattern, 0.0, + kTopBorderColor[0], kTopBorderColor[1], kTopBorderColor[2]); + cairo_pattern_add_color_stop_rgb( + pattern, 0.5, + kSeparatorColor[0], kSeparatorColor[1], kSeparatorColor[2]); + cairo_pattern_add_color_stop_rgb( + pattern, 1.0, + bottom_color_rgb[0], bottom_color_rgb[1], bottom_color_rgb[2]); + cairo_set_source(cr, pattern); + + double start_x = 0.5 + widget->allocation.x; + cairo_new_path(cr); + cairo_set_line_width(cr, 1.0); + cairo_move_to(cr, start_x, widget->allocation.y); + cairo_line_to(cr, start_x, + widget->allocation.y + widget->allocation.height); + cairo_stroke(cr); + cairo_destroy(cr); + cairo_pattern_destroy(pattern); + + return TRUE; +} |