| OLD | NEW |
| 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 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 455 m_scrollableArea->mouseEnteredScrollbar(*this); | 455 m_scrollableArea->mouseEnteredScrollbar(*this); |
| 456 } | 456 } |
| 457 | 457 |
| 458 void Scrollbar::mouseExited() { | 458 void Scrollbar::mouseExited() { |
| 459 if (m_scrollableArea) | 459 if (m_scrollableArea) |
| 460 m_scrollableArea->mouseExitedScrollbar(*this); | 460 m_scrollableArea->mouseExitedScrollbar(*this); |
| 461 setHoveredPart(NoPart); | 461 setHoveredPart(NoPart); |
| 462 } | 462 } |
| 463 | 463 |
| 464 void Scrollbar::mouseUp(const PlatformMouseEvent& mouseEvent) { | 464 void Scrollbar::mouseUp(const PlatformMouseEvent& mouseEvent) { |
| 465 bool isCaptured = m_pressedPart == ThumbPart; | |
| 466 setPressedPart(NoPart); | 465 setPressedPart(NoPart); |
| 467 m_pressedPos = 0; | 466 m_pressedPos = 0; |
| 468 m_draggingDocument = false; | 467 m_draggingDocument = false; |
| 469 stopTimerIfNeeded(); | 468 stopTimerIfNeeded(); |
| 470 | 469 |
| 471 if (m_scrollableArea) { | 470 if (m_scrollableArea) { |
| 472 if (isCaptured) | |
| 473 m_scrollableArea->mouseReleasedScrollbar(); | |
| 474 | |
| 475 // m_hoveredPart won't be updated until the next mouseMoved or mouseDown, so | 471 // m_hoveredPart won't be updated until the next mouseMoved or mouseDown, so |
| 476 // we have to hit test to really know if the mouse has exited the scrollbar | 472 // we have to hit test to really know if the mouse has exited the scrollbar |
| 477 // on a mouseUp. | 473 // on a mouseUp. |
| 478 ScrollbarPart part = theme().hitTest(*this, mouseEvent.position()); | 474 ScrollbarPart part = theme().hitTest(*this, mouseEvent.position()); |
| 479 if (part == NoPart) | 475 if (part == NoPart) |
| 480 m_scrollableArea->mouseExitedScrollbar(*this); | 476 m_scrollableArea->mouseExitedScrollbar(*this); |
| 481 } | 477 } |
| 482 } | 478 } |
| 483 | 479 |
| 484 void Scrollbar::mouseDown(const PlatformMouseEvent& evt) { | 480 void Scrollbar::mouseDown(const PlatformMouseEvent& evt) { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 499 int thumbLen = theme().thumbLength(*this); | 495 int thumbLen = theme().thumbLength(*this); |
| 500 int desiredPos = pressedPos; | 496 int desiredPos = pressedPos; |
| 501 // Set the pressed position to the middle of the thumb so that when we do | 497 // Set the pressed position to the middle of the thumb so that when we do |
| 502 // the move, the delta will be from the current pixel position of the thumb | 498 // the move, the delta will be from the current pixel position of the thumb |
| 503 // to the new desired position for the thumb. | 499 // to the new desired position for the thumb. |
| 504 m_pressedPos = theme().trackPosition(*this) + theme().thumbPosition(*this) + | 500 m_pressedPos = theme().trackPosition(*this) + theme().thumbPosition(*this) + |
| 505 thumbLen / 2; | 501 thumbLen / 2; |
| 506 moveThumb(desiredPos); | 502 moveThumb(desiredPos); |
| 507 return; | 503 return; |
| 508 } | 504 } |
| 509 if (m_pressedPart == ThumbPart) { | 505 if (m_pressedPart == ThumbPart) |
| 510 m_dragOrigin = m_currentPos; | 506 m_dragOrigin = m_currentPos; |
| 511 if (m_scrollableArea) | |
| 512 m_scrollableArea->mouseCapturedScrollbar(); | |
| 513 } | |
| 514 | 507 |
| 515 m_pressedPos = pressedPos; | 508 m_pressedPos = pressedPos; |
| 516 | 509 |
| 517 autoscrollPressedPart(theme().initialAutoscrollTimerDelay()); | 510 autoscrollPressedPart(theme().initialAutoscrollTimerDelay()); |
| 518 } | 511 } |
| 519 | 512 |
| 520 void Scrollbar::setScrollbarsHidden(bool hidden) { | 513 void Scrollbar::visibilityChanged() { |
| 521 if (m_scrollableArea) | 514 if (m_scrollableArea) |
| 522 m_scrollableArea->setScrollbarsHidden(hidden); | 515 m_scrollableArea->scrollbarVisibilityChanged(); |
| 523 } | 516 } |
| 524 | 517 |
| 525 void Scrollbar::setEnabled(bool e) { | 518 void Scrollbar::setEnabled(bool e) { |
| 526 if (m_enabled == e) | 519 if (m_enabled == e) |
| 527 return; | 520 return; |
| 528 m_enabled = e; | 521 m_enabled = e; |
| 529 theme().updateEnabledState(*this); | 522 theme().updateEnabledState(*this); |
| 530 setNeedsPaintInvalidation(AllParts); | 523 setNeedsPaintInvalidation(AllParts); |
| 531 } | 524 } |
| 532 | 525 |
| 533 int Scrollbar::scrollbarThickness() const { | 526 int Scrollbar::scrollbarThickness() const { |
| 534 int thickness = orientation() == HorizontalScrollbar ? height() : width(); | 527 int thickness = orientation() == HorizontalScrollbar ? height() : width(); |
| 535 if (!thickness || !m_hostWindow) | 528 if (!thickness || !m_hostWindow) |
| 536 return thickness; | 529 return thickness; |
| 537 return m_hostWindow->windowToViewportScalar(m_themeScrollbarThickness); | 530 return m_hostWindow->windowToViewportScalar(m_themeScrollbarThickness); |
| 538 } | 531 } |
| 539 | 532 |
| 540 bool Scrollbar::isOverlayScrollbar() const { | 533 bool Scrollbar::isOverlayScrollbar() const { |
| 541 return m_theme.usesOverlayScrollbars(); | 534 return m_theme.usesOverlayScrollbars(); |
| 542 } | 535 } |
| 543 | 536 |
| 544 bool Scrollbar::shouldParticipateInHitTesting() { | 537 bool Scrollbar::shouldParticipateInHitTesting() { |
| 545 // Non-overlay scrollbars should always participate in hit testing. | 538 // Non-overlay scrollbars should always participate in hit testing. |
| 546 if (!isOverlayScrollbar()) | 539 if (!isOverlayScrollbar()) |
| 547 return true; | 540 return true; |
| 548 return !m_scrollableArea->scrollbarsHidden(); | 541 return m_scrollableArea->scrollAnimator() |
| 542 .shouldScrollbarParticipateInHitTesting(*this); |
| 549 } | 543 } |
| 550 | 544 |
| 551 bool Scrollbar::isWindowActive() const { | 545 bool Scrollbar::isWindowActive() const { |
| 552 return m_scrollableArea && m_scrollableArea->isActive(); | 546 return m_scrollableArea && m_scrollableArea->isActive(); |
| 553 } | 547 } |
| 554 | 548 |
| 555 IntRect Scrollbar::convertToContainingWidget(const IntRect& localRect) const { | 549 IntRect Scrollbar::convertToContainingWidget(const IntRect& localRect) const { |
| 556 if (m_scrollableArea) | 550 if (m_scrollableArea) |
| 557 return m_scrollableArea->convertFromScrollbarToContainingWidget(*this, | 551 return m_scrollableArea->convertFromScrollbarToContainingWidget(*this, |
| 558 localRect); | 552 localRect); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 623 invalidParts = AllParts; | 617 invalidParts = AllParts; |
| 624 if (invalidParts & ~ThumbPart) | 618 if (invalidParts & ~ThumbPart) |
| 625 m_trackNeedsRepaint = true; | 619 m_trackNeedsRepaint = true; |
| 626 if (invalidParts & ThumbPart) | 620 if (invalidParts & ThumbPart) |
| 627 m_thumbNeedsRepaint = true; | 621 m_thumbNeedsRepaint = true; |
| 628 if (m_scrollableArea) | 622 if (m_scrollableArea) |
| 629 m_scrollableArea->setScrollbarNeedsPaintInvalidation(orientation()); | 623 m_scrollableArea->setScrollbarNeedsPaintInvalidation(orientation()); |
| 630 } | 624 } |
| 631 | 625 |
| 632 } // namespace blink | 626 } // namespace blink |
| OLD | NEW |