| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/ui/gtk/browser_window_gtk.h" | 5 #include "chrome/browser/ui/gtk/browser_window_gtk.h" |
| 6 | 6 |
| 7 #include <gdk/gdkkeysyms.h> | 7 #include <gdk/gdkkeysyms.h> |
| 8 | 8 |
| 9 #include <dlfcn.h> | 9 #include <dlfcn.h> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 return FALSE; // Allow subwidgets to paint. | 447 return FALSE; // Allow subwidgets to paint. |
| 448 } | 448 } |
| 449 | 449 |
| 450 void BrowserWindowGtk::DrawContentShadow(cairo_t* cr) { | 450 void BrowserWindowGtk::DrawContentShadow(cairo_t* cr) { |
| 451 // Draw the shadow above the toolbar. Tabs on the tabstrip will draw over us. | 451 // Draw the shadow above the toolbar. Tabs on the tabstrip will draw over us. |
| 452 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 452 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 453 int left_x, top_y; | 453 int left_x, top_y; |
| 454 gtk_widget_translate_coordinates(toolbar_->widget(), | 454 gtk_widget_translate_coordinates(toolbar_->widget(), |
| 455 GTK_WIDGET(window_), 0, 0, &left_x, | 455 GTK_WIDGET(window_), 0, 0, &left_x, |
| 456 &top_y); | 456 &top_y); |
| 457 int center_width = window_vbox_->allocation.width; | 457 |
| 458 GtkAllocation window_vbox_allocation; |
| 459 gtk_widget_get_allocation(window_vbox_, &window_vbox_allocation); |
| 460 int center_width = window_vbox_allocation.width; |
| 458 | 461 |
| 459 gfx::CairoCachedSurface* top_center = | 462 gfx::CairoCachedSurface* top_center = |
| 460 rb.GetNativeImageNamed(IDR_CONTENT_TOP_CENTER).ToCairo(); | 463 rb.GetNativeImageNamed(IDR_CONTENT_TOP_CENTER).ToCairo(); |
| 461 gfx::CairoCachedSurface* top_right = | 464 gfx::CairoCachedSurface* top_right = |
| 462 rb.GetNativeImageNamed(IDR_CONTENT_TOP_RIGHT_CORNER).ToCairo(); | 465 rb.GetNativeImageNamed(IDR_CONTENT_TOP_RIGHT_CORNER).ToCairo(); |
| 463 gfx::CairoCachedSurface* top_left = | 466 gfx::CairoCachedSurface* top_left = |
| 464 rb.GetNativeImageNamed(IDR_CONTENT_TOP_LEFT_CORNER).ToCairo(); | 467 rb.GetNativeImageNamed(IDR_CONTENT_TOP_LEFT_CORNER).ToCairo(); |
| 465 | 468 |
| 466 int center_left_x = left_x; | 469 int center_left_x = left_x; |
| 467 if (ShouldDrawContentDropShadow()) { | 470 if (ShouldDrawContentDropShadow()) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 506 right_x, | 509 right_x, |
| 507 top_y - kContentShadowThickness, | 510 top_y - kContentShadowThickness, |
| 508 top_right->Width(), | 511 top_right->Width(), |
| 509 top_right->Height()); | 512 top_right->Height()); |
| 510 cairo_fill(cr); | 513 cairo_fill(cr); |
| 511 | 514 |
| 512 // Fill in the sides. As above, we only draw 2 of the 3 columns on Linux. | 515 // Fill in the sides. As above, we only draw 2 of the 3 columns on Linux. |
| 513 int bottom_y; | 516 int bottom_y; |
| 514 gtk_widget_translate_coordinates(window_vbox_, | 517 gtk_widget_translate_coordinates(window_vbox_, |
| 515 GTK_WIDGET(window_), | 518 GTK_WIDGET(window_), |
| 516 0, window_vbox_->allocation.height, | 519 0, window_vbox_allocation.height, |
| 517 NULL, &bottom_y); | 520 NULL, &bottom_y); |
| 518 // |side_y| is where to start drawing the side shadows. The top corners draw | 521 // |side_y| is where to start drawing the side shadows. The top corners draw |
| 519 // the sides down to the bottom of the toolbar. | 522 // the sides down to the bottom of the toolbar. |
| 520 int side_y = top_y - kContentShadowThickness + top_right->Height(); | 523 int side_y = top_y - kContentShadowThickness + top_right->Height(); |
| 521 // |side_height| is how many pixels to draw for the side borders. We do one | 524 // |side_height| is how many pixels to draw for the side borders. We do one |
| 522 // pixel before the bottom of the web contents because that extra pixel is | 525 // pixel before the bottom of the web contents because that extra pixel is |
| 523 // drawn by the bottom corners. | 526 // drawn by the bottom corners. |
| 524 int side_height = bottom_y - side_y - 1; | 527 int side_height = bottom_y - side_y - 1; |
| 525 if (side_height > 0) { | 528 if (side_height > 0) { |
| 526 gfx::CairoCachedSurface* left = | 529 gfx::CairoCachedSurface* left = |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 | 567 |
| 565 // Finally, draw the bottom row. Since we don't overlap the contents, we clip | 568 // Finally, draw the bottom row. Since we don't overlap the contents, we clip |
| 566 // the top row of pixels. | 569 // the top row of pixels. |
| 567 gfx::CairoCachedSurface* bottom = | 570 gfx::CairoCachedSurface* bottom = |
| 568 rb.GetNativeImageNamed(IDR_CONTENT_BOTTOM_CENTER).ToCairo(); | 571 rb.GetNativeImageNamed(IDR_CONTENT_BOTTOM_CENTER).ToCairo(); |
| 569 bottom->SetSource(cr, GTK_WIDGET(window_), left_x + 1, bottom_y - 1); | 572 bottom->SetSource(cr, GTK_WIDGET(window_), left_x + 1, bottom_y - 1); |
| 570 cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT); | 573 cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT); |
| 571 cairo_rectangle(cr, | 574 cairo_rectangle(cr, |
| 572 left_x + 1, | 575 left_x + 1, |
| 573 bottom_y, | 576 bottom_y, |
| 574 window_vbox_->allocation.width - 2, | 577 window_vbox_allocation.width - 2, |
| 575 kContentShadowThickness); | 578 kContentShadowThickness); |
| 576 cairo_fill(cr); | 579 cairo_fill(cr); |
| 577 } | 580 } |
| 578 | 581 |
| 579 void BrowserWindowGtk::DrawPopupFrame(cairo_t* cr, | 582 void BrowserWindowGtk::DrawPopupFrame(cairo_t* cr, |
| 580 GtkWidget* widget, | 583 GtkWidget* widget, |
| 581 GdkEventExpose* event) { | 584 GdkEventExpose* event) { |
| 582 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 585 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 583 | 586 |
| 584 // Like DrawCustomFrame(), except that we use the unthemed resources to draw | 587 // Like DrawCustomFrame(), except that we use the unthemed resources to draw |
| (...skipping 1335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1920 } | 1923 } |
| 1921 | 1924 |
| 1922 void BrowserWindowGtk::UpdateCustomFrame() { | 1925 void BrowserWindowGtk::UpdateCustomFrame() { |
| 1923 gtk_window_set_decorated( | 1926 gtk_window_set_decorated( |
| 1924 window_, !UseCustomFrame() && browser_->type() != Browser::TYPE_SHELL); | 1927 window_, !UseCustomFrame() && browser_->type() != Browser::TYPE_SHELL); |
| 1925 titlebar_->UpdateCustomFrame(UseCustomFrame() && !IsFullscreen()); | 1928 titlebar_->UpdateCustomFrame(UseCustomFrame() && !IsFullscreen()); |
| 1926 UpdateWindowShape(bounds_.width(), bounds_.height()); | 1929 UpdateWindowShape(bounds_.width(), bounds_.height()); |
| 1927 } | 1930 } |
| 1928 | 1931 |
| 1929 gfx::Size BrowserWindowGtk::GetNonClientFrameSize() const { | 1932 gfx::Size BrowserWindowGtk::GetNonClientFrameSize() const { |
| 1930 return gfx::Size(window_container_->allocation.width - | 1933 GtkAllocation window_container_allocation; |
| 1931 render_area_floating_container_->allocation.width, | 1934 gtk_widget_get_allocation(window_container_, &window_container_allocation); |
| 1932 window_container_->allocation.height - | 1935 GtkAllocation render_area_floating_container_allocation; |
| 1933 render_area_floating_container_->allocation.height); | 1936 gtk_widget_get_allocation(render_area_floating_container_, |
| 1937 &render_area_floating_container_allocation); |
| 1938 return gfx::Size(window_container_allocation.width - |
| 1939 render_area_floating_container_allocation.width, |
| 1940 window_container_allocation.height - |
| 1941 render_area_floating_container_allocation.height); |
| 1934 } | 1942 } |
| 1935 | 1943 |
| 1936 void BrowserWindowGtk::InvalidateWindow() { | 1944 void BrowserWindowGtk::InvalidateWindow() { |
| 1937 gdk_window_invalidate_rect(gtk_widget_get_window(GTK_WIDGET(window_)), | 1945 gdk_window_invalidate_rect(gtk_widget_get_window(GTK_WIDGET(window_)), |
| 1938 >K_WIDGET(window_)->allocation, TRUE); | 1946 >K_WIDGET(window_)->allocation, TRUE); |
| 1939 } | 1947 } |
| 1940 | 1948 |
| 1941 void BrowserWindowGtk::SaveWindowPosition() { | 1949 void BrowserWindowGtk::SaveWindowPosition() { |
| 1942 // Browser::SaveWindowPlacement is used for session restore. | 1950 // Browser::SaveWindowPlacement is used for session restore. |
| 1943 ui::WindowShowState show_state = ui::SHOW_STATE_NORMAL; | 1951 ui::WindowShowState show_state = ui::SHOW_STATE_NORMAL; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1981 gtk_widget_queue_draw(toolbar_->widget()); | 1989 gtk_widget_queue_draw(toolbar_->widget()); |
| 1982 if (bookmark_bar_.get() && | 1990 if (bookmark_bar_.get() && |
| 1983 browser_->bookmark_bar_state() != BookmarkBar::DETACHED) { | 1991 browser_->bookmark_bar_state() != BookmarkBar::DETACHED) { |
| 1984 gtk_widget_queue_draw(bookmark_bar_->widget()); | 1992 gtk_widget_queue_draw(bookmark_bar_->widget()); |
| 1985 } | 1993 } |
| 1986 } | 1994 } |
| 1987 | 1995 |
| 1988 int BrowserWindowGtk::GetXPositionOfLocationIcon(GtkWidget* relative_to) { | 1996 int BrowserWindowGtk::GetXPositionOfLocationIcon(GtkWidget* relative_to) { |
| 1989 GtkWidget* location_icon = toolbar_->GetLocationBarView()-> | 1997 GtkWidget* location_icon = toolbar_->GetLocationBarView()-> |
| 1990 location_icon_widget(); | 1998 location_icon_widget(); |
| 1999 |
| 2000 GtkAllocation location_icon_allocation; |
| 2001 gtk_widget_get_allocation(location_icon, &location_icon_allocation); |
| 2002 |
| 1991 int x = 0; | 2003 int x = 0; |
| 1992 gtk_widget_translate_coordinates( | 2004 gtk_widget_translate_coordinates( |
| 1993 location_icon, relative_to, | 2005 location_icon, relative_to, |
| 1994 (location_icon->allocation.width + 1) / 2, | 2006 (location_icon_allocation.width + 1) / 2, |
| 1995 0, &x, NULL); | 2007 0, &x, NULL); |
| 1996 | 2008 |
| 1997 if (!gtk_widget_get_has_window(relative_to)) { | 2009 if (!gtk_widget_get_has_window(relative_to)) { |
| 1998 GtkAllocation allocation; | 2010 GtkAllocation allocation; |
| 1999 gtk_widget_get_allocation(relative_to, &allocation); | 2011 gtk_widget_get_allocation(relative_to, &allocation); |
| 2000 x += allocation.x; | 2012 x += allocation.x; |
| 2001 } | 2013 } |
| 2002 | 2014 |
| 2003 return x; | 2015 return x; |
| 2004 } | 2016 } |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2444 wm_type == ui::WM_OPENBOX || | 2456 wm_type == ui::WM_OPENBOX || |
| 2445 wm_type == ui::WM_XFWM4); | 2457 wm_type == ui::WM_XFWM4); |
| 2446 } | 2458 } |
| 2447 | 2459 |
| 2448 // static | 2460 // static |
| 2449 BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) { | 2461 BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) { |
| 2450 BrowserWindowGtk* browser_window_gtk = new BrowserWindowGtk(browser); | 2462 BrowserWindowGtk* browser_window_gtk = new BrowserWindowGtk(browser); |
| 2451 browser_window_gtk->Init(); | 2463 browser_window_gtk->Init(); |
| 2452 return browser_window_gtk; | 2464 return browser_window_gtk; |
| 2453 } | 2465 } |
| OLD | NEW |