Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: ui/views/window/custom_frame_view.cc

Issue 98793009: Linux Aura: Hide title bar when CustomFrameView maximized on Unity. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Note: kUseSystemTitleBar check moved to OpaqueBrowserFrameView. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/views/window/custom_frame_view.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "ui/views/window/custom_frame_view.h" 5 #include "ui/views/window/custom_frame_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "grit/ui_resources.h" 10 #include "grit/ui_resources.h"
11 #include "grit/ui_strings.h" 11 #include "grit/ui_strings.h"
12 #include "ui/base/hit_test.h" 12 #include "ui/base/hit_test.h"
13 #include "ui/base/l10n/l10n_util.h" 13 #include "ui/base/l10n/l10n_util.h"
14 #include "ui/base/resource/resource_bundle.h" 14 #include "ui/base/resource/resource_bundle.h"
15 #include "ui/gfx/canvas.h" 15 #include "ui/gfx/canvas.h"
16 #include "ui/gfx/font.h" 16 #include "ui/gfx/font.h"
17 #include "ui/gfx/image/image.h" 17 #include "ui/gfx/image/image.h"
18 #include "ui/gfx/path.h" 18 #include "ui/gfx/path.h"
19 #include "ui/views/color_constants.h" 19 #include "ui/views/color_constants.h"
20 #include "ui/views/controls/button/image_button.h" 20 #include "ui/views/controls/button/image_button.h"
21 #include "ui/views/views_delegate.h"
21 #include "ui/views/widget/widget.h" 22 #include "ui/views/widget/widget.h"
22 #include "ui/views/widget/widget_delegate.h" 23 #include "ui/views/widget/widget_delegate.h"
23 #include "ui/views/window/client_view.h" 24 #include "ui/views/window/client_view.h"
24 #include "ui/views/window/frame_background.h" 25 #include "ui/views/window/frame_background.h"
25 #include "ui/views/window/window_resources.h" 26 #include "ui/views/window/window_resources.h"
26 #include "ui/views/window/window_shape.h" 27 #include "ui/views/window/window_shape.h"
27 28
28 #if defined(USE_AURA) 29 #if defined(USE_AURA)
29 #include "ui/views/widget/native_widget_aura.h" 30 #include "ui/views/widget/native_widget_aura.h"
30 #elif defined(OS_WIN) 31 #elif defined(OS_WIN)
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 int window_component = GetHTComponentForFrame(point, FrameBorderThickness(), 180 int window_component = GetHTComponentForFrame(point, FrameBorderThickness(),
180 NonClientBorderThickness(), kResizeAreaCornerSize, kResizeAreaCornerSize, 181 NonClientBorderThickness(), kResizeAreaCornerSize, kResizeAreaCornerSize,
181 frame_->widget_delegate()->CanResize()); 182 frame_->widget_delegate()->CanResize());
182 // Fall back to the caption if no other component matches. 183 // Fall back to the caption if no other component matches.
183 return (window_component == HTNOWHERE) ? HTCAPTION : window_component; 184 return (window_component == HTNOWHERE) ? HTCAPTION : window_component;
184 } 185 }
185 186
186 void CustomFrameView::GetWindowMask(const gfx::Size& size, 187 void CustomFrameView::GetWindowMask(const gfx::Size& size,
187 gfx::Path* window_mask) { 188 gfx::Path* window_mask) {
188 DCHECK(window_mask); 189 DCHECK(window_mask);
189 if (frame_->IsMaximized()) 190 if (frame_->IsMaximized() || !ShouldShowTitleBarAndBorder())
190 return; 191 return;
191 192
192 GetDefaultWindowMask(size, window_mask); 193 GetDefaultWindowMask(size, window_mask);
193 } 194 }
194 195
195 void CustomFrameView::ResetWindowControls() { 196 void CustomFrameView::ResetWindowControls() {
196 restore_button_->SetState(CustomButton::STATE_NORMAL); 197 restore_button_->SetState(CustomButton::STATE_NORMAL);
197 minimize_button_->SetState(CustomButton::STATE_NORMAL); 198 minimize_button_->SetState(CustomButton::STATE_NORMAL);
198 maximize_button_->SetState(CustomButton::STATE_NORMAL); 199 maximize_button_->SetState(CustomButton::STATE_NORMAL);
199 // The close button isn't affected by this constraint. 200 // The close button isn't affected by this constraint.
200 } 201 }
201 202
202 void CustomFrameView::UpdateWindowIcon() { 203 void CustomFrameView::UpdateWindowIcon() {
203 if (window_icon_) 204 if (window_icon_)
204 window_icon_->SchedulePaint(); 205 window_icon_->SchedulePaint();
205 } 206 }
206 207
207 void CustomFrameView::UpdateWindowTitle() { 208 void CustomFrameView::UpdateWindowTitle() {
208 SchedulePaintInRect(title_bounds_); 209 SchedulePaintInRect(title_bounds_);
209 } 210 }
210 211
211 /////////////////////////////////////////////////////////////////////////////// 212 ///////////////////////////////////////////////////////////////////////////////
212 // CustomFrameView, View overrides: 213 // CustomFrameView, View overrides:
213 214
214 void CustomFrameView::OnPaint(gfx::Canvas* canvas) { 215 void CustomFrameView::OnPaint(gfx::Canvas* canvas) {
216 if (!ShouldShowTitleBarAndBorder())
217 return;
218
215 if (frame_->IsMaximized()) 219 if (frame_->IsMaximized())
216 PaintMaximizedFrameBorder(canvas); 220 PaintMaximizedFrameBorder(canvas);
217 else 221 else
218 PaintRestoredFrameBorder(canvas); 222 PaintRestoredFrameBorder(canvas);
219 PaintTitleBar(canvas); 223 PaintTitleBar(canvas);
220 if (ShouldShowClientEdge()) 224 if (ShouldShowClientEdge())
221 PaintRestoredClientEdge(canvas); 225 PaintRestoredClientEdge(canvas);
222 } 226 }
223 227
224 void CustomFrameView::Layout() { 228 void CustomFrameView::Layout() {
225 LayoutWindowControls(); 229 if (ShouldShowTitleBarAndBorder()) {
226 LayoutTitleBar(); 230 LayoutWindowControls();
231 LayoutTitleBar();
232 }
233
227 LayoutClientView(); 234 LayoutClientView();
228 } 235 }
229 236
230 gfx::Size CustomFrameView::GetPreferredSize() { 237 gfx::Size CustomFrameView::GetPreferredSize() {
231 return frame_->non_client_view()->GetWindowBoundsForClientBounds( 238 return frame_->non_client_view()->GetWindowBoundsForClientBounds(
232 gfx::Rect(frame_->client_view()->GetPreferredSize())).size(); 239 gfx::Rect(frame_->client_view()->GetPreferredSize())).size();
233 } 240 }
234 241
235 gfx::Size CustomFrameView::GetMinimumSize() { 242 gfx::Size CustomFrameView::GetMinimumSize() {
236 return frame_->non_client_view()->GetWindowBoundsForClientBounds( 243 return frame_->non_client_view()->GetWindowBoundsForClientBounds(
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 // When the icon is shorter than the minimum space we reserve for the caption 323 // When the icon is shorter than the minimum space we reserve for the caption
317 // button, we vertically center it. We want to bias rounding to put extra 324 // button, we vertically center it. We want to bias rounding to put extra
318 // space above the icon, since the 3D edge (+ client edge, for restored 325 // space above the icon, since the 3D edge (+ client edge, for restored
319 // windows) below looks (to the eye) more like additional space than does the 326 // windows) below looks (to the eye) more like additional space than does the
320 // 3D edge (or nothing at all, for maximized windows) above; hence the +1. 327 // 3D edge (or nothing at all, for maximized windows) above; hence the +1.
321 int y = unavailable_px_at_top + (NonClientTopBorderHeight() - 328 int y = unavailable_px_at_top + (NonClientTopBorderHeight() -
322 unavailable_px_at_top - size - TitlebarBottomThickness() + 1) / 2; 329 unavailable_px_at_top - size - TitlebarBottomThickness() + 1) / 2;
323 return gfx::Rect(frame_thickness + kIconLeftSpacing, y, size, size); 330 return gfx::Rect(frame_thickness + kIconLeftSpacing, y, size, size);
324 } 331 }
325 332
333 bool CustomFrameView::ShouldShowTitleBarAndBorder() const {
334 if (ViewsDelegate::views_delegate) {
335 return !ViewsDelegate::views_delegate->WindowManagerProvidesTitleBar(
336 frame_->IsMaximized());
337 }
338
339 return true;
340 }
341
326 bool CustomFrameView::ShouldShowClientEdge() const { 342 bool CustomFrameView::ShouldShowClientEdge() const {
327 return !frame_->IsMaximized(); 343 return !frame_->IsMaximized() && ShouldShowTitleBarAndBorder();
328 } 344 }
329 345
330 void CustomFrameView::PaintRestoredFrameBorder(gfx::Canvas* canvas) { 346 void CustomFrameView::PaintRestoredFrameBorder(gfx::Canvas* canvas) {
331 frame_background_->set_frame_color(GetFrameColor()); 347 frame_background_->set_frame_color(GetFrameColor());
332 const gfx::ImageSkia* frame_image = GetFrameImage(); 348 const gfx::ImageSkia* frame_image = GetFrameImage();
333 frame_background_->set_theme_image(frame_image); 349 frame_background_->set_theme_image(frame_image);
334 frame_background_->set_top_area_height(frame_image->height()); 350 frame_background_->set_top_area_height(frame_image->height());
335 351
336 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 352 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
337 353
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 // midline rather than below. This compensates for how the icon is already 558 // midline rather than below. This compensates for how the icon is already
543 // biased downwards (see IconBounds()) and helps prevent descenders on the 559 // biased downwards (see IconBounds()) and helps prevent descenders on the
544 // title from overlapping the 3D edge at the bottom of the titlebar. 560 // title from overlapping the 3D edge at the bottom of the titlebar.
545 title_bounds_.SetRect(title_x, 561 title_bounds_.SetRect(title_x,
546 icon_bounds.y() + ((icon_bounds.height() - title_height - 1) / 2), 562 icon_bounds.y() + ((icon_bounds.height() - title_height - 1) / 2),
547 std::max(0, minimize_button_->x() - kTitleCaptionSpacing - 563 std::max(0, minimize_button_->x() - kTitleCaptionSpacing -
548 title_x), title_height); 564 title_x), title_height);
549 } 565 }
550 566
551 void CustomFrameView::LayoutClientView() { 567 void CustomFrameView::LayoutClientView() {
568 if (!ShouldShowTitleBarAndBorder()) {
569 client_view_bounds_ = bounds();
570 return;
571 }
572
552 int top_height = NonClientTopBorderHeight(); 573 int top_height = NonClientTopBorderHeight();
553 int border_thickness = NonClientBorderThickness(); 574 int border_thickness = NonClientBorderThickness();
554 client_view_bounds_.SetRect(border_thickness, top_height, 575 client_view_bounds_.SetRect(border_thickness, top_height,
555 std::max(0, width() - (2 * border_thickness)), 576 std::max(0, width() - (2 * border_thickness)),
556 std::max(0, height() - top_height - border_thickness)); 577 std::max(0, height() - top_height - border_thickness));
557 } 578 }
558 579
559 ImageButton* CustomFrameView::InitWindowCaptionButton( 580 ImageButton* CustomFrameView::InitWindowCaptionButton(
560 int accessibility_string_id, 581 int accessibility_string_id,
561 int normal_image_id, 582 int normal_image_id,
562 int hot_image_id, 583 int hot_image_id,
563 int pushed_image_id) { 584 int pushed_image_id) {
564 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 585 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
565 ImageButton* button = new ImageButton(this); 586 ImageButton* button = new ImageButton(this);
566 button->SetAccessibleName(l10n_util::GetStringUTF16(accessibility_string_id)); 587 button->SetAccessibleName(l10n_util::GetStringUTF16(accessibility_string_id));
567 button->SetImage(CustomButton::STATE_NORMAL, 588 button->SetImage(CustomButton::STATE_NORMAL,
568 rb.GetImageNamed(normal_image_id).ToImageSkia()); 589 rb.GetImageNamed(normal_image_id).ToImageSkia());
569 button->SetImage(CustomButton::STATE_HOVERED, 590 button->SetImage(CustomButton::STATE_HOVERED,
570 rb.GetImageNamed(hot_image_id).ToImageSkia()); 591 rb.GetImageNamed(hot_image_id).ToImageSkia());
571 button->SetImage(CustomButton::STATE_PRESSED, 592 button->SetImage(CustomButton::STATE_PRESSED,
572 rb.GetImageNamed(pushed_image_id).ToImageSkia()); 593 rb.GetImageNamed(pushed_image_id).ToImageSkia());
573 AddChildView(button); 594 AddChildView(button);
574 return button; 595 return button;
575 } 596 }
576 597
577 } // namespace views 598 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/window/custom_frame_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698