Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium 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 "chrome/browser/gtk/location_bar_view_gtk.h" | 5 #include "chrome/browser/gtk/location_bar_view_gtk.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "app/gfx/canvas_paint.h" | 9 #include "app/gfx/canvas_paint.h" |
| 10 #include "app/gfx/gtk_util.h" | 10 #include "app/gfx/gtk_util.h" |
| 11 #include "app/l10n_util.h" | 11 #include "app/l10n_util.h" |
| 12 #include "app/resource_bundle.h" | 12 #include "app/resource_bundle.h" |
| 13 #include "base/basictypes.h" | 13 #include "base/basictypes.h" |
| 14 #include "base/logging.h" | 14 #include "base/logging.h" |
| 15 #include "base/string_util.h" | 15 #include "base/string_util.h" |
| 16 #include "chrome/app/chrome_dll_resource.h" | 16 #include "chrome/app/chrome_dll_resource.h" |
| 17 #include "chrome/browser/alternate_nav_url_fetcher.h" | 17 #include "chrome/browser/alternate_nav_url_fetcher.h" |
| 18 #include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h" | 18 #include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h" |
| 19 #include "chrome/browser/browser.h" | 19 #include "chrome/browser/browser.h" |
| 20 #include "chrome/browser/browser_list.h" | 20 #include "chrome/browser/browser_list.h" |
| 21 #include "chrome/browser/command_updater.h" | 21 #include "chrome/browser/command_updater.h" |
| 22 #include "chrome/browser/extensions/extension_browser_event_router.h" | 22 #include "chrome/browser/extensions/extension_browser_event_router.h" |
| 23 #include "chrome/browser/extensions/extension_tabs_module.h" | 23 #include "chrome/browser/extensions/extension_tabs_module.h" |
| 24 #include "chrome/browser/gtk/cairo_cached_surface.h" | |
| 24 #include "chrome/browser/gtk/first_run_bubble.h" | 25 #include "chrome/browser/gtk/first_run_bubble.h" |
| 25 #include "chrome/browser/gtk/gtk_theme_provider.h" | 26 #include "chrome/browser/gtk/gtk_theme_provider.h" |
| 26 #include "chrome/browser/gtk/rounded_window.h" | 27 #include "chrome/browser/gtk/rounded_window.h" |
| 27 #include "chrome/browser/profile.h" | 28 #include "chrome/browser/profile.h" |
| 28 #include "chrome/browser/search_engines/template_url.h" | 29 #include "chrome/browser/search_engines/template_url.h" |
| 29 #include "chrome/browser/search_engines/template_url_model.h" | 30 #include "chrome/browser/search_engines/template_url_model.h" |
| 30 #include "chrome/browser/tab_contents/tab_contents.h" | 31 #include "chrome/browser/tab_contents/tab_contents.h" |
| 31 #include "chrome/common/gtk_util.h" | 32 #include "chrome/common/gtk_util.h" |
| 32 #include "chrome/common/notification_service.h" | 33 #include "chrome/common/notification_service.h" |
| 33 #include "chrome/common/page_transition_types.h" | 34 #include "chrome/common/page_transition_types.h" |
| (...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 488 gtk_util::SetLabelColor(tab_to_search_label_, &gfx::kGdkBlack); | 489 gtk_util::SetLabelColor(tab_to_search_label_, &gfx::kGdkBlack); |
| 489 gtk_util::SetLabelColor(tab_to_search_hint_leading_label_, | 490 gtk_util::SetLabelColor(tab_to_search_hint_leading_label_, |
| 490 &gfx::kGdkBlack); | 491 &gfx::kGdkBlack); |
| 491 gtk_util::SetLabelColor(tab_to_search_hint_trailing_label_, | 492 gtk_util::SetLabelColor(tab_to_search_hint_trailing_label_, |
| 492 &gfx::kGdkBlack); | 493 &gfx::kGdkBlack); |
| 493 } | 494 } |
| 494 } | 495 } |
| 495 | 496 |
| 496 gboolean LocationBarViewGtk::HandleExpose(GtkWidget* widget, | 497 gboolean LocationBarViewGtk::HandleExpose(GtkWidget* widget, |
| 497 GdkEventExpose* event) { | 498 GdkEventExpose* event) { |
| 498 GdkDrawable* drawable = GDK_DRAWABLE(event->window); | |
| 499 GdkRectangle* alloc_rect = &hbox_->allocation; | 499 GdkRectangle* alloc_rect = &hbox_->allocation; |
| 500 | 500 |
| 501 // The area outside of our margin, which includes the border. | |
| 502 GdkRectangle inner_rect = { | |
| 503 alloc_rect->x, | |
| 504 alloc_rect->y + kTopMargin, | |
| 505 alloc_rect->width, | |
| 506 alloc_rect->height - kTopMargin - kBottomMargin}; | |
| 507 | |
| 508 // If we're not using GTK theming, draw our own border over the edge pixels | 501 // If we're not using GTK theming, draw our own border over the edge pixels |
| 509 // of the background. | 502 // of the background. |
| 510 if (!profile_ || | 503 if (!profile_ || |
| 511 !GtkThemeProvider::GetFrom(profile_)->UseGtkTheme()) { | 504 !GtkThemeProvider::GetFrom(profile_)->UseGtkTheme()) { |
| 512 GdkGC* gc = gdk_gc_new(drawable); | 505 cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(event->window)); |
| 506 cairo_rectangle(cr, event->area.x, event->area.y, event->area.width, | |
|
Evan Stade
2009/10/30 23:24:52
can use gdk_cairo_rectangle(cr, &event->area)
| |
| 507 event->area.height); | |
| 508 cairo_clip(cr); | |
| 509 CairoCachedSurface* background = theme_provider_->GetSurfaceNamed( | |
| 510 popup_window_mode_ ? IDR_LOCATIONBG_POPUPMODE_CENTER : IDR_LOCATIONBG, | |
| 511 widget); | |
| 513 | 512 |
| 514 // Some of our calculations are a bit sloppy. Since we draw on our parent | 513 // We paint the source to the "outer" rect, which is the size of the hbox's |
| 515 // window, set a clip to make sure that we don't draw outside. | 514 // allocation. This image blends with whatever is behind it as the top and |
| 516 gdk_gc_set_clip_rectangle(gc, &inner_rect); | 515 // bottom fade out. |
| 516 background->SetSource(cr, alloc_rect->x, alloc_rect->y); | |
| 517 cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT); | |
| 518 cairo_rectangle(cr, alloc_rect->x, alloc_rect->y, | |
| 519 alloc_rect->width, alloc_rect->height); | |
| 520 cairo_fill(cr); | |
| 517 | 521 |
| 518 // Draw the background. | 522 // But on top of that, we also need to draw the "inner" rect, which is all |
| 519 gdk_gc_set_rgb_fg_color(gc, | 523 // the color that the background should be. |
| 520 &kBackgroundColorByLevel[toolbar_model_->GetSchemeSecurityLevel()]); | 524 cairo_rectangle(cr, alloc_rect->x, |
| 521 gdk_draw_rectangle(drawable, gc, TRUE, | 525 alloc_rect->y + kTopMargin + kBorderThickness, |
| 522 inner_rect.x, | 526 alloc_rect->width, |
| 523 inner_rect.y, | 527 alloc_rect->height - kTopMargin - |
| 524 inner_rect.width, | 528 kBottomMargin - 2 * kBorderThickness); |
| 525 inner_rect.height); | 529 gdk_cairo_set_source_color(cr, const_cast<GdkColor*>( |
| 530 &kBackgroundColorByLevel[toolbar_model_->GetSchemeSecurityLevel()])); | |
| 531 cairo_fill(cr); | |
| 526 | 532 |
| 527 // Draw our 1px border. TODO(deanm): Maybe this would be cleaner as an | 533 cairo_destroy(cr); |
| 528 // overdrawn stroked rect with a clip to the allocation? | |
| 529 gdk_gc_set_rgb_fg_color(gc, &kBorderColor); | |
| 530 gdk_draw_rectangle(drawable, gc, TRUE, | |
| 531 inner_rect.x, | |
| 532 inner_rect.y, | |
| 533 inner_rect.width, | |
| 534 kBorderThickness); | |
| 535 gdk_draw_rectangle(drawable, gc, TRUE, | |
| 536 inner_rect.x, | |
| 537 inner_rect.y + inner_rect.height - kBorderThickness, | |
| 538 inner_rect.width, | |
| 539 kBorderThickness); | |
| 540 if (popup_window_mode_) { | |
| 541 gdk_draw_rectangle(drawable, gc, TRUE, | |
| 542 inner_rect.x, | |
| 543 inner_rect.y, | |
| 544 kBorderThickness, | |
| 545 inner_rect.height); | |
| 546 gdk_draw_rectangle(drawable, gc, TRUE, | |
| 547 inner_rect.x + inner_rect.width - kBorderThickness, | |
| 548 inner_rect.y, | |
| 549 kBorderThickness, | |
| 550 inner_rect.height); | |
| 551 } | |
| 552 | |
| 553 g_object_unref(gc); | |
| 554 } | 534 } |
| 555 | 535 |
| 556 return FALSE; // Continue propagating the expose. | 536 return FALSE; // Continue propagating the expose. |
| 557 } | 537 } |
| 558 | 538 |
| 559 void LocationBarViewGtk::SetSecurityIcon(ToolbarModel::Icon icon) { | 539 void LocationBarViewGtk::SetSecurityIcon(ToolbarModel::Icon icon) { |
| 560 gtk_widget_hide(GTK_WIDGET(security_lock_icon_image_)); | 540 gtk_widget_hide(GTK_WIDGET(security_lock_icon_image_)); |
| 561 gtk_widget_hide(GTK_WIDGET(security_warning_icon_image_)); | 541 gtk_widget_hide(GTK_WIDGET(security_warning_icon_image_)); |
| 562 if (icon != ToolbarModel::NO_ICON) | 542 if (icon != ToolbarModel::NO_ICON) |
| 563 gtk_widget_show(GTK_WIDGET(security_icon_event_box_)); | 543 gtk_widget_show(GTK_WIDGET(security_icon_event_box_)); |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 857 | 837 |
| 858 std::string badge_text = view->page_action_->GetBadgeText(tab_id); | 838 std::string badge_text = view->page_action_->GetBadgeText(tab_id); |
| 859 if (badge_text.empty()) | 839 if (badge_text.empty()) |
| 860 return FALSE; | 840 return FALSE; |
| 861 | 841 |
| 862 gfx::CanvasPaint canvas(event, false); | 842 gfx::CanvasPaint canvas(event, false); |
| 863 gfx::Rect bounding_rect(widget->allocation); | 843 gfx::Rect bounding_rect(widget->allocation); |
| 864 view->page_action_->PaintBadge(&canvas, bounding_rect, tab_id); | 844 view->page_action_->PaintBadge(&canvas, bounding_rect, tab_id); |
| 865 return FALSE; | 845 return FALSE; |
| 866 } | 846 } |
| OLD | NEW |