| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. |
| 3 * Copyright (C) 2008 Collabora Ltd. All rights reserved. | 3 * Copyright (C) 2008 Collabora Ltd. All rights reserved. |
| 4 * Copyright (C) 2013 Google Inc. All rights reserved. | 4 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 26 */ | 26 */ |
| 27 | 27 |
| 28 #ifndef FrameViewBase_h | 28 #ifndef FrameViewBase_h |
| 29 #define FrameViewBase_h | 29 #define FrameViewBase_h |
| 30 | 30 |
| 31 #include "platform/PlatformExport.h" | 31 #include "platform/PlatformExport.h" |
| 32 #include "platform/geometry/FloatPoint.h" | 32 #include "platform/geometry/FloatPoint.h" |
| 33 #include "platform/geometry/IntRect.h" | 33 #include "platform/geometry/IntRect.h" |
| 34 #include "platform/heap/Handle.h" | 34 #include "platform/heap/Handle.h" |
| 35 #include "platform/wtf/Forward.h" | |
| 36 | 35 |
| 37 namespace blink { | 36 namespace blink { |
| 38 | 37 |
| 39 class Event; | 38 // The FrameViewBase class is the parent of Scrollbar. |
| 39 // TODO(joelhockey): Move core/paint/ScrollbarManager to platform/scroll |
| 40 // and use it to replace this class. |
| 41 class PLATFORM_EXPORT FrameViewBase : public GarbageCollectedMixin { |
| 42 public: |
| 43 FrameViewBase(){}; |
| 44 virtual ~FrameViewBase(){}; |
| 40 | 45 |
| 41 // The FrameViewBase class serves as a base class for FrameView, Scrollbar, and | 46 virtual IntPoint Location() const = 0; |
| 42 // PluginView. | |
| 43 // | |
| 44 // FrameViewBases are connected in a hierarchy, with the restriction that | |
| 45 // plugins and scrollbars are always leaves of the tree. Only FrameView can have | |
| 46 // children (and therefore the FrameViewBase class has no concept of children). | |
| 47 class PLATFORM_EXPORT FrameViewBase | |
| 48 : public GarbageCollectedFinalized<FrameViewBase> { | |
| 49 public: | |
| 50 FrameViewBase(); | |
| 51 virtual ~FrameViewBase(); | |
| 52 | |
| 53 int X() const { return FrameRect().X(); } | |
| 54 int Y() const { return FrameRect().Y(); } | |
| 55 int Width() const { return FrameRect().Width(); } | |
| 56 int Height() const { return FrameRect().Height(); } | |
| 57 IntSize Size() const { return FrameRect().Size(); } | |
| 58 IntPoint Location() const { return FrameRect().Location(); } | |
| 59 | |
| 60 virtual void SetFrameRect(const IntRect& frame_rect) { | |
| 61 frame_rect_ = frame_rect; | |
| 62 } | |
| 63 const IntRect& FrameRect() const { return frame_rect_; } | |
| 64 | |
| 65 void Resize(int w, int h) { SetFrameRect(IntRect(X(), Y(), w, h)); } | |
| 66 void Resize(const IntSize& s) { SetFrameRect(IntRect(Location(), s)); } | |
| 67 | |
| 68 bool IsSelfVisible() const { | |
| 69 return self_visible_; | |
| 70 } // Whether or not we have been explicitly marked as visible or not. | |
| 71 bool IsParentVisible() const { | |
| 72 return parent_visible_; | |
| 73 } // Whether or not our parent is visible. | |
| 74 bool IsVisible() const { | |
| 75 return self_visible_ && parent_visible_; | |
| 76 } // Whether or not we are actually visible. | |
| 77 virtual void SetParentVisible(bool visible) { parent_visible_ = visible; } | |
| 78 void SetSelfVisible(bool v) { self_visible_ = v; } | |
| 79 | 47 |
| 80 virtual bool IsFrameView() const { return false; } | 48 virtual bool IsFrameView() const { return false; } |
| 81 virtual bool IsRemoteFrameView() const { return false; } | 49 virtual bool IsRemoteFrameView() const { return false; } |
| 82 virtual bool IsPluginView() const { return false; } | |
| 83 virtual bool IsPluginContainer() const { return false; } | |
| 84 virtual bool IsScrollbar() const { return false; } | |
| 85 | 50 |
| 86 virtual void SetParent(FrameViewBase*); | 51 virtual void SetParent(FrameViewBase*) = 0; |
| 87 FrameViewBase* Parent() const { return parent_; } | 52 virtual FrameViewBase* Parent() const = 0; |
| 88 FrameViewBase* Root() const; | |
| 89 | 53 |
| 90 virtual void HandleEvent(Event*) {} | 54 // TODO(joelhockey): Remove this from FrameViewBase once FrameView children |
| 55 // use FrameOrPlugin rather than FrameViewBase. This method does not apply to |
| 56 // scrollbars. |
| 57 virtual void SetParentVisible(bool visible) {} |
| 91 | 58 |
| 92 // ConvertFromRootFrame must be in FrameViewBase rather than FrameView | 59 // ConvertFromRootFrame must be in FrameViewBase rather than FrameView |
| 93 // to be visible to Scrollbar::ConvertFromRootFrame and | 60 // to be visible to Scrollbar::ConvertFromRootFrame and |
| 94 // RemoteFrameView::UpdateRemoteViewportIntersection. The related | 61 // RemoteFrameView::UpdateRemoteViewportIntersection. The related |
| 95 // ConvertFromContainingFrameViewBase must be declared locally to be visible. | 62 // ConvertFromContainingFrameViewBase must be declared locally to be visible. |
| 96 IntRect ConvertFromRootFrame(const IntRect&) const; | 63 IntRect ConvertFromRootFrame(const IntRect& rect_in_root_frame) const { |
| 97 IntPoint ConvertFromRootFrame(const IntPoint&) const; | 64 if (const FrameViewBase* parent_frame_view_base = Parent()) { |
| 98 FloatPoint ConvertFromRootFrame(const FloatPoint&) const; | 65 IntRect parent_rect = |
| 66 parent_frame_view_base->ConvertFromRootFrame(rect_in_root_frame); |
| 67 return ConvertFromContainingFrameViewBase(parent_rect); |
| 68 } |
| 69 return rect_in_root_frame; |
| 70 } |
| 71 |
| 72 IntPoint ConvertFromRootFrame(const IntPoint& point_in_root_frame) const { |
| 73 if (const FrameViewBase* parent_frame_view_base = Parent()) { |
| 74 IntPoint parent_point = |
| 75 parent_frame_view_base->ConvertFromRootFrame(point_in_root_frame); |
| 76 return ConvertFromContainingFrameViewBase(parent_point); |
| 77 } |
| 78 return point_in_root_frame; |
| 79 } |
| 80 |
| 81 FloatPoint ConvertFromRootFrame(const FloatPoint& point_in_root_frame) const { |
| 82 // FrameViewBase / windows are required to be IntPoint aligned, but we may |
| 83 // need to convert FloatPoint values within them (eg. for event |
| 84 // co-ordinates). |
| 85 IntPoint floored_point = FlooredIntPoint(point_in_root_frame); |
| 86 FloatPoint parent_point = ConvertFromRootFrame(floored_point); |
| 87 FloatSize window_fraction = point_in_root_frame - floored_point; |
| 88 // Use linear interpolation handle any fractional value (eg. for iframes |
| 89 // subject to a transform beyond just a simple translation). |
| 90 // FIXME: Add FloatPoint variants of all co-ordinate space conversion APIs. |
| 91 if (!window_fraction.IsEmpty()) { |
| 92 const int kFactor = 1000; |
| 93 IntPoint parent_line_end = ConvertFromRootFrame( |
| 94 floored_point + RoundedIntSize(window_fraction.ScaledBy(kFactor))); |
| 95 FloatSize parent_fraction = |
| 96 (parent_line_end - parent_point).ScaledBy(1.0f / kFactor); |
| 97 parent_point.Move(parent_fraction); |
| 98 } |
| 99 return parent_point; |
| 100 } |
| 101 |
| 99 // TODO(joelhockey): Change all these to pure virtual functions | 102 // TODO(joelhockey): Change all these to pure virtual functions |
| 100 // Once RemoteFrameView no longer inherits from FrameViewBase. | 103 // Once RemoteFrameView no longer inherits from FrameViewBase. |
| 101 virtual IntRect ConvertFromContainingFrameViewBase( | 104 virtual IntRect ConvertFromContainingFrameViewBase( |
| 102 const IntRect& parent_rect) const { | 105 const IntRect& parent_rect) const { |
| 103 NOTREACHED(); | 106 NOTREACHED(); |
| 104 return parent_rect; | 107 return parent_rect; |
| 105 } | 108 } |
| 106 virtual IntPoint ConvertFromContainingFrameViewBase( | 109 virtual IntPoint ConvertFromContainingFrameViewBase( |
| 107 const IntPoint& parent_point) const { | 110 const IntPoint& parent_point) const { |
| 108 NOTREACHED(); | 111 NOTREACHED(); |
| 109 return parent_point; | 112 return parent_point; |
| 110 } | 113 } |
| 111 | 114 |
| 112 virtual void FrameRectsChanged() {} | 115 virtual void FrameRectsChanged() { NOTREACHED(); } |
| 113 | 116 |
| 114 virtual void GeometryMayHaveChanged() {} | |
| 115 | |
| 116 // Notifies this frameviewbase that it will no longer be receiving events. | |
| 117 virtual void EventListenersRemoved() {} | |
| 118 | |
| 119 DECLARE_VIRTUAL_TRACE(); | |
| 120 virtual void Dispose() {} | 117 virtual void Dispose() {} |
| 121 | |
| 122 private: | |
| 123 Member<FrameViewBase> parent_; | |
| 124 IntRect frame_rect_; | |
| 125 bool self_visible_; | |
| 126 bool parent_visible_; | |
| 127 }; | 118 }; |
| 128 | 119 |
| 129 } // namespace blink | 120 } // namespace blink |
| 130 | 121 |
| 131 #endif // FrameViewBase_h | 122 #endif // FrameViewBase_h |
| OLD | NEW |