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

Side by Side Diff: Source/web/WebViewImpl.h

Issue 19281007: Allow zoom-in to a target rect when tapping multiple targets. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 4 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) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 class WebSettingsImpl; 120 class WebSettingsImpl;
121 class WebTouchEvent; 121 class WebTouchEvent;
122 class WebViewBenchmarkSupport; 122 class WebViewBenchmarkSupport;
123 123
124 class WebViewImpl : public WebView 124 class WebViewImpl : public WebView
125 , public RefCounted<WebViewImpl> 125 , public RefCounted<WebViewImpl>
126 , public WebGestureCurveTarget 126 , public WebGestureCurveTarget
127 , public WebCore::PagePopupDriver 127 , public WebCore::PagePopupDriver
128 , public PageWidgetEventHandler { 128 , public PageWidgetEventHandler {
129 public: 129 public:
130 enum AutoZoomType {
131 DoubleTap,
132 FindInPage,
133 };
134 130
135 // WebWidget methods: 131 // WebWidget methods:
136 virtual void close(); 132 virtual void close();
137 virtual WebSize size(); 133 virtual WebSize size();
138 virtual void willStartLiveResize(); 134 virtual void willStartLiveResize();
139 virtual void resize(const WebSize&); 135 virtual void resize(const WebSize&);
140 virtual void willEndLiveResize(); 136 virtual void willEndLiveResize();
141 virtual void willEnterFullScreen(); 137 virtual void willEnterFullScreen();
142 virtual void didEnterFullScreen(); 138 virtual void didEnterFullScreen();
143 virtual void willExitFullScreen(); 139 virtual void willExitFullScreen();
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 virtual void clearFocusedNode(); 212 virtual void clearFocusedNode();
217 virtual void scrollFocusedNodeIntoView(); 213 virtual void scrollFocusedNodeIntoView();
218 virtual void scrollFocusedNodeIntoRect(const WebRect&); 214 virtual void scrollFocusedNodeIntoRect(const WebRect&);
219 virtual void zoomToFindInPageRect(const WebRect&); 215 virtual void zoomToFindInPageRect(const WebRect&);
220 virtual void advanceFocus(bool reverse); 216 virtual void advanceFocus(bool reverse);
221 virtual double zoomLevel(); 217 virtual double zoomLevel();
222 virtual double setZoomLevel(bool textOnly, double zoomLevel); 218 virtual double setZoomLevel(bool textOnly, double zoomLevel);
223 virtual void zoomLimitsChanged(double minimumZoomLevel, 219 virtual void zoomLimitsChanged(double minimumZoomLevel,
224 double maximumZoomLevel); 220 double maximumZoomLevel);
225 virtual void setInitialPageScaleOverride(float); 221 virtual void setInitialPageScaleOverride(float);
222 virtual bool zoomToMultipleTargetsRect(const WebRect&);
226 virtual float pageScaleFactor() const; 223 virtual float pageScaleFactor() const;
227 virtual void setPageScaleFactorPreservingScrollOffset(float); 224 virtual void setPageScaleFactorPreservingScrollOffset(float);
228 virtual void setPageScaleFactor(float scaleFactor, const WebPoint& origin); 225 virtual void setPageScaleFactor(float scaleFactor, const WebPoint& origin);
229 virtual void setPageScaleFactorLimits(float minPageScale, float maxPageScale ); 226 virtual void setPageScaleFactorLimits(float minPageScale, float maxPageScale );
230 virtual float minimumPageScaleFactor() const; 227 virtual float minimumPageScaleFactor() const;
231 virtual float maximumPageScaleFactor() const; 228 virtual float maximumPageScaleFactor() const;
232 virtual void saveScrollAndScaleState(); 229 virtual void saveScrollAndScaleState();
233 virtual void restoreScrollAndScaleState(); 230 virtual void restoreScrollAndScaleState();
234 virtual void resetScrollAndScaleState(); 231 virtual void resetScrollAndScaleState();
235 virtual void setIgnoreViewportTagScaleLimits(bool); 232 virtual void setIgnoreViewportTagScaleLimits(bool);
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 static bool mapKeyCodeForScroll(int keyCode, 514 static bool mapKeyCodeForScroll(int keyCode,
518 WebCore::ScrollDirection* scrollDirection, 515 WebCore::ScrollDirection* scrollDirection,
519 WebCore::ScrollGranularity* scrollGranularity ); 516 WebCore::ScrollGranularity* scrollGranularity );
520 517
521 // Called by a full frame plugin inside this view to inform it that its 518 // Called by a full frame plugin inside this view to inform it that its
522 // zoom level has been updated. The plugin should only call this function 519 // zoom level has been updated. The plugin should only call this function
523 // if the zoom change was triggered by the browser, it's only needed in case 520 // if the zoom change was triggered by the browser, it's only needed in case
524 // a plugin can update its own zoom, say because of its own UI. 521 // a plugin can update its own zoom, say because of its own UI.
525 void fullFramePluginZoomLevelChanged(double zoomLevel); 522 void fullFramePluginZoomLevelChanged(double zoomLevel);
526 523
527 void computeScaleAndScrollForHitRect(const WebRect& hitRect, AutoZoomType, f loat& scale, WebPoint& scroll, bool& isAnchor); 524 void computeScaleAndScrollForBlockRect(
jochen (gone - plz use gerrit) 2013/07/30 06:41:11 no need to wrap here
525 const WebRect& blockRect,
526 float padding,
527 float& scale,
528 WebPoint& scroll,
529 bool& doubleTapShouldZoomOut);
528 WebCore::Node* bestTapNode(const WebCore::PlatformGestureEvent& tapEvent); 530 WebCore::Node* bestTapNode(const WebCore::PlatformGestureEvent& tapEvent);
529 void enableTapHighlight(const WebCore::PlatformGestureEvent& tapEvent); 531 void enableTapHighlight(const WebCore::PlatformGestureEvent& tapEvent);
530 void computeScaleAndScrollForFocusedNode(WebCore::Node* focusedNode, float& scale, WebCore::IntPoint& scroll, bool& needAnimation); 532 void computeScaleAndScrollForFocusedNode(WebCore::Node* focusedNode, float& scale, WebCore::IntPoint& scroll, bool& needAnimation);
531 void animateZoomAroundPoint(const WebCore::IntPoint&, AutoZoomType);
532 533
533 void enableFakeDoubleTapAnimationForTesting(bool); 534 void animateDoubleTapZoom(const WebCore::IntPoint&);
534 bool fakeDoubleTapAnimationPendingForTesting() const { return m_doubleTapZoo mPending; } 535 bool animateZoomToRect(
jochen (gone - plz use gerrit) 2013/07/30 06:41:11 nor here
535 WebCore::IntPoint fakeDoubleTapTargetPositionForTesting() const { return m_f akeDoubleTapTargetPosition; } 536 const WebCore::IntRect&,
536 float fakeDoubleTapPageScaleFactorForTesting() const { return m_fakeDoubleTa pPageScaleFactor; } 537 double durationInSeconds,
537 bool fakeDoubleTapUseAnchorForTesting() const { return m_fakeDoubleTapUseAnc hor; } 538 bool& isAnimating,
539 float& scale);
540
541 void enableFakePageScaleAnimationForTesting(bool);
542 bool fakeDoubleTapAnimationPendingForTesting() const
jochen (gone - plz use gerrit) 2013/07/30 06:41:11 can also fit on one line (and below)
543 {
544 return m_doubleTapZoomPending;
545 }
546 WebCore::IntPoint fakePageScaleAnimationTargetPositionForTesting() const
547 {
548 return m_fakePageScaleAnimationTargetPosition;
549 }
550 float fakePageScaleAnimationPageScaleForTesting() const
551 {
552 return m_fakePageScaleAnimationPageScaleFactor;
553 }
554 bool fakePageScaleAnimationUseAnchorForTesting() const
555 {
556 return m_fakePageScaleAnimationUseAnchor;
557 }
538 558
539 void enterFullScreenForElement(WebCore::Element*); 559 void enterFullScreenForElement(WebCore::Element*);
540 void exitFullScreenForElement(WebCore::Element*); 560 void exitFullScreenForElement(WebCore::Element*);
541 561
542 // Exposed for the purpose of overriding device metrics. 562 // Exposed for the purpose of overriding device metrics.
543 void sendResizeEventAndRepaint(); 563 void sendResizeEventAndRepaint();
544 564
545 // Exposed for testing purposes. 565 // Exposed for testing purposes.
546 bool hasHorizontalScrollbar(); 566 bool hasHorizontalScrollbar();
547 bool hasVerticalScrollbar(); 567 bool hasVerticalScrollbar();
548 568
549 // Pointer Lock calls allow a page to capture all mouse events and 569 // Pointer Lock calls allow a page to capture all mouse events and
550 // disable the system cursor. 570 // disable the system cursor.
551 virtual bool requestPointerLock(); 571 virtual bool requestPointerLock();
552 virtual void requestPointerUnlock(); 572 virtual void requestPointerUnlock();
553 virtual bool isPointerLocked(); 573 virtual bool isPointerLocked();
554 574
555 // Heuristic-based function for determining if we should disable workarounds 575 // Heuristic-based function for determining if we should disable workarounds
556 // for viewing websites that are not optimized for mobile devices. 576 // for viewing websites that are not optimized for mobile devices.
557 bool shouldDisableDesktopWorkarounds(); 577 bool shouldDisableDesktopWorkarounds();
558 578
559 // Exposed for tests. 579 // Exposed for tests.
560 LinkHighlight* linkHighlight() { return m_linkHighlight.get(); } 580 LinkHighlight* linkHighlight() { return m_linkHighlight.get(); }
561 581
562 WebSettingsImpl* settingsImpl(); 582 WebSettingsImpl* settingsImpl();
563 583
584 // Returns the bounding box of the block type node touched by the WebRect.
585 WebRect computeBlockBounds(const WebRect&, bool ignoreClipping);
586
587 WebCore::IntPoint clampOffsetAtScale(
588 const WebCore::IntPoint& offset,
589 float scale);
590
564 private: 591 private:
565 void refreshPageScaleFactorAfterLayout(); 592 void refreshPageScaleFactorAfterLayout();
566 void setUserAgentPageScaleConstraints(WebCore::PageScaleConstraints newConst raints); 593 void setUserAgentPageScaleConstraints(WebCore::PageScaleConstraints newConst raints);
567 float clampPageScaleFactorToLimits(float) const; 594 float clampPageScaleFactorToLimits(float) const;
568 WebCore::IntPoint clampOffsetAtScale(const WebCore::IntPoint& offset, float scale);
569 WebCore::IntSize contentsSize() const; 595 WebCore::IntSize contentsSize() const;
570 596
571 void resetSavedScrollAndScaleState(); 597 void resetSavedScrollAndScaleState();
572 598
573 void updateMainFrameScrollPosition(const WebCore::IntPoint& scrollPosition, bool programmaticScroll); 599 void updateMainFrameScrollPosition(const WebCore::IntPoint& scrollPosition, bool programmaticScroll);
574 600
575 friend class WebView; // So WebView::Create can call our constructor 601 friend class WebView; // So WebView::Create can call our constructor
576 friend class WTF::RefCounted<WebViewImpl>; 602 friend class WTF::RefCounted<WebViewImpl>;
577 friend void setCurrentInputEventForTest(const WebInputEvent*); 603 friend void setCurrentInputEventForTest(const WebInputEvent*);
578 604
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 int keyModifiers); 645 int keyModifiers);
620 646
621 void configureAutoResizeMode(); 647 void configureAutoResizeMode();
622 648
623 void setIsAcceleratedCompositingActive(bool); 649 void setIsAcceleratedCompositingActive(bool);
624 void doComposite(); 650 void doComposite();
625 void doPixelReadbackToCanvas(WebCanvas*, const WebCore::IntRect&); 651 void doPixelReadbackToCanvas(WebCanvas*, const WebCore::IntRect&);
626 void reallocateRenderer(); 652 void reallocateRenderer();
627 void updateLayerTreeViewport(); 653 void updateLayerTreeViewport();
628 654
629 // Returns the bounding box of the block type node touched by the WebRect.
630 WebRect computeBlockBounds(const WebRect&, AutoZoomType);
631
632 // Helper function: Widens the width of |source| by the specified margins 655 // Helper function: Widens the width of |source| by the specified margins
633 // while keeping it smaller than page width. 656 // while keeping it smaller than page width.
634 WebRect widenRectWithinPageBounds(const WebRect& source, int targetMargin, i nt minimumMargin); 657 WebRect widenRectWithinPageBounds(const WebRect& source, int targetMargin, i nt minimumMargin);
635 658
636 void pointerLockMouseEvent(const WebInputEvent&); 659 void pointerLockMouseEvent(const WebInputEvent&);
637 660
638 // PageWidgetEventHandler functions 661 // PageWidgetEventHandler functions
639 virtual void handleMouseLeave(WebCore::Frame&, const WebMouseEvent&) OVERRID E; 662 virtual void handleMouseLeave(WebCore::Frame&, const WebMouseEvent&) OVERRID E;
640 virtual void handleMouseDown(WebCore::Frame&, const WebMouseEvent&) OVERRIDE ; 663 virtual void handleMouseDown(WebCore::Frame&, const WebMouseEvent&) OVERRIDE ;
641 virtual void handleMouseUp(WebCore::Frame&, const WebMouseEvent&) OVERRIDE; 664 virtual void handleMouseUp(WebCore::Frame&, const WebMouseEvent&) OVERRIDE;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 WebCore::IntSize m_savedScrollOffset; 731 WebCore::IntSize m_savedScrollOffset;
709 float m_exitFullscreenPageScaleFactor; 732 float m_exitFullscreenPageScaleFactor;
710 WebCore::IntSize m_exitFullscreenScrollOffset; 733 WebCore::IntSize m_exitFullscreenScrollOffset;
711 734
712 // The scale moved to by the latest double tap zoom, if any. 735 // The scale moved to by the latest double tap zoom, if any.
713 float m_doubleTapZoomPageScaleFactor; 736 float m_doubleTapZoomPageScaleFactor;
714 // Have we sent a double-tap zoom and not yet heard back the scale? 737 // Have we sent a double-tap zoom and not yet heard back the scale?
715 bool m_doubleTapZoomPending; 738 bool m_doubleTapZoomPending;
716 739
717 // Used for testing purposes. 740 // Used for testing purposes.
718 bool m_enableFakeDoubleTapAnimationForTesting; 741 bool m_enableFakePageScaleAnimationForTesting;
719 WebCore::IntPoint m_fakeDoubleTapTargetPosition; 742 WebCore::IntPoint m_fakePageScaleAnimationTargetPosition;
720 float m_fakeDoubleTapPageScaleFactor; 743 float m_fakePageScaleAnimationPageScaleFactor;
721 bool m_fakeDoubleTapUseAnchor; 744 bool m_fakePageScaleAnimationUseAnchor;
722 745
723 bool m_contextMenuAllowed; 746 bool m_contextMenuAllowed;
724 747
725 bool m_doingDragAndDrop; 748 bool m_doingDragAndDrop;
726 749
727 bool m_ignoreInputEvents; 750 bool m_ignoreInputEvents;
728 751
729 // Webkit expects keyPress events to be suppressed if the associated keyDown 752 // Webkit expects keyPress events to be suppressed if the associated keyDown
730 // event was handled. Safari implements this behavior by peeking out the 753 // event was handled. Safari implements this behavior by peeking out the
731 // associated WM_CHAR event if the keydown was handled. We emulate 754 // associated WM_CHAR event if the keydown was handled. We emulate
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 bool m_showFPSCounter; 855 bool m_showFPSCounter;
833 bool m_showPaintRects; 856 bool m_showPaintRects;
834 bool m_showDebugBorders; 857 bool m_showDebugBorders;
835 bool m_continuousPaintingEnabled; 858 bool m_continuousPaintingEnabled;
836 bool m_showScrollBottleneckRects; 859 bool m_showScrollBottleneckRects;
837 }; 860 };
838 861
839 } // namespace WebKit 862 } // namespace WebKit
840 863
841 #endif 864 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698