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

Side by Side Diff: ui/views/bubble/bubble_frame_view.cc

Issue 15667004: Add resize support for Views new style dialogs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove incorrect DialogDelegate::CanResize overrride. Created 7 years, 7 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/bubble/bubble_frame_view.h ('k') | ui/views/window/dialog_delegate.cc » ('j') | 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/bubble/bubble_frame_view.h" 5 #include "ui/views/bubble/bubble_frame_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "grit/ui_resources.h" 9 #include "grit/ui_resources.h"
10 #include "ui/base/hit_test.h" 10 #include "ui/base/hit_test.h"
11 #include "ui/base/resource/resource_bundle.h" 11 #include "ui/base/resource/resource_bundle.h"
12 #include "ui/gfx/path.h" 12 #include "ui/gfx/path.h"
13 #include "ui/gfx/screen.h" 13 #include "ui/gfx/screen.h"
14 #include "ui/views/bubble/bubble_border.h" 14 #include "ui/views/bubble/bubble_border.h"
15 #include "ui/views/controls/button/label_button.h" 15 #include "ui/views/controls/button/label_button.h"
16 #include "ui/views/widget/widget.h" 16 #include "ui/views/widget/widget.h"
17 #include "ui/views/widget/widget_delegate.h"
17 #include "ui/views/window/client_view.h" 18 #include "ui/views/window/client_view.h"
18 19
19 namespace { 20 namespace {
20 21
21 // Insets, in pixels, for the title view, when it exists. 22 // Insets, in pixels, for the title view, when it exists.
22 const int kTitleTopInset = 19; 23 const int kTitleTopInset = 19;
23 const int kTitleLeftInset = 10; 24 const int kTitleLeftInset = 10;
24 25
25 // Get the |vertical| or horizontal screen overflow of the |window_bounds|. 26 // Get the |vertical| or horizontal screen overflow of the |window_bounds|.
26 int GetOffScreenLength(const gfx::Rect& monitor_bounds, 27 int GetOffScreenLength(const gfx::Rect& monitor_bounds,
(...skipping 19 matching lines...) Expand all
46 47
47 } // namespace 48 } // namespace
48 49
49 namespace views { 50 namespace views {
50 51
51 BubbleFrameView::BubbleFrameView(const gfx::Insets& content_margins) 52 BubbleFrameView::BubbleFrameView(const gfx::Insets& content_margins)
52 : bubble_border_(NULL), 53 : bubble_border_(NULL),
53 content_margins_(content_margins), 54 content_margins_(content_margins),
54 title_(NULL), 55 title_(NULL),
55 close_(NULL), 56 close_(NULL),
56 titlebar_extra_view_(NULL), 57 titlebar_extra_view_(NULL) {
57 can_drag_(false) {
58 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 58 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
59 title_ = new Label(string16(), rb.GetFont(ui::ResourceBundle::MediumFont)); 59 title_ = new Label(string16(), rb.GetFont(ui::ResourceBundle::MediumFont));
60 title_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 60 title_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
61 AddChildView(title_); 61 AddChildView(title_);
62 62
63 close_ = new LabelButton(this, string16()); 63 close_ = new LabelButton(this, string16());
64 close_->SetImage(CustomButton::STATE_NORMAL, 64 close_->SetImage(CustomButton::STATE_NORMAL,
65 *rb.GetImageNamed(IDR_CLOSE_DIALOG).ToImageSkia()); 65 *rb.GetImageNamed(IDR_CLOSE_DIALOG).ToImageSkia());
66 close_->SetImage(CustomButton::STATE_HOVERED, 66 close_->SetImage(CustomButton::STATE_HOVERED,
67 *rb.GetImageNamed(IDR_CLOSE_DIALOG_H).ToImageSkia()); 67 *rb.GetImageNamed(IDR_CLOSE_DIALOG_H).ToImageSkia());
(...skipping 14 matching lines...) Expand all
82 return client_bounds; 82 return client_bounds;
83 } 83 }
84 84
85 gfx::Rect BubbleFrameView::GetWindowBoundsForClientBounds( 85 gfx::Rect BubbleFrameView::GetWindowBoundsForClientBounds(
86 const gfx::Rect& client_bounds) const { 86 const gfx::Rect& client_bounds) const {
87 return const_cast<BubbleFrameView*>(this)->GetUpdatedWindowBounds( 87 return const_cast<BubbleFrameView*>(this)->GetUpdatedWindowBounds(
88 gfx::Rect(), client_bounds.size(), false); 88 gfx::Rect(), client_bounds.size(), false);
89 } 89 }
90 90
91 int BubbleFrameView::NonClientHitTest(const gfx::Point& point) { 91 int BubbleFrameView::NonClientHitTest(const gfx::Point& point) {
92 if (!bounds().Contains(point))
93 return HTNOWHERE;
92 if (close_->visible() && close_->GetMirroredBounds().Contains(point)) 94 if (close_->visible() && close_->GetMirroredBounds().Contains(point))
93 return HTCLOSE; 95 return HTCLOSE;
94 if (can_drag_ && point.y() < GetInsets().top()) 96 if (!GetWidget()->widget_delegate()->CanResize())
97 return GetWidget()->client_view()->NonClientHitTest(point);
98
99 const int size = bubble_border_->GetBorderThickness() + 4;
100 const int hit = GetHTComponentForFrame(point, size, size, size, size, true);
101 if (hit == HTNOWHERE && point.y() < title_->bounds().bottom())
95 return HTCAPTION; 102 return HTCAPTION;
96 return GetWidget()->client_view()->NonClientHitTest(point); 103 return hit;
97 } 104 }
98 105
99 void BubbleFrameView::GetWindowMask(const gfx::Size& size, 106 void BubbleFrameView::GetWindowMask(const gfx::Size& size,
100 gfx::Path* window_mask) { 107 gfx::Path* window_mask) {
101 if (bubble_border_->shadow() != BubbleBorder::NO_SHADOW_OPAQUE_BORDER) 108 if (bubble_border_->shadow() != BubbleBorder::NO_SHADOW_OPAQUE_BORDER)
102 return; 109 return;
103 110
104 // Use a window mask roughly matching the border in the image assets. 111 // Use a window mask roughly matching the border in the image assets.
105 static const int kBorderStrokeSize = 1; 112 static const int kBorderStrokeSize = 1;
106 static const SkScalar kCornerRadius = SkIntToScalar(6); 113 static const SkScalar kCornerRadius = SkIntToScalar(6);
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 // |offscreen_adjust|, e.g. positive |offscreen_adjust| means bubble 291 // |offscreen_adjust|, e.g. positive |offscreen_adjust| means bubble
285 // window needs to be moved to the right and that means we need to move arrow 292 // window needs to be moved to the right and that means we need to move arrow
286 // to the left, and that means negative offset. 293 // to the left, and that means negative offset.
287 bubble_border_->set_arrow_offset( 294 bubble_border_->set_arrow_offset(
288 bubble_border_->GetArrowOffset(window_bounds.size()) - offscreen_adjust); 295 bubble_border_->GetArrowOffset(window_bounds.size()) - offscreen_adjust);
289 if (offscreen_adjust) 296 if (offscreen_adjust)
290 SchedulePaint(); 297 SchedulePaint();
291 } 298 }
292 299
293 } // namespace views 300 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/bubble/bubble_frame_view.h ('k') | ui/views/window/dialog_delegate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698