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

Side by Side Diff: third_party/WebKit/Source/platform/scroll/Scrollbar.cpp

Issue 2387883002: Use float for scroll offset. (Closed)
Patch Set: Created 4 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 /* 1 /*
2 * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 void Scrollbar::moveThumb(int pos, bool draggingDocument) { 246 void Scrollbar::moveThumb(int pos, bool draggingDocument) {
247 if (!m_scrollableArea) 247 if (!m_scrollableArea)
248 return; 248 return;
249 249
250 int delta = pos - m_pressedPos; 250 int delta = pos - m_pressedPos;
251 251
252 if (draggingDocument) { 252 if (draggingDocument) {
253 if (m_draggingDocument) 253 if (m_draggingDocument)
254 delta = pos - m_documentDragPos; 254 delta = pos - m_documentDragPos;
255 m_draggingDocument = true; 255 m_draggingDocument = true;
256 FloatPoint currentPosition = 256 ScrollOffset currentPosition =
257 m_scrollableArea->scrollAnimator().currentPosition(); 257 m_scrollableArea->scrollAnimator().currentOffset();
258 float destinationPosition = 258 float destinationPosition =
259 (m_orientation == HorizontalScrollbar ? currentPosition.x() 259 (m_orientation == HorizontalScrollbar ? currentPosition.width()
260 : currentPosition.y()) + 260 : currentPosition.height()) +
261 delta; 261 delta;
262 destinationPosition = m_scrollableArea->clampScrollPosition( 262 destinationPosition =
263 m_orientation, destinationPosition); 263 m_scrollableArea->clampScrollOffset(m_orientation, destinationPosition);
264 m_scrollableArea->setScrollPositionSingleAxis( 264 m_scrollableArea->setScrollOffsetSingleAxis(
265 m_orientation, destinationPosition, UserScroll); 265 m_orientation, destinationPosition, UserScroll);
266 m_documentDragPos = pos; 266 m_documentDragPos = pos;
267 return; 267 return;
268 } 268 }
269 269
270 if (m_draggingDocument) { 270 if (m_draggingDocument) {
271 delta += m_pressedPos - m_documentDragPos; 271 delta += m_pressedPos - m_documentDragPos;
272 m_draggingDocument = false; 272 m_draggingDocument = false;
273 } 273 }
274 274
275 // Drag the thumb. 275 // Drag the thumb.
276 int thumbPos = theme().thumbPosition(*this); 276 int thumbPos = theme().thumbPosition(*this);
277 int thumbLen = theme().thumbLength(*this); 277 int thumbLen = theme().thumbLength(*this);
278 int trackLen = theme().trackLength(*this); 278 int trackLen = theme().trackLength(*this);
279 ASSERT(thumbLen <= trackLen); 279 ASSERT(thumbLen <= trackLen);
280 if (thumbLen == trackLen) 280 if (thumbLen == trackLen)
281 return; 281 return;
282 282
283 if (delta > 0) 283 if (delta > 0)
284 delta = std::min(trackLen - thumbLen - thumbPos, delta); 284 delta = std::min(trackLen - thumbLen - thumbPos, delta);
285 else if (delta < 0) 285 else if (delta < 0)
286 delta = std::max(-thumbPos, delta); 286 delta = std::max(-thumbPos, delta);
287 287
288 float minPos = m_scrollableArea->minimumScrollPosition(m_orientation); 288 float minOffset = m_scrollableArea->minimumScrollOffset(m_orientation);
289 float maxPos = m_scrollableArea->maximumScrollPosition(m_orientation); 289 float maxOffset = m_scrollableArea->maximumScrollOffset(m_orientation);
290 if (delta) { 290 if (delta) {
291 float newPosition = static_cast<float>(thumbPos + delta) * 291 float newOffset = static_cast<float>(thumbPos + delta) *
292 (maxPos - minPos) / (trackLen - thumbLen) + 292 (maxOffset - minOffset) / (trackLen - thumbLen) +
293 minPos; 293 minOffset;
294 m_scrollableArea->setScrollPositionSingleAxis(m_orientation, newPosition, 294 m_scrollableArea->setScrollOffsetSingleAxis(m_orientation, newOffset,
295 UserScroll); 295 UserScroll);
296 } 296 }
297 } 297 }
298 298
299 void Scrollbar::setHoveredPart(ScrollbarPart part) { 299 void Scrollbar::setHoveredPart(ScrollbarPart part) {
300 if (part == m_hoveredPart) 300 if (part == m_hoveredPart)
301 return; 301 return;
302 302
303 if (((m_hoveredPart == NoPart || part == NoPart) && 303 if (((m_hoveredPart == NoPart || part == NoPart) &&
304 theme().invalidateOnMouseEnterExit()) 304 theme().invalidateOnMouseEnterExit())
305 // When there's a pressed part, we don't draw a hovered state, so there's no reason to invalidate. 305 // When there's a pressed part, we don't draw a hovered state, so there's no reason to invalidate.
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 default: 402 default:
403 // By default, we assume that gestures don't deselect the scrollbar. 403 // By default, we assume that gestures don't deselect the scrollbar.
404 return true; 404 return true;
405 } 405 }
406 } 406 }
407 407
408 void Scrollbar::mouseMoved(const PlatformMouseEvent& evt) { 408 void Scrollbar::mouseMoved(const PlatformMouseEvent& evt) {
409 if (m_pressedPart == ThumbPart) { 409 if (m_pressedPart == ThumbPart) {
410 if (theme().shouldSnapBackToDragOrigin(*this, evt)) { 410 if (theme().shouldSnapBackToDragOrigin(*this, evt)) {
411 if (m_scrollableArea) { 411 if (m_scrollableArea) {
412 m_scrollableArea->setScrollPositionSingleAxis( 412 m_scrollableArea->setScrollOffsetSingleAxis(
413 m_orientation, 413 m_orientation,
414 m_dragOrigin + 414 m_dragOrigin + m_scrollableArea->minimumScrollOffset(m_orientation),
415 m_scrollableArea->minimumScrollPosition(m_orientation),
416 UserScroll); 415 UserScroll);
417 } 416 }
418 } else { 417 } else {
419 moveThumb(m_orientation == HorizontalScrollbar 418 moveThumb(m_orientation == HorizontalScrollbar
420 ? convertFromRootFrame(evt.position()).x() 419 ? convertFromRootFrame(evt.position()).x()
421 : convertFromRootFrame(evt.position()).y(), 420 : convertFromRootFrame(evt.position()).y(),
422 theme().shouldDragDocumentInsteadOfThumb(*this, evt)); 421 theme().shouldDragDocumentInsteadOfThumb(*this, evt));
423 } 422 }
424 return; 423 return;
425 } 424 }
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 return m_scrollableArea->convertFromContainingWidgetToScrollbar( 575 return m_scrollableArea->convertFromContainingWidgetToScrollbar(
577 *this, parentPoint); 576 *this, parentPoint);
578 577
579 return Widget::convertFromContainingWidget(parentPoint); 578 return Widget::convertFromContainingWidget(parentPoint);
580 } 579 }
581 580
582 float Scrollbar::scrollableAreaCurrentPos() const { 581 float Scrollbar::scrollableAreaCurrentPos() const {
583 if (!m_scrollableArea) 582 if (!m_scrollableArea)
584 return 0; 583 return 0;
585 584
586 if (m_orientation == HorizontalScrollbar) 585 if (m_orientation == HorizontalScrollbar) {
587 return m_scrollableArea->scrollPosition().x() - 586 return m_scrollableArea->scrollOffset().width() -
588 m_scrollableArea->minimumScrollPosition().x(); 587 m_scrollableArea->minimumScrollOffset().width();
588 }
589 589
590 return m_scrollableArea->scrollPosition().y() - 590 return m_scrollableArea->scrollOffset().height() -
591 m_scrollableArea->minimumScrollPosition().y(); 591 m_scrollableArea->minimumScrollOffset().height();
592 } 592 }
593 593
594 float Scrollbar::scrollableAreaTargetPos() const { 594 float Scrollbar::scrollableAreaTargetPos() const {
595 if (!m_scrollableArea) 595 if (!m_scrollableArea)
596 return 0; 596 return 0;
597 597
598 if (m_orientation == HorizontalScrollbar) 598 if (m_orientation == HorizontalScrollbar) {
599 return m_scrollableArea->scrollAnimator().desiredTargetPosition().x() - 599 return m_scrollableArea->scrollAnimator().desiredTargetOffset().width() -
600 m_scrollableArea->minimumScrollPosition().x(); 600 m_scrollableArea->minimumScrollOffset().width();
601 }
601 602
602 return m_scrollableArea->scrollAnimator().desiredTargetPosition().y() - 603 return m_scrollableArea->scrollAnimator().desiredTargetOffset().height() -
603 m_scrollableArea->minimumScrollPosition().y(); 604 m_scrollableArea->minimumScrollOffset().height();
604 } 605 }
605 606
606 LayoutRect Scrollbar::visualRect() const { 607 LayoutRect Scrollbar::visualRect() const {
607 return m_scrollableArea ? m_scrollableArea->visualRectForScrollbarParts() 608 return m_scrollableArea ? m_scrollableArea->visualRectForScrollbarParts()
608 : LayoutRect(); 609 : LayoutRect();
609 } 610 }
610 611
611 void Scrollbar::setNeedsPaintInvalidation(ScrollbarPart invalidParts) { 612 void Scrollbar::setNeedsPaintInvalidation(ScrollbarPart invalidParts) {
612 if (m_theme.shouldRepaintAllPartsOnInvalidation()) 613 if (m_theme.shouldRepaintAllPartsOnInvalidation())
613 invalidParts = AllParts; 614 invalidParts = AllParts;
614 if (invalidParts & ~ThumbPart) 615 if (invalidParts & ~ThumbPart)
615 m_trackNeedsRepaint = true; 616 m_trackNeedsRepaint = true;
616 if (invalidParts & ThumbPart) 617 if (invalidParts & ThumbPart)
617 m_thumbNeedsRepaint = true; 618 m_thumbNeedsRepaint = true;
618 if (m_scrollableArea) 619 if (m_scrollableArea)
619 m_scrollableArea->setScrollbarNeedsPaintInvalidation(orientation()); 620 m_scrollableArea->setScrollbarNeedsPaintInvalidation(orientation());
620 } 621 }
621 622
622 } // namespace blink 623 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698