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

Side by Side Diff: chrome/browser/ui/views/constrained_window_frame_simple.cc

Issue 11077006: Correct padding and focus ring for frameless constrained window dialog (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 2 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
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 "chrome/browser/ui/views/constrained_window_frame_simple.h" 5 #include "chrome/browser/ui/views/constrained_window_frame_simple.h"
6 6
7 #include "chrome/browser/ui/constrained_window.h" 7 #include "chrome/browser/ui/constrained_window.h"
8 #include "chrome/browser/ui/views/constrained_window_views.h" 8 #include "chrome/browser/ui/views/constrained_window_views.h"
9 #include "grit/ui_resources.h" 9 #include "grit/ui_resources.h"
10 #include "grit/chromium_strings.h" 10 #include "grit/chromium_strings.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 private: 44 private:
45 views::Widget* container_; 45 views::Widget* container_;
46 46
47 DISALLOW_COPY_AND_ASSIGN(HeaderLayout); 47 DISALLOW_COPY_AND_ASSIGN(HeaderLayout);
48 }; 48 };
49 49
50 void HeaderLayout::Layout(views::View* host) { 50 void HeaderLayout::Layout(views::View* host) {
51 if (!host->has_children()) 51 if (!host->has_children())
52 return; 52 return;
53 53
54 int horizontal_padding = ConstrainedWindow::kHorizontalPadding; 54 int top_padding = ConstrainedWindow::kCloseButtonPadding;
55 int vertical_padding = ConstrainedWindow::kVerticalPadding; 55 int left_padding = ConstrainedWindow::kHorizontalPadding;
56 int row_padding = ConstrainedWindow::kRowPadding; 56 int bottom_padding = ConstrainedWindow::kRowPadding;
57 int right_padding = ConstrainedWindow::kCloseButtonPadding;
57 58
58 views::View* header = host->child_at(0); 59 views::View* header = host->child_at(0);
59 gfx::Size preferred_size = GetPreferredSize(host); 60 gfx::Size preferred_size = GetPreferredSize(host);
60 int width = preferred_size.width() - 2 * horizontal_padding; 61 int width = preferred_size.width() - left_padding - right_padding;
61 int height = preferred_size.height() - vertical_padding - row_padding; 62 int height = preferred_size.height() - top_padding - bottom_padding;
62 63
63 header->SetBounds(horizontal_padding, vertical_padding, width, height); 64 header->SetBounds(left_padding, top_padding, width, height);
64 } 65 }
65 66
66 gfx::Size HeaderLayout::GetPreferredSize(views::View* host) { 67 gfx::Size HeaderLayout::GetPreferredSize(views::View* host) {
67 int horizontal_padding = ConstrainedWindow::kHorizontalPadding; 68 int left_padding = ConstrainedWindow::kHorizontalPadding;
68 int vertical_padding = ConstrainedWindow::kVerticalPadding; 69 int top_padding = ConstrainedWindow::kCloseButtonPadding;
69 int row_padding = ConstrainedWindow::kRowPadding; 70 int right_padding = ConstrainedWindow::kCloseButtonPadding;
71 int bottom_padding = ConstrainedWindow::kRowPadding;
70 72
71 views::View* header = host->child_at(0); 73 views::View* header = host->child_at(0);
72 views::View* client_view = container_->client_view(); 74 views::View* client_view = container_->client_view();
73 75
74 gfx::Size header_size = header ? header->GetPreferredSize() : gfx::Size(); 76 gfx::Size header_size = header ? header->GetPreferredSize() : gfx::Size();
75 gfx::Size client_size = 77 gfx::Size client_size =
76 client_view ? client_view->GetPreferredSize() : gfx::Size(); 78 client_view ? client_view->GetPreferredSize() : gfx::Size();
77 int width = std::max(client_size.width(), header_size.width()) + 79 int width = std::max(client_size.width(), header_size.width()) +
78 2 * horizontal_padding; 80 left_padding + right_padding;
79 int height = vertical_padding + header_size.height() + row_padding; 81 int height = header_size.height() + top_padding + bottom_padding;
80 return gfx::Size(width, height); 82 return gfx::Size(width, height);
81 } 83 }
82 84
83 } // namespace 85 } // namespace
84 86
85 ConstrainedWindowFrameSimple::HeaderViews::HeaderViews( 87 ConstrainedWindowFrameSimple::HeaderViews::HeaderViews(
86 views::View* header, 88 views::View* header,
87 views::Label* title_label, 89 views::Label* title_label,
88 views::Button* close_button) 90 views::Button* close_button)
89 : header(header), 91 : header(header),
(...skipping 12 matching lines...) Expand all
102 104
103 SetHeaderView(CreateDefaultHeaderView()); 105 SetHeaderView(CreateDefaultHeaderView());
104 106
105 set_background(views::Background::CreateSolidBackground( 107 set_background(views::Background::CreateSolidBackground(
106 ConstrainedWindow::GetBackgroundColor())); 108 ConstrainedWindow::GetBackgroundColor()));
107 } 109 }
108 110
109 ConstrainedWindowFrameSimple::~ConstrainedWindowFrameSimple() { 111 ConstrainedWindowFrameSimple::~ConstrainedWindowFrameSimple() {
110 } 112 }
111 113
112 void ConstrainedWindowFrameSimple::SetHeaderView(HeaderViews* header_views) 114 void ConstrainedWindowFrameSimple::SetHeaderView(HeaderViews* header_views)
Mike Wittman 2012/10/08 21:34:19 The custom header padding needs to be applied here
please use gerrit instead 2012/10/09 18:38:09 One of my upcoming CLs gives the ability to set cu
113 { 115 {
114 RemoveAllChildViews(true); 116 RemoveAllChildViews(true);
115 117
116 header_views_.reset(header_views); 118 header_views_.reset(header_views);
117 119
118 AddChildView(header_views_->header); 120 AddChildView(header_views_->header);
119 } 121 }
120 122
123 views::View* ConstrainedWindowFrameSimple::AddPadding(
124 views::View* viewToPad,
125 int top,
126 int left,
127 int bottom,
128 int right) {
129 views::View* result = new views::View();
130 views::GridLayout* layout = new views::GridLayout(result);
131 result->SetLayoutManager(layout);
132 layout->SetInsets(top, left, bottom, right);
133 views::ColumnSet* cs = layout->AddColumnSet(0);
134 cs->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER, 0,
135 views::GridLayout::USE_PREF, 0, 0);
136 layout->StartRow(0, 0);
137 layout->AddView(viewToPad);
138 return result;
139 }
140
121 HeaderViews* ConstrainedWindowFrameSimple::CreateDefaultHeaderView() { 141 HeaderViews* ConstrainedWindowFrameSimple::CreateDefaultHeaderView() {
142 // kVerticalPadding - kCloseButtonPadding - title ascent height
143 // = 20 - 4 - 5 = 11.
144 const int kTitleTopPadding = 11;
145 const int kTitleLeftPadding = 0;
146 const int kTitleBottomPadding = 0;
147 const int kTitleRightPadding = 0;
148
122 views::View* header_view = new views::View; 149 views::View* header_view = new views::View;
123 150
124 views::GridLayout* grid_layout = new views::GridLayout(header_view); 151 views::GridLayout* grid_layout = new views::GridLayout(header_view);
125 header_view->SetLayoutManager(grid_layout); 152 header_view->SetLayoutManager(grid_layout);
126 153
127 views::ColumnSet* header_cs = grid_layout->AddColumnSet(0); 154 views::ColumnSet* header_cs = grid_layout->AddColumnSet(0);
128 header_cs->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER, 0, 155 header_cs->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER, 0,
129 views::GridLayout::USE_PREF, 0, 0); // Title. 156 views::GridLayout::USE_PREF, 0, 0); // Title.
130 header_cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing); 157 header_cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing);
131 header_cs->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER, 0, 158 header_cs->AddColumn(views::GridLayout::TRAILING, views::GridLayout::LEADING,
132 views::GridLayout::USE_PREF, 0, 0); // Close Button. 159 0, views::GridLayout::USE_PREF, 0, 0); // Close Button.
133 160
134 // Header row. 161 // Header row.
135 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 162 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
136 grid_layout->StartRow(0, 0); 163 grid_layout->StartRow(0, 0);
164
137 views::Label* title_label = new views::Label(); 165 views::Label* title_label = new views::Label();
138 title_label->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 166 title_label->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
139 title_label->SetFont(rb.GetFont(ConstrainedWindow::kTitleFontStyle)); 167 title_label->SetFont(rb.GetFont(ConstrainedWindow::kTitleFontStyle));
140 title_label->SetEnabledColor(ConstrainedWindow::GetTextColor()); 168 title_label->SetEnabledColor(ConstrainedWindow::GetTextColor());
141 title_label->SetText(container_->widget_delegate()->GetWindowTitle()); 169 title_label->SetText(container_->widget_delegate()->GetWindowTitle());
142 grid_layout->AddView(title_label); 170 grid_layout->AddView(AddPadding(title_label, kTitleTopPadding,
171 kTitleLeftPadding, kTitleBottomPadding, kTitleRightPadding));
143 172
144 views::Button* close_button = CreateCloseButton(); 173 views::Button* close_button = CreateCloseButton();
145 grid_layout->AddView(close_button); 174 grid_layout->AddView(close_button);
146 175
147 return new HeaderViews(header_view, title_label, close_button); 176 return new HeaderViews(header_view, title_label, close_button);
148 } 177 }
149 178
150 gfx::Rect ConstrainedWindowFrameSimple::GetBoundsForClientView() const { 179 gfx::Rect ConstrainedWindowFrameSimple::GetBoundsForClientView() const {
151 int horizontal_padding = ConstrainedWindow::kHorizontalPadding;
152 int vertical_padding = ConstrainedWindow::kVerticalPadding;
153 int row_padding = ConstrainedWindow::kRowPadding;
154 gfx::Size header_size = 180 gfx::Size header_size =
155 header_views_->header ? 181 header_views_->header ?
156 header_views_->header->GetPreferredSize() : gfx::Size(); 182 header_views_->header->GetPreferredSize() : gfx::Size();
157 183
158 return gfx::Rect(horizontal_padding, 184 int client_x = ConstrainedWindow::kHorizontalPadding;
159 vertical_padding + header_size.height() + row_padding, 185 int client_y = ConstrainedWindow::kCloseButtonPadding + header_size.height() +
160 std::max(0, width() - 2 * horizontal_padding), 186 ConstrainedWindow::kRowPadding;
161 std::max(0, (height() - 2 * vertical_padding - 187 int client_width = std::max(0, width() - client_x -
162 header_size.height() - row_padding))); 188 ConstrainedWindow::kHorizontalPadding);
189 int client_height = std::max(0, height() - client_y -
190 ConstrainedWindow::kVerticalPadding);
191
192 return gfx::Rect(client_x, client_y, client_width, client_height);
163 } 193 }
164 194
165 gfx::Rect ConstrainedWindowFrameSimple::GetWindowBoundsForClientBounds( 195 gfx::Rect ConstrainedWindowFrameSimple::GetWindowBoundsForClientBounds(
166 const gfx::Rect& client_bounds) const { 196 const gfx::Rect& client_bounds) const {
167 int horizontal_padding = ConstrainedWindow::kHorizontalPadding;
168 int vertical_padding = ConstrainedWindow::kVerticalPadding;
169 int row_padding = ConstrainedWindow::kRowPadding;
170 gfx::Size header_size = 197 gfx::Size header_size =
171 header_views_->header ? 198 header_views_->header ?
172 header_views_->header->GetPreferredSize() : gfx::Size(); 199 header_views_->header->GetPreferredSize() : gfx::Size();
173 200
174 int x = client_bounds.x() - horizontal_padding; 201 int x = client_bounds.x() - ConstrainedWindow::kHorizontalPadding;
175 int y = client_bounds.y() - vertical_padding - header_size.height() - 202 int y = client_bounds.y() - ConstrainedWindow::kCloseButtonPadding -
176 row_padding; 203 header_size.height() - ConstrainedWindow::kRowPadding;
177 int width = client_bounds.width() + 2 * horizontal_padding; 204 int width = client_bounds.width() + ConstrainedWindow::kHorizontalPadding +
178 int height = client_bounds.height() + 2 * vertical_padding + 205 ConstrainedWindow::kCloseButtonPadding;
179 header_size.height() + row_padding; 206 int height = client_bounds.height() + ConstrainedWindow::kCloseButtonPadding +
207 header_size.height() + ConstrainedWindow::kRowPadding;
Mike Wittman 2012/10/08 21:34:19 This should also include ConstrainedWindow::kVerti
please use gerrit instead 2012/10/09 18:38:09 Done.
180 208
181 return gfx::Rect(x, y, width, height); 209 return gfx::Rect(x, y, width, height);
182 } 210 }
183 211
184 int ConstrainedWindowFrameSimple::NonClientHitTest(const gfx::Point& point) { 212 int ConstrainedWindowFrameSimple::NonClientHitTest(const gfx::Point& point) {
185 if (!bounds().Contains(point)) 213 if (!bounds().Contains(point))
186 return HTNOWHERE; 214 return HTNOWHERE;
187 return HTCLIENT; 215 return HTCLIENT;
188 } 216 }
189 217
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 256 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
229 views::ImageButton* close_button = new views::ImageButton(this); 257 views::ImageButton* close_button = new views::ImageButton(this);
230 close_button->SetImage(views::CustomButton::BS_NORMAL, 258 close_button->SetImage(views::CustomButton::BS_NORMAL,
231 rb.GetImageSkiaNamed(IDR_SHARED_IMAGES_X)); 259 rb.GetImageSkiaNamed(IDR_SHARED_IMAGES_X));
232 close_button->SetImage(views::CustomButton::BS_HOT, 260 close_button->SetImage(views::CustomButton::BS_HOT,
233 rb.GetImageSkiaNamed(IDR_SHARED_IMAGES_X_HOVER)); 261 rb.GetImageSkiaNamed(IDR_SHARED_IMAGES_X_HOVER));
234 close_button->SetImage(views::CustomButton::BS_PUSHED, 262 close_button->SetImage(views::CustomButton::BS_PUSHED,
235 rb.GetImageSkiaNamed(IDR_SHARED_IMAGES_X_HOVER)); 263 rb.GetImageSkiaNamed(IDR_SHARED_IMAGES_X_HOVER));
236 return close_button; 264 return close_button;
237 } 265 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698