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/browser_window_gtk.h" | 5 #include "chrome/browser/gtk/browser_window_gtk.h" |
| 6 | 6 |
| 7 #include <gdk/gdkkeysyms.h> | 7 #include <gdk/gdkkeysyms.h> |
| 8 #include <X11/XF86keysym.h> | 8 #include <X11/XF86keysym.h> |
| 9 | 9 |
| 10 #include <string> | 10 #include <string> |
| (...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 479 GdkModifierType modifier) { | 479 GdkModifierType modifier) { |
| 480 if (!HandleCustomAccelerator(keyval, modifier, browser_.get())) { | 480 if (!HandleCustomAccelerator(keyval, modifier, browser_.get())) { |
| 481 // Pass the accelerator on to GTK. | 481 // Pass the accelerator on to GTK. |
| 482 gtk_accel_groups_activate(G_OBJECT(window_), keyval, modifier); | 482 gtk_accel_groups_activate(G_OBJECT(window_), keyval, modifier); |
| 483 } | 483 } |
| 484 } | 484 } |
| 485 | 485 |
| 486 gboolean BrowserWindowGtk::OnCustomFrameExpose(GtkWidget* widget, | 486 gboolean BrowserWindowGtk::OnCustomFrameExpose(GtkWidget* widget, |
| 487 GdkEventExpose* event, | 487 GdkEventExpose* event, |
| 488 BrowserWindowGtk* window) { | 488 BrowserWindowGtk* window) { |
| 489 static NineBox* default_background = NULL; | |
| 490 static NineBox* default_background_inactive = NULL; | |
| 491 static NineBox* default_background_otr = NULL; | |
| 492 static NineBox* default_background_otr_inactive = NULL; | |
| 493 | |
| 494 ThemeProvider* theme_provider = | 489 ThemeProvider* theme_provider = |
| 495 window->browser()->profile()->GetThemeProvider(); | 490 window->browser()->profile()->GetThemeProvider(); |
| 496 if (!default_background) { | |
| 497 default_background = new NineBox(theme_provider, | |
| 498 0, IDR_THEME_FRAME, 0, 0, 0, 0, 0, 0, 0); | |
| 499 default_background_inactive = new NineBox(theme_provider, | |
| 500 0, IDR_THEME_FRAME_INACTIVE, 0, 0, 0, 0, 0, 0, 0); | |
| 501 default_background_otr = new NineBox(theme_provider, | |
| 502 0, IDR_THEME_FRAME_INCOGNITO, 0, 0, 0, 0, 0, 0, 0); | |
| 503 default_background_otr_inactive = new NineBox(theme_provider, | |
| 504 0, IDR_THEME_FRAME_INCOGNITO_INACTIVE, 0, 0, 0, 0, 0, 0, 0); | |
| 505 } | |
| 506 | 491 |
| 507 // Draw the default background. | 492 // Draw the default background. |
| 508 cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(widget->window)); | 493 cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(widget->window)); |
| 509 cairo_rectangle(cr, event->area.x, event->area.y, event->area.width, | 494 cairo_rectangle(cr, event->area.x, event->area.y, event->area.width, |
| 510 event->area.height); | 495 event->area.height); |
| 511 cairo_clip(cr); | 496 cairo_clip(cr); |
| 512 NineBox* image = NULL; | 497 |
| 498 int image_name; | |
| 513 if (window->IsActive()) { | 499 if (window->IsActive()) { |
| 514 image = window->browser()->profile()->IsOffTheRecord() | 500 image_name = window->browser()->profile()->IsOffTheRecord() ? |
| 515 ? default_background_otr : default_background; | 501 IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME; |
| 516 } else { | 502 } else { |
| 517 image = window->browser()->profile()->IsOffTheRecord() | 503 image_name = window->browser()->profile()->IsOffTheRecord() ? |
| 518 ? default_background_otr_inactive : default_background_inactive; | 504 IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; |
| 519 } | 505 } |
| 520 image->RenderTopCenterStrip(cr, 0, 0, widget->allocation.width); | 506 GdkPixbuf* pixbuf = theme_provider->GetPixbufNamed(image_name); |
| 507 gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0); | |
| 508 cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT); | |
| 509 cairo_rectangle(cr, event->area.x, event->area.y, | |
| 510 event->area.width, event->area.height); | |
| 511 cairo_fill(cr); | |
| 521 | 512 |
| 522 if (theme_provider->HasCustomImage(IDR_THEME_FRAME_OVERLAY)) { | 513 if (theme_provider->HasCustomImage(IDR_THEME_FRAME_OVERLAY)) { |
| 523 GdkPixbuf* theme_overlay = theme_provider->GetPixbufNamed( | 514 GdkPixbuf* theme_overlay = theme_provider->GetPixbufNamed( |
| 524 window->IsActive() ? IDR_THEME_FRAME_OVERLAY | 515 window->IsActive() ? IDR_THEME_FRAME_OVERLAY |
| 525 : IDR_THEME_FRAME_OVERLAY_INACTIVE); | 516 : IDR_THEME_FRAME_OVERLAY_INACTIVE); |
| 526 gdk_cairo_set_source_pixbuf(cr, theme_overlay, 0, 0); | 517 gdk_cairo_set_source_pixbuf(cr, theme_overlay, 0, 0); |
| 527 cairo_paint(cr); | 518 cairo_paint(cr); |
| 528 } | 519 } |
| 529 | 520 |
| 530 DrawContentShadow(cr, window); | 521 DrawContentShadow(cr, window); |
| 531 | 522 |
| 532 cairo_destroy(cr); | 523 cairo_destroy(cr); |
| 533 | 524 |
| 534 if (window->use_custom_frame_.GetValue() && !window->IsMaximized()) { | 525 if (window->use_custom_frame_.GetValue() && !window->IsMaximized()) { |
| 535 static NineBox custom_frame_border( | 526 static NineBox custom_frame_border( |
| 536 theme_provider, | 527 IDR_WINDOW_TOP_LEFT_CORNER, |
| 537 IDR_WINDOW_TOP_LEFT_CORNER, | 528 IDR_WINDOW_TOP_CENTER, |
| 538 IDR_WINDOW_TOP_CENTER, | 529 IDR_WINDOW_TOP_RIGHT_CORNER, |
| 539 IDR_WINDOW_TOP_RIGHT_CORNER, | 530 IDR_WINDOW_LEFT_SIDE, |
| 540 IDR_WINDOW_LEFT_SIDE, | 531 NULL, |
| 541 NULL, | 532 IDR_WINDOW_RIGHT_SIDE, |
| 542 IDR_WINDOW_RIGHT_SIDE, | 533 IDR_WINDOW_BOTTOM_LEFT_CORNER, |
| 543 IDR_WINDOW_BOTTOM_LEFT_CORNER, | 534 IDR_WINDOW_BOTTOM_CENTER, |
| 544 IDR_WINDOW_BOTTOM_CENTER, | 535 IDR_WINDOW_BOTTOM_RIGHT_CORNER); |
| 545 IDR_WINDOW_BOTTOM_RIGHT_CORNER); | |
| 546 | 536 |
| 547 custom_frame_border.RenderToWidget(widget); | 537 custom_frame_border.RenderToWidget(widget); |
| 548 } | 538 } |
| 549 | 539 |
| 550 return FALSE; // Allow subwidgets to paint. | 540 return FALSE; // Allow subwidgets to paint. |
| 551 } | 541 } |
| 552 | 542 |
| 553 // static | 543 // static |
| 554 void BrowserWindowGtk::DrawContentShadow(cairo_t* cr, | 544 void BrowserWindowGtk::DrawContentShadow(cairo_t* cr, |
| 555 BrowserWindowGtk* window) { | 545 BrowserWindowGtk* window) { |
| 556 // Draw the shadow above the toolbar. Tabs on the tabstrip will draw over us. | 546 // Draw the shadow above the toolbar. Tabs on the tabstrip will draw over us. |
| 557 ThemeProvider* theme_provider = | 547 ThemeProvider* theme_provider = |
| 558 window->browser()->profile()->GetThemeProvider(); | 548 window->browser()->profile()->GetThemeProvider(); |
| 559 static NineBox top_shadow(theme_provider, | |
| 560 0, IDR_CONTENT_TOP_CENTER, 0, 0, 0, 0, 0, 0, 0); | |
| 561 int left_x, top_y; | 549 int left_x, top_y; |
| 562 gtk_widget_translate_coordinates(window->content_vbox_, | 550 gtk_widget_translate_coordinates(window->content_vbox_, |
| 563 GTK_WIDGET(window->window_), 0, 0, &left_x, | 551 GTK_WIDGET(window->window_), 0, 0, &left_x, |
| 564 &top_y); | 552 &top_y); |
| 565 int width = window->content_vbox_->allocation.width; | 553 int width = window->content_vbox_->allocation.width; |
| 566 top_shadow.RenderTopCenterStrip(cr, | 554 |
| 567 left_x, top_y - kContentShadowThickness, width); | 555 GdkPixbuf* top_center = theme_provider->GetPixbufNamed(IDR_CONTENT_TOP_CENTER) ; |
|
tony
2009/08/19 17:47:26
Nit: 80 cols.
| |
| 556 gdk_cairo_set_source_pixbuf(cr, top_center, | |
| 557 left_x, top_y - kContentShadowThickness); | |
| 558 cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT); | |
| 559 cairo_rectangle(cr, left_x, top_y - kContentShadowThickness, width, | |
| 560 gdk_pixbuf_get_height(top_center)); | |
| 561 cairo_fill(cr); | |
| 568 | 562 |
| 569 // Only draw the rest of the shadow if the user has the custom frame enabled. | 563 // Only draw the rest of the shadow if the user has the custom frame enabled. |
| 570 if (!window->use_custom_frame_.GetValue()) | 564 if (!window->use_custom_frame_.GetValue()) |
| 571 return; | 565 return; |
| 572 | 566 |
| 573 // The top left corner has a width of 3 pixels. On Windows, the last column | 567 // The top left corner has a width of 3 pixels. On Windows, the last column |
| 574 // of pixels overlap the toolbar. We just crop it off on Linux. The top | 568 // of pixels overlap the toolbar. We just crop it off on Linux. The top |
| 575 // corners extend to the base of the toolbar (one pixel above the dividing | 569 // corners extend to the base of the toolbar (one pixel above the dividing |
| 576 // line). | 570 // line). |
| 577 int right_x = left_x + width; | 571 int right_x = left_x + width; |
| (...skipping 1399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1977 // are taken from the WMs' source code. | 1971 // are taken from the WMs' source code. |
| 1978 return (wm_name == "Blackbox" || | 1972 return (wm_name == "Blackbox" || |
| 1979 wm_name == "compiz" || | 1973 wm_name == "compiz" || |
| 1980 wm_name == "e16" || // Enlightenment DR16 | 1974 wm_name == "e16" || // Enlightenment DR16 |
| 1981 wm_name == "Fluxbox" || | 1975 wm_name == "Fluxbox" || |
| 1982 wm_name == "KWin" || | 1976 wm_name == "KWin" || |
| 1983 wm_name == "Metacity" || | 1977 wm_name == "Metacity" || |
| 1984 wm_name == "Openbox" || | 1978 wm_name == "Openbox" || |
| 1985 wm_name == "Xfwm4"); | 1979 wm_name == "Xfwm4"); |
| 1986 } | 1980 } |
| OLD | NEW |