OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/panels/panel_browser_window_gtk.h" | 5 #include "chrome/browser/ui/panels/panel_browser_window_gtk.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "chrome/browser/ui/browser_list.h" | 8 #include "chrome/browser/ui/browser_list.h" |
9 #include "chrome/browser/ui/gtk/browser_titlebar.h" | 9 #include "chrome/browser/ui/gtk/browser_titlebar.h" |
10 #include "chrome/browser/ui/gtk/custom_button.h" | 10 #include "chrome/browser/ui/gtk/custom_button.h" |
| 11 #include "chrome/browser/ui/gtk/nine_box.h" |
11 #include "chrome/browser/ui/gtk/theme_service_gtk.h" | 12 #include "chrome/browser/ui/gtk/theme_service_gtk.h" |
12 #include "chrome/browser/ui/panels/panel.h" | 13 #include "chrome/browser/ui/panels/panel.h" |
13 #include "chrome/browser/ui/panels/panel_bounds_animation.h" | 14 #include "chrome/browser/ui/panels/panel_bounds_animation.h" |
14 #include "chrome/browser/ui/panels/panel_browser_titlebar_gtk.h" | 15 #include "chrome/browser/ui/panels/panel_browser_titlebar_gtk.h" |
15 #include "chrome/browser/ui/panels/panel_drag_gtk.h" | 16 #include "chrome/browser/ui/panels/panel_drag_gtk.h" |
16 #include "chrome/browser/ui/panels/panel_manager.h" | 17 #include "chrome/browser/ui/panels/panel_manager.h" |
17 #include "chrome/browser/ui/panels/panel_strip.h" | 18 #include "chrome/browser/ui/panels/panel_strip.h" |
18 #include "chrome/common/chrome_notification_types.h" | 19 #include "chrome/common/chrome_notification_types.h" |
19 #include "content/public/browser/notification_service.h" | 20 #include "content/public/browser/notification_service.h" |
20 #include "grit/theme_resources_standard.h" | 21 #include "grit/theme_resources_standard.h" |
| 22 #include "grit/ui_resources.h" |
21 #include "third_party/skia/include/core/SkShader.h" | 23 #include "third_party/skia/include/core/SkShader.h" |
22 #include "ui/gfx/canvas.h" | 24 #include "ui/gfx/canvas.h" |
23 #include "ui/gfx/image/cairo_cached_surface.h" | 25 #include "ui/gfx/image/cairo_cached_surface.h" |
24 #include "ui/gfx/image/image.h" | 26 #include "ui/gfx/image/image.h" |
25 #include "ui/gfx/skia_util.h" | 27 #include "ui/gfx/skia_util.h" |
26 | 28 |
27 using content::WebContents; | 29 using content::WebContents; |
28 | 30 |
29 namespace { | 31 namespace { |
30 | 32 |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 return FALSE; | 148 return FALSE; |
147 if (*edge == GDK_WINDOW_EDGE_SOUTH_WEST) | 149 if (*edge == GDK_WINDOW_EDGE_SOUTH_WEST) |
148 *edge = GDK_WINDOW_EDGE_WEST; | 150 *edge = GDK_WINDOW_EDGE_WEST; |
149 else if (*edge == GDK_WINDOW_EDGE_SOUTH_EAST) | 151 else if (*edge == GDK_WINDOW_EDGE_SOUTH_EAST) |
150 *edge = GDK_WINDOW_EDGE_EAST; | 152 *edge = GDK_WINDOW_EDGE_EAST; |
151 } | 153 } |
152 | 154 |
153 return TRUE; | 155 return TRUE; |
154 } | 156 } |
155 | 157 |
| 158 GdkRegion* PanelBrowserWindowGtk::GetWindowShape(int width, int height) const { |
| 159 // For panels, only top corners are rounded. The bottom corners are not |
| 160 // rounded because panels are aligned to the bottom edge of the screen. |
| 161 GdkRectangle top_top_rect = { 3, 0, width - 6, 1 }; |
| 162 GdkRectangle top_mid_rect = { 1, 1, width - 2, 2 }; |
| 163 GdkRectangle mid_rect = { 0, 3, width, height - 3 }; |
| 164 GdkRegion* mask = gdk_region_rectangle(&top_top_rect); |
| 165 gdk_region_union_with_rect(mask, &top_mid_rect); |
| 166 gdk_region_union_with_rect(mask, &mid_rect); |
| 167 return mask; |
| 168 } |
| 169 |
| 170 void PanelBrowserWindowGtk::DrawCustomFrameBorder(GtkWidget* widget) { |
| 171 static NineBox* custom_frame_border = NULL; |
| 172 if (!custom_frame_border) { |
| 173 custom_frame_border = new NineBox(IDR_WINDOW_TOP_LEFT_CORNER, |
| 174 IDR_WINDOW_TOP_CENTER, |
| 175 IDR_WINDOW_TOP_RIGHT_CORNER, |
| 176 IDR_WINDOW_LEFT_SIDE, |
| 177 0, |
| 178 IDR_WINDOW_RIGHT_SIDE, |
| 179 IDR_PANEL_BOTTOM_LEFT_CORNER, |
| 180 IDR_WINDOW_BOTTOM_CENTER, |
| 181 IDR_PANEL_BOTTOM_RIGHT_CORNER); |
| 182 } |
| 183 custom_frame_border->RenderToWidget(widget); |
| 184 } |
| 185 |
156 void PanelBrowserWindowGtk::EnsureDragHelperCreated() { | 186 void PanelBrowserWindowGtk::EnsureDragHelperCreated() { |
157 if (drag_helper_.get()) | 187 if (drag_helper_.get()) |
158 return; | 188 return; |
159 | 189 |
160 drag_helper_.reset(new PanelDragGtk(panel_.get())); | 190 drag_helper_.reset(new PanelDragGtk(panel_.get())); |
161 gtk_box_pack_end(GTK_BOX(window_vbox_), drag_helper_->widget(), | 191 gtk_box_pack_end(GTK_BOX(window_vbox_), drag_helper_->widget(), |
162 FALSE, FALSE, 0); | 192 FALSE, FALSE, 0); |
163 } | 193 } |
164 | 194 |
165 bool PanelBrowserWindowGtk::HandleTitleBarLeftMousePress( | 195 bool PanelBrowserWindowGtk::HandleTitleBarLeftMousePress( |
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 break; | 710 break; |
681 case RESTORE_BUTTON: | 711 case RESTORE_BUTTON: |
682 button = titlebar->unminimize_button(); | 712 button = titlebar->unminimize_button(); |
683 break; | 713 break; |
684 default: | 714 default: |
685 NOTREACHED(); | 715 NOTREACHED(); |
686 return false; | 716 return false; |
687 } | 717 } |
688 return gtk_widget_get_visible(button->widget()); | 718 return gtk_widget_get_visible(button->widget()); |
689 } | 719 } |
OLD | NEW |