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

Side by Side Diff: views/controls/scroll_view.cc

Issue 7057014: Variety of tweaks to View API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 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 | « views/controls/native_control.cc ('k') | views/controls/scrollbar/bitmap_scroll_bar.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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "views/controls/scroll_view.h" 5 #include "views/controls/scroll_view.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "views/controls/scrollbar/native_scroll_bar.h" 8 #include "views/controls/scrollbar/native_scroll_bar.h"
9 #include "views/widget/root_view.h" 9 #include "views/widget/root_view.h"
10 10
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 vert_sb_->SetController(this); 96 vert_sb_->SetController(this);
97 if (resize_corner_) 97 if (resize_corner_)
98 resize_corner_->SetVisible(false); 98 resize_corner_->SetVisible(false);
99 } 99 }
100 100
101 // Make sure that a single scrollbar is created and visible as needed 101 // Make sure that a single scrollbar is created and visible as needed
102 void ScrollView::SetControlVisibility(View* control, bool should_show) { 102 void ScrollView::SetControlVisibility(View* control, bool should_show) {
103 if (!control) 103 if (!control)
104 return; 104 return;
105 if (should_show) { 105 if (should_show) {
106 if (!control->IsVisible()) { 106 if (!control->visible()) {
107 AddChildView(control); 107 AddChildView(control);
108 control->SetVisible(true); 108 control->SetVisible(true);
109 } 109 }
110 } else { 110 } else {
111 RemoveChildView(control); 111 RemoveChildView(control);
112 control->SetVisible(false); 112 control->SetVisible(false);
113 } 113 }
114 } 114 }
115 115
116 void ScrollView::ComputeScrollBarsVisibility(const gfx::Size& vp_size, 116 void ScrollView::ComputeScrollBarsVisibility(const gfx::Size& vp_size,
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 // This is no op if bounds are the same 251 // This is no op if bounds are the same
252 contents_->SetBounds(-x, -y, contents_->width(), contents_->height()); 252 contents_->SetBounds(-x, -y, contents_->width(), contents_->height());
253 } 253 }
254 } 254 }
255 255
256 gfx::Rect ScrollView::GetVisibleRect() const { 256 gfx::Rect ScrollView::GetVisibleRect() const {
257 if (!contents_) 257 if (!contents_)
258 return gfx::Rect(); 258 return gfx::Rect();
259 259
260 const int x = 260 const int x =
261 (horiz_sb_ && horiz_sb_->IsVisible()) ? horiz_sb_->GetPosition() : 0; 261 (horiz_sb_ && horiz_sb_->visible()) ? horiz_sb_->GetPosition() : 0;
262 const int y = 262 const int y =
263 (vert_sb_ && vert_sb_->IsVisible()) ? vert_sb_->GetPosition() : 0; 263 (vert_sb_ && vert_sb_->visible()) ? vert_sb_->GetPosition() : 0;
264 return gfx::Rect(x, y, viewport_->width(), viewport_->height()); 264 return gfx::Rect(x, y, viewport_->width(), viewport_->height());
265 } 265 }
266 266
267 void ScrollView::ScrollContentsRegionToBeVisible(const gfx::Rect& rect) { 267 void ScrollView::ScrollContentsRegionToBeVisible(const gfx::Rect& rect) {
268 if (!contents_ || ((!horiz_sb_ || !horiz_sb_->IsVisible()) && 268 if (!contents_ || ((!horiz_sb_ || !horiz_sb_->visible()) &&
269 (!vert_sb_ || !vert_sb_->IsVisible()))) { 269 (!vert_sb_ || !vert_sb_->visible()))) {
270 return; 270 return;
271 } 271 }
272 272
273 // Figure out the maximums for this scroll view. 273 // Figure out the maximums for this scroll view.
274 const int contents_max_x = 274 const int contents_max_x =
275 std::max(viewport_->width(), contents_->width()); 275 std::max(viewport_->width(), contents_->width());
276 const int contents_max_y = 276 const int contents_max_y =
277 std::max(viewport_->height(), contents_->height()); 277 std::max(viewport_->height(), contents_->height());
278 278
279 // Make sure x and y are within the bounds of [0,contents_max_*]. 279 // Make sure x and y are within the bounds of [0,contents_max_*].
(...skipping 29 matching lines...) Expand all
309 contents_->SetX(-new_x); 309 contents_->SetX(-new_x);
310 contents_->SetY(-new_y); 310 contents_->SetY(-new_y);
311 UpdateScrollBarPositions(); 311 UpdateScrollBarPositions();
312 } 312 }
313 313
314 void ScrollView::UpdateScrollBarPositions() { 314 void ScrollView::UpdateScrollBarPositions() {
315 if (!contents_) { 315 if (!contents_) {
316 return; 316 return;
317 } 317 }
318 318
319 if (horiz_sb_->IsVisible()) { 319 if (horiz_sb_->visible()) {
320 int vw = viewport_->width(); 320 int vw = viewport_->width();
321 int cw = contents_->width(); 321 int cw = contents_->width();
322 int origin = contents_->x(); 322 int origin = contents_->x();
323 horiz_sb_->Update(vw, cw, -origin); 323 horiz_sb_->Update(vw, cw, -origin);
324 } 324 }
325 if (vert_sb_->IsVisible()) { 325 if (vert_sb_->visible()) {
326 int vh = viewport_->height(); 326 int vh = viewport_->height();
327 int ch = contents_->height(); 327 int ch = contents_->height();
328 int origin = contents_->y(); 328 int origin = contents_->y();
329 vert_sb_->Update(vh, ch, -origin); 329 vert_sb_->Update(vh, ch, -origin);
330 } 330 }
331 } 331 }
332 332
333 // TODO(ACW): We should really use ScrollWindowEx as needed 333 // TODO(ACW): We should really use ScrollWindowEx as needed
334 void ScrollView::ScrollToPosition(ScrollBar* source, int position) { 334 void ScrollView::ScrollToPosition(ScrollBar* source, int position) {
335 if (!contents_) 335 if (!contents_)
336 return; 336 return;
337 337
338 if (source == horiz_sb_ && horiz_sb_->IsVisible()) { 338 if (source == horiz_sb_ && horiz_sb_->visible()) {
339 int vw = viewport_->width(); 339 int vw = viewport_->width();
340 int cw = contents_->width(); 340 int cw = contents_->width();
341 int origin = contents_->x(); 341 int origin = contents_->x();
342 if (-origin != position) { 342 if (-origin != position) {
343 int max_pos = std::max(0, cw - vw); 343 int max_pos = std::max(0, cw - vw);
344 if (position < 0) 344 if (position < 0)
345 position = 0; 345 position = 0;
346 else if (position > max_pos) 346 else if (position > max_pos)
347 position = max_pos; 347 position = max_pos;
348 contents_->SetX(-position); 348 contents_->SetX(-position);
349 contents_->SchedulePaintInRect(contents_->GetVisibleBounds()); 349 contents_->SchedulePaintInRect(contents_->GetVisibleBounds());
350 } 350 }
351 } else if (source == vert_sb_ && vert_sb_->IsVisible()) { 351 } else if (source == vert_sb_ && vert_sb_->visible()) {
352 int vh = viewport_->height(); 352 int vh = viewport_->height();
353 int ch = contents_->height(); 353 int ch = contents_->height();
354 int origin = contents_->y(); 354 int origin = contents_->y();
355 if (-origin != position) { 355 if (-origin != position) {
356 int max_pos = std::max(0, ch - vh); 356 int max_pos = std::max(0, ch - vh);
357 if (position < 0) 357 if (position < 0)
358 position = 0; 358 position = 0;
359 else if (position > max_pos) 359 else if (position > max_pos)
360 position = max_pos; 360 position = max_pos;
361 contents_->SetY(-position); 361 contents_->SetY(-position);
(...skipping 18 matching lines...) Expand all
380 // No view, or the view didn't return a valid amount. 380 // No view, or the view didn't return a valid amount.
381 if (is_page) 381 if (is_page)
382 return is_horizontal ? viewport_->width() : viewport_->height(); 382 return is_horizontal ? viewport_->width() : viewport_->height();
383 return is_horizontal ? viewport_->width() / 5 : viewport_->height() / 5; 383 return is_horizontal ? viewport_->width() / 5 : viewport_->height() / 5;
384 } 384 }
385 385
386 bool ScrollView::OnKeyPressed(const KeyEvent& event) { 386 bool ScrollView::OnKeyPressed(const KeyEvent& event) {
387 bool processed = false; 387 bool processed = false;
388 388
389 // Give vertical scrollbar priority 389 // Give vertical scrollbar priority
390 if (vert_sb_->IsVisible()) { 390 if (vert_sb_->visible()) {
391 processed = vert_sb_->OnKeyPressed(event); 391 processed = vert_sb_->OnKeyPressed(event);
392 } 392 }
393 393
394 if (!processed && horiz_sb_->IsVisible()) { 394 if (!processed && horiz_sb_->visible()) {
395 processed = horiz_sb_->OnKeyPressed(event); 395 processed = horiz_sb_->OnKeyPressed(event);
396 } 396 }
397 return processed; 397 return processed;
398 } 398 }
399 399
400 bool ScrollView::OnMouseWheel(const MouseWheelEvent& e) { 400 bool ScrollView::OnMouseWheel(const MouseWheelEvent& e) {
401 bool processed = false; 401 bool processed = false;
402 // Give vertical scrollbar priority 402 // Give vertical scrollbar priority
403 if (vert_sb_->IsVisible()) { 403 if (vert_sb_->visible()) {
404 processed = vert_sb_->OnMouseWheel(e); 404 processed = vert_sb_->OnMouseWheel(e);
405 } 405 }
406 if (!processed && horiz_sb_->IsVisible()) { 406 if (!processed && horiz_sb_->visible()) {
407 processed = horiz_sb_->OnMouseWheel(e); 407 processed = horiz_sb_->OnMouseWheel(e);
408 } 408 }
409 return processed; 409 return processed;
410 } 410 }
411 411
412 std::string ScrollView::GetClassName() const { 412 std::string ScrollView::GetClassName() const {
413 return kViewClassName; 413 return kViewClassName;
414 } 414 }
415 415
416 int ScrollView::GetScrollBarWidth() const { 416 int ScrollView::GetScrollBarWidth() const {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 488
489 VariableRowHeightScrollHelper::RowInfo 489 VariableRowHeightScrollHelper::RowInfo
490 FixedRowHeightScrollHelper::GetRowInfo(int y) { 490 FixedRowHeightScrollHelper::GetRowInfo(int y) {
491 if (y < top_margin_) 491 if (y < top_margin_)
492 return RowInfo(0, top_margin_); 492 return RowInfo(0, top_margin_);
493 return RowInfo((y - top_margin_) / row_height_ * row_height_ + top_margin_, 493 return RowInfo((y - top_margin_) / row_height_ * row_height_ + top_margin_,
494 row_height_); 494 row_height_);
495 } 495 }
496 496
497 } // namespace views 497 } // namespace views
OLDNEW
« no previous file with comments | « views/controls/native_control.cc ('k') | views/controls/scrollbar/bitmap_scroll_bar.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698