| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 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 13 matching lines...) Expand all Loading... |
| 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 #ifndef PinchViewport_h | 31 #ifndef PinchViewport_h |
| 32 #define PinchViewport_h | 32 #define PinchViewport_h |
| 33 | 33 |
| 34 #include "platform/geometry/FloatPoint.h" |
| 35 #include "platform/geometry/FloatRect.h" |
| 34 #include "platform/geometry/IntSize.h" | 36 #include "platform/geometry/IntSize.h" |
| 35 #include "platform/graphics/GraphicsLayerClient.h" | 37 #include "platform/graphics/GraphicsLayerClient.h" |
| 36 #include "platform/scroll/ScrollableArea.h" | 38 #include "platform/scroll/ScrollableArea.h" |
| 37 #include "public/platform/WebScrollbar.h" | 39 #include "public/platform/WebScrollbar.h" |
| 38 #include "public/platform/WebSize.h" | 40 #include "public/platform/WebSize.h" |
| 39 #include "wtf/OwnPtr.h" | 41 #include "wtf/OwnPtr.h" |
| 40 #include "wtf/PassOwnPtr.h" | 42 #include "wtf/PassOwnPtr.h" |
| 41 | 43 |
| 42 namespace blink { | 44 namespace blink { |
| 43 class WebLayerTreeView; | 45 class WebLayerTreeView; |
| 44 class WebScrollbarLayer; | 46 class WebScrollbarLayer; |
| 45 } | 47 } |
| 46 | 48 |
| 47 namespace WebCore { | 49 namespace WebCore { |
| 48 | 50 |
| 49 class FrameHost; | 51 class FrameHost; |
| 50 class GraphicsContext; | 52 class GraphicsContext; |
| 51 class GraphicsLayer; | 53 class GraphicsLayer; |
| 52 class GraphicsLayerFactory; | 54 class GraphicsLayerFactory; |
| 53 class IntRect; | 55 class IntRect; |
| 54 class IntSize; | 56 class IntSize; |
| 57 class LocalFrame; |
| 55 | 58 |
| 59 // Represents the pinch-to-zoom viewport the user is currently seeing the page t
hrough. This |
| 60 // class corresponds to the InnerViewport on the compositor. It is a ScrollableA
rea; it's |
| 61 // offset is set through the GraphicsLayer <-> CC sync mechanisms. Its contents
is the page's |
| 62 // main FrameView, which corresponds to the outer viewport. The inner viewport i
s always contained |
| 63 // in the outer viewport and can pan within it. |
| 56 class PinchViewport FINAL : public GraphicsLayerClient, public ScrollableArea { | 64 class PinchViewport FINAL : public GraphicsLayerClient, public ScrollableArea { |
| 57 public: | 65 public: |
| 58 PinchViewport(FrameHost&); | 66 PinchViewport(FrameHost&); |
| 59 virtual ~PinchViewport(); | 67 virtual ~PinchViewport(); |
| 60 | 68 |
| 61 void attachToLayerTree(GraphicsLayer*, GraphicsLayerFactory*); | 69 void attachToLayerTree(GraphicsLayer*, GraphicsLayerFactory*); |
| 62 GraphicsLayer* rootGraphicsLayer() | 70 GraphicsLayer* rootGraphicsLayer() |
| 63 { | 71 { |
| 64 return m_innerViewportContainerLayer.get(); | 72 return m_innerViewportContainerLayer.get(); |
| 65 } | 73 } |
| 66 | 74 |
| 67 void setLocation(const IntPoint&); | 75 void setLocation(const IntPoint&); |
| 68 void setSize(const IntSize&); | 76 void mainFrameDidChangeSize(); |
| 77 |
| 78 void setScale(float scale) { m_scale = scale; } |
| 79 float scale() const { return m_scale; } |
| 69 | 80 |
| 70 void registerLayersWithTreeView(blink::WebLayerTreeView*) const; | 81 void registerLayersWithTreeView(blink::WebLayerTreeView*) const; |
| 71 void clearLayersForTreeView(blink::WebLayerTreeView*) const; | 82 void clearLayersForTreeView(blink::WebLayerTreeView*) const; |
| 72 | 83 |
| 73 IntRect visibleRect() const { return m_visibleRect; } | 84 // The portion of the unzoomed frame visible in the inner "pinch" viewport,
in partial CSS pixels. |
| 85 FloatRect visibleRect() const; |
| 74 private: | 86 private: |
| 75 // ScrollableArea implementation | 87 // ScrollableArea implementation |
| 76 virtual bool isActive() const OVERRIDE { return false; } | 88 virtual bool isActive() const OVERRIDE { return false; } |
| 77 virtual int scrollSize(ScrollbarOrientation) const OVERRIDE; | 89 virtual int scrollSize(ScrollbarOrientation) const OVERRIDE; |
| 78 virtual bool isScrollCornerVisible() const OVERRIDE { return false; } | 90 virtual bool isScrollCornerVisible() const OVERRIDE { return false; } |
| 79 virtual IntRect scrollCornerRect() const OVERRIDE { return IntRect(); } | 91 virtual IntRect scrollCornerRect() const OVERRIDE { return IntRect(); } |
| 80 virtual IntPoint scrollPosition() const OVERRIDE { return visibleRect().loca
tion(); } | 92 virtual IntPoint scrollPosition() const OVERRIDE { return flooredIntPoint(m_
offset); } |
| 81 virtual IntPoint minimumScrollPosition() const OVERRIDE; | 93 virtual IntPoint minimumScrollPosition() const OVERRIDE; |
| 82 virtual IntPoint maximumScrollPosition() const OVERRIDE; | 94 virtual IntPoint maximumScrollPosition() const OVERRIDE; |
| 83 virtual int visibleHeight() const OVERRIDE { return visibleRect().height();
}; | 95 virtual int visibleHeight() const OVERRIDE { return visibleRect().height();
}; |
| 84 virtual int visibleWidth() const OVERRIDE { return visibleRect().width(); }; | 96 virtual int visibleWidth() const OVERRIDE { return visibleRect().width(); }; |
| 85 virtual IntSize contentsSize() const OVERRIDE; | 97 virtual IntSize contentsSize() const OVERRIDE; |
| 86 virtual bool scrollbarsCanBeActive() const OVERRIDE { return false; } | 98 virtual bool scrollbarsCanBeActive() const OVERRIDE { return false; } |
| 87 virtual IntRect scrollableAreaBoundingBox() const OVERRIDE; | 99 virtual IntRect scrollableAreaBoundingBox() const OVERRIDE; |
| 88 virtual bool userInputScrollable(ScrollbarOrientation) const OVERRIDE { retu
rn true; } | 100 virtual bool userInputScrollable(ScrollbarOrientation) const OVERRIDE { retu
rn true; } |
| 89 virtual bool shouldPlaceVerticalScrollbarOnLeft() const OVERRIDE { return fa
lse; } | 101 virtual bool shouldPlaceVerticalScrollbarOnLeft() const OVERRIDE { return fa
lse; } |
| 90 virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) OVERRIDE; | 102 virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) OVERRIDE; |
| 91 virtual void invalidateScrollCornerRect(const IntRect&) OVERRIDE { } | 103 virtual void invalidateScrollCornerRect(const IntRect&) OVERRIDE { } |
| 92 virtual void setScrollOffset(const IntPoint&) OVERRIDE; | 104 virtual void setScrollOffset(const IntPoint&) OVERRIDE; |
| 93 virtual GraphicsLayer* layerForContainer() const OVERRIDE; | 105 virtual GraphicsLayer* layerForContainer() const OVERRIDE; |
| 94 virtual GraphicsLayer* layerForScrolling() const OVERRIDE; | 106 virtual GraphicsLayer* layerForScrolling() const OVERRIDE; |
| 95 virtual GraphicsLayer* layerForHorizontalScrollbar() const OVERRIDE; | 107 virtual GraphicsLayer* layerForHorizontalScrollbar() const OVERRIDE; |
| 96 virtual GraphicsLayer* layerForVerticalScrollbar() const OVERRIDE; | 108 virtual GraphicsLayer* layerForVerticalScrollbar() const OVERRIDE; |
| 97 | 109 |
| 98 // GraphicsLayerClient implementation. | 110 // GraphicsLayerClient implementation. |
| 99 virtual void notifyAnimationStarted(const GraphicsLayer*, double monotonicTi
me) OVERRIDE; | 111 virtual void notifyAnimationStarted(const GraphicsLayer*, double monotonicTi
me) OVERRIDE; |
| 100 virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsL
ayerPaintingPhase, const IntRect& inClip) OVERRIDE; | 112 virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsL
ayerPaintingPhase, const IntRect& inClip) OVERRIDE; |
| 101 virtual String debugName(const GraphicsLayer*) OVERRIDE; | 113 virtual String debugName(const GraphicsLayer*) OVERRIDE; |
| 102 | 114 |
| 103 void setupScrollbar(blink::WebScrollbar::Orientation); | 115 void setupScrollbar(blink::WebScrollbar::Orientation); |
| 116 FloatPoint clampOffsetToBoundaries(const FloatPoint&); |
| 117 |
| 118 LocalFrame* mainFrame() const; |
| 104 | 119 |
| 105 FrameHost& m_frameHost; | 120 FrameHost& m_frameHost; |
| 106 OwnPtr<GraphicsLayer> m_innerViewportContainerLayer; | 121 OwnPtr<GraphicsLayer> m_innerViewportContainerLayer; |
| 107 OwnPtr<GraphicsLayer> m_pageScaleLayer; | 122 OwnPtr<GraphicsLayer> m_pageScaleLayer; |
| 108 OwnPtr<GraphicsLayer> m_innerViewportScrollLayer; | 123 OwnPtr<GraphicsLayer> m_innerViewportScrollLayer; |
| 109 OwnPtr<GraphicsLayer> m_overlayScrollbarHorizontal; | 124 OwnPtr<GraphicsLayer> m_overlayScrollbarHorizontal; |
| 110 OwnPtr<GraphicsLayer> m_overlayScrollbarVertical; | 125 OwnPtr<GraphicsLayer> m_overlayScrollbarVertical; |
| 111 OwnPtr<blink::WebScrollbarLayer> m_webOverlayScrollbarHorizontal; | 126 OwnPtr<blink::WebScrollbarLayer> m_webOverlayScrollbarHorizontal; |
| 112 OwnPtr<blink::WebScrollbarLayer> m_webOverlayScrollbarVertical; | 127 OwnPtr<blink::WebScrollbarLayer> m_webOverlayScrollbarVertical; |
| 113 | 128 |
| 114 IntRect m_visibleRect; | 129 // Offset of the pinch viewport from the main frame's origin, in CSS pixels. |
| 130 FloatPoint m_offset; |
| 131 float m_scale; |
| 115 }; | 132 }; |
| 116 | 133 |
| 117 } // namespace WebCore | 134 } // namespace WebCore |
| 118 | 135 |
| 119 #endif // PinchViewport_h | 136 #endif // PinchViewport_h |
| OLD | NEW |