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

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

Issue 2387883002: Use float for scroll offset. (Closed)
Patch Set: Fix README.md 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 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 void Scrollbar::moveThumb(int pos, bool draggingDocument) { 247 void Scrollbar::moveThumb(int pos, bool draggingDocument) {
248 if (!m_scrollableArea) 248 if (!m_scrollableArea)
249 return; 249 return;
250 250
251 int delta = pos - m_pressedPos; 251 int delta = pos - m_pressedPos;
252 252
253 if (draggingDocument) { 253 if (draggingDocument) {
254 if (m_draggingDocument) 254 if (m_draggingDocument)
255 delta = pos - m_documentDragPos; 255 delta = pos - m_documentDragPos;
256 m_draggingDocument = true; 256 m_draggingDocument = true;
257 FloatPoint currentPosition = 257 ScrollOffset currentPosition =
258 m_scrollableArea->scrollAnimator().currentPosition(); 258 m_scrollableArea->scrollAnimator().currentOffset();
259 float destinationPosition = 259 float destinationPosition =
260 (m_orientation == HorizontalScrollbar ? currentPosition.x() 260 (m_orientation == HorizontalScrollbar ? currentPosition.width()
261 : currentPosition.y()) + 261 : currentPosition.height()) +
262 delta; 262 delta;
263 destinationPosition = m_scrollableArea->clampScrollPosition( 263 destinationPosition =
264 m_orientation, destinationPosition); 264 m_scrollableArea->clampScrollOffset(m_orientation, destinationPosition);
265 m_scrollableArea->setScrollPositionSingleAxis( 265 m_scrollableArea->setScrollOffsetSingleAxis(
266 m_orientation, destinationPosition, UserScroll); 266 m_orientation, destinationPosition, UserScroll);
267 m_documentDragPos = pos; 267 m_documentDragPos = pos;
268 return; 268 return;
269 } 269 }
270 270
271 if (m_draggingDocument) { 271 if (m_draggingDocument) {
272 delta += m_pressedPos - m_documentDragPos; 272 delta += m_pressedPos - m_documentDragPos;
273 m_draggingDocument = false; 273 m_draggingDocument = false;
274 } 274 }
275 275
276 // Drag the thumb. 276 // Drag the thumb.
277 int thumbPos = theme().thumbPosition(*this); 277 int thumbPos = theme().thumbPosition(*this);
278 int thumbLen = theme().thumbLength(*this); 278 int thumbLen = theme().thumbLength(*this);
279 int trackLen = theme().trackLength(*this); 279 int trackLen = theme().trackLength(*this);
280 ASSERT(thumbLen <= trackLen); 280 ASSERT(thumbLen <= trackLen);
281 if (thumbLen == trackLen) 281 if (thumbLen == trackLen)
282 return; 282 return;
283 283
284 if (delta > 0) 284 if (delta > 0)
285 delta = std::min(trackLen - thumbLen - thumbPos, delta); 285 delta = std::min(trackLen - thumbLen - thumbPos, delta);
286 else if (delta < 0) 286 else if (delta < 0)
287 delta = std::max(-thumbPos, delta); 287 delta = std::max(-thumbPos, delta);
288 288
289 float minPos = m_scrollableArea->minimumScrollPosition(m_orientation); 289 float minOffset = m_scrollableArea->minimumScrollOffset(m_orientation);
290 float maxPos = m_scrollableArea->maximumScrollPosition(m_orientation); 290 float maxOffset = m_scrollableArea->maximumScrollOffset(m_orientation);
291 if (delta) { 291 if (delta) {
292 float newPosition = static_cast<float>(thumbPos + delta) * 292 float newOffset = static_cast<float>(thumbPos + delta) *
293 (maxPos - minPos) / (trackLen - thumbLen) + 293 (maxOffset - minOffset) / (trackLen - thumbLen) +
294 minPos; 294 minOffset;
295 m_scrollableArea->setScrollPositionSingleAxis(m_orientation, newPosition, 295 m_scrollableArea->setScrollOffsetSingleAxis(m_orientation, newOffset,
296 UserScroll); 296 UserScroll);
297 } 297 }
298 } 298 }
299 299
300 void Scrollbar::setHoveredPart(ScrollbarPart part) { 300 void Scrollbar::setHoveredPart(ScrollbarPart part) {
301 if (part == m_hoveredPart) 301 if (part == m_hoveredPart)
302 return; 302 return;
303 303
304 if (((m_hoveredPart == NoPart || part == NoPart) && 304 if (((m_hoveredPart == NoPart || part == NoPart) &&
305 theme().invalidateOnMouseEnterExit()) 305 theme().invalidateOnMouseEnterExit())
306 // When there's a pressed part, we don't draw a hovered state, so there's 306 // When there's a pressed part, we don't draw a hovered state, so there's
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 default: 405 default:
406 // By default, we assume that gestures don't deselect the scrollbar. 406 // By default, we assume that gestures don't deselect the scrollbar.
407 return true; 407 return true;
408 } 408 }
409 } 409 }
410 410
411 void Scrollbar::mouseMoved(const PlatformMouseEvent& evt) { 411 void Scrollbar::mouseMoved(const PlatformMouseEvent& evt) {
412 if (m_pressedPart == ThumbPart) { 412 if (m_pressedPart == ThumbPart) {
413 if (theme().shouldSnapBackToDragOrigin(*this, evt)) { 413 if (theme().shouldSnapBackToDragOrigin(*this, evt)) {
414 if (m_scrollableArea) { 414 if (m_scrollableArea) {
415 m_scrollableArea->setScrollPositionSingleAxis( 415 m_scrollableArea->setScrollOffsetSingleAxis(
416 m_orientation, 416 m_orientation,
417 m_dragOrigin + 417 m_dragOrigin + m_scrollableArea->minimumScrollOffset(m_orientation),
418 m_scrollableArea->minimumScrollPosition(m_orientation),
419 UserScroll); 418 UserScroll);
420 } 419 }
421 } else { 420 } else {
422 moveThumb(m_orientation == HorizontalScrollbar 421 moveThumb(m_orientation == HorizontalScrollbar
423 ? convertFromRootFrame(evt.position()).x() 422 ? convertFromRootFrame(evt.position()).x()
424 : convertFromRootFrame(evt.position()).y(), 423 : convertFromRootFrame(evt.position()).y(),
425 theme().shouldDragDocumentInsteadOfThumb(*this, evt)); 424 theme().shouldDragDocumentInsteadOfThumb(*this, evt));
426 } 425 }
427 return; 426 return;
428 } 427 }
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 return m_scrollableArea->convertFromContainingWidgetToScrollbar( 580 return m_scrollableArea->convertFromContainingWidgetToScrollbar(
582 *this, parentPoint); 581 *this, parentPoint);
583 582
584 return Widget::convertFromContainingWidget(parentPoint); 583 return Widget::convertFromContainingWidget(parentPoint);
585 } 584 }
586 585
587 float Scrollbar::scrollableAreaCurrentPos() const { 586 float Scrollbar::scrollableAreaCurrentPos() const {
588 if (!m_scrollableArea) 587 if (!m_scrollableArea)
589 return 0; 588 return 0;
590 589
591 if (m_orientation == HorizontalScrollbar) 590 if (m_orientation == HorizontalScrollbar) {
592 return m_scrollableArea->scrollPosition().x() - 591 return m_scrollableArea->scrollOffset().width() -
593 m_scrollableArea->minimumScrollPosition().x(); 592 m_scrollableArea->minimumScrollOffset().width();
593 }
594 594
595 return m_scrollableArea->scrollPosition().y() - 595 return m_scrollableArea->scrollOffset().height() -
596 m_scrollableArea->minimumScrollPosition().y(); 596 m_scrollableArea->minimumScrollOffset().height();
597 } 597 }
598 598
599 float Scrollbar::scrollableAreaTargetPos() const { 599 float Scrollbar::scrollableAreaTargetPos() const {
600 if (!m_scrollableArea) 600 if (!m_scrollableArea)
601 return 0; 601 return 0;
602 602
603 if (m_orientation == HorizontalScrollbar) 603 if (m_orientation == HorizontalScrollbar) {
604 return m_scrollableArea->scrollAnimator().desiredTargetPosition().x() - 604 return m_scrollableArea->scrollAnimator().desiredTargetOffset().width() -
605 m_scrollableArea->minimumScrollPosition().x(); 605 m_scrollableArea->minimumScrollOffset().width();
606 }
606 607
607 return m_scrollableArea->scrollAnimator().desiredTargetPosition().y() - 608 return m_scrollableArea->scrollAnimator().desiredTargetOffset().height() -
608 m_scrollableArea->minimumScrollPosition().y(); 609 m_scrollableArea->minimumScrollOffset().height();
609 } 610 }
610 611
611 LayoutRect Scrollbar::visualRect() const { 612 LayoutRect Scrollbar::visualRect() const {
612 return m_scrollableArea ? m_scrollableArea->visualRectForScrollbarParts() 613 return m_scrollableArea ? m_scrollableArea->visualRectForScrollbarParts()
613 : LayoutRect(); 614 : LayoutRect();
614 } 615 }
615 616
616 void Scrollbar::setNeedsPaintInvalidation(ScrollbarPart invalidParts) { 617 void Scrollbar::setNeedsPaintInvalidation(ScrollbarPart invalidParts) {
617 if (m_theme.shouldRepaintAllPartsOnInvalidation()) 618 if (m_theme.shouldRepaintAllPartsOnInvalidation())
618 invalidParts = AllParts; 619 invalidParts = AllParts;
619 if (invalidParts & ~ThumbPart) 620 if (invalidParts & ~ThumbPart)
620 m_trackNeedsRepaint = true; 621 m_trackNeedsRepaint = true;
621 if (invalidParts & ThumbPart) 622 if (invalidParts & ThumbPart)
622 m_thumbNeedsRepaint = true; 623 m_thumbNeedsRepaint = true;
623 if (m_scrollableArea) 624 if (m_scrollableArea)
624 m_scrollableArea->setScrollbarNeedsPaintInvalidation(orientation()); 625 m_scrollableArea->setScrollbarNeedsPaintInvalidation(orientation());
625 } 626 }
626 627
627 } // namespace blink 628 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698