diff options
author | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-11 14:39:18 +0000 |
---|---|---|
committer | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-11 14:39:18 +0000 |
commit | 68bd80aa66da73d9aa2fb6662592bd530ce7b7f0 (patch) | |
tree | 91ab5ce0eaaacb0dbf79fe8167189a633486058b /content | |
parent | 84534f2f224cdc018dcdae07e251b98baf5d41a3 (diff) | |
download | chromium_src-68bd80aa66da73d9aa2fb6662592bd530ce7b7f0.zip chromium_src-68bd80aa66da73d9aa2fb6662592bd530ce7b7f0.tar.gz chromium_src-68bd80aa66da73d9aa2fb6662592bd530ce7b7f0.tar.bz2 |
[Mac] Rubber-banding on Lion.
BUG=88353
TEST=On Lion, scroll past the edge of the web content area and see textured over-scroll area.
Review URL: http://codereview.chromium.org/7582009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@96387 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/renderer_host/render_widget_host.cc | 12 | ||||
-rw-r--r-- | content/browser/renderer_host/render_widget_host.h | 9 | ||||
-rw-r--r-- | content/common/view_messages.h | 5 | ||||
-rw-r--r-- | content/renderer/render_view.cc | 5 | ||||
-rw-r--r-- | content/renderer/render_view.h | 1 | ||||
-rw-r--r-- | content/renderer/render_widget.cc | 6 | ||||
-rw-r--r-- | content/renderer/render_widget.h | 3 |
7 files changed, 40 insertions, 1 deletions
diff --git a/content/browser/renderer_host/render_widget_host.cc b/content/browser/renderer_host/render_widget_host.cc index 7d4e3d6..820ab67 100644 --- a/content/browser/renderer_host/render_widget_host.cc +++ b/content/browser/renderer_host/render_widget_host.cc @@ -34,6 +34,7 @@ using base::Time; using base::TimeDelta; using base::TimeTicks; +using WebKit::WebGestureEvent; using WebKit::WebInputEvent; using WebKit::WebKeyboardEvent; using WebKit::WebMouseEvent; @@ -560,6 +561,15 @@ void RenderWidgetHost::ForwardWheelEvent( ForwardInputEvent(wheel_event, sizeof(WebMouseWheelEvent), false); } +void RenderWidgetHost::ForwardGestureEvent( + const WebKit::WebGestureEvent& gesture_event) { + TRACE_EVENT0("renderer_host", "RenderWidgetHost::ForwardWheelEvent"); + if (ignore_input_events_ || process_->ignore_input_events()) + return; + + ForwardInputEvent(gesture_event, sizeof(WebGestureEvent), false); +} + void RenderWidgetHost::ForwardKeyboardEvent( const NativeWebKeyboardEvent& key_event) { TRACE_EVENT0("renderer_host", "RenderWidgetHost::ForwardKeyboardEvent"); @@ -870,6 +880,8 @@ void RenderWidgetHost::OnMsgUpdateRect( // Update our knowledge of the RenderWidget's size. current_size_ = params.view_size; + // Update our knowledge of the RenderWidget's contents size. + contents_size_ = params.contents_size; // Update our knowledge of the RenderWidget's scroll offset. last_scroll_offset_ = params.scroll_offset; diff --git a/content/browser/renderer_host/render_widget_host.h b/content/browser/renderer_host/render_widget_host.h index 5b938b6..841ba51 100644 --- a/content/browser/renderer_host/render_widget_host.h +++ b/content/browser/renderer_host/render_widget_host.h @@ -260,6 +260,7 @@ class RenderWidgetHost : public IPC::Channel::Listener, // Called when a mouse click activates the renderer. virtual void OnMouseActivate(); void ForwardWheelEvent(const WebKit::WebMouseWheelEvent& wheel_event); + void ForwardGestureEvent(const WebKit::WebGestureEvent& gesture_event); virtual void ForwardKeyboardEvent(const NativeWebKeyboardEvent& key_event); virtual void ForwardTouchEvent(const WebKit::WebTouchEvent& touch_event); @@ -366,6 +367,7 @@ class RenderWidgetHost : public IPC::Channel::Listener, void ActivateDeferredPluginHandles(); const gfx::Point& last_scroll_offset() const { return last_scroll_offset_; } + const gfx::Size& contents_size() const { return contents_size_; } // Notification that the user has made some kind of input that could // perform an action. See OnUserGesture for more details. @@ -550,6 +552,13 @@ class RenderWidgetHost : public IPC::Channel::Listener, // The current size of the RenderWidget. gfx::Size current_size_; + // The size of the underlying contents, including parts that are not visible + // due to scrolling. It can be used to calculate the view port bounds using + // |last_scroll_offset_|. Note: This size is not always available. In + // particular, it is only available for RenderViews after a paint has taken + // place. Additionally, it only available on the Mac. + gfx::Size contents_size_; + // The current reserved area of the RenderWidget where contents should not be // rendered to draw the resize corner, sidebar mini tabs etc. gfx::Rect current_reserved_rect_; diff --git a/content/common/view_messages.h b/content/common/view_messages.h index 481f5b9..eca2d1a 100644 --- a/content/common/view_messages.h +++ b/content/common/view_messages.h @@ -627,6 +627,9 @@ IPC_STRUCT_BEGIN(ViewHostMsg_UpdateRect_Params) // progress. IPC_STRUCT_MEMBER(gfx::Size, view_size) + // The size of the web content area. + IPC_STRUCT_MEMBER(gfx::Size, contents_size) + // The area of the RenderView reserved for resize corner when this message // was generated. Reported for the same reason as view_size is. IPC_STRUCT_MEMBER(gfx::Rect, resizer_rect) @@ -646,7 +649,7 @@ IPC_STRUCT_BEGIN(ViewHostMsg_UpdateRect_Params) // ViewHostMsg_UpdateRect_Flags::IS_REPAINT_ACK // Indicates that this is a response to a ViewMsg_Repaint message. // - // If flags is zero, then this message corresponds to an unsoliticed paint + // If flags is zero, then this message corresponds to an unsolicited paint // request by the render view. Any of the above bits may be set in flags, // which would indicate that this paint message is an ACK for multiple // request messages. diff --git a/content/renderer/render_view.cc b/content/renderer/render_view.cc index dd31fb7..a09f732 100644 --- a/content/renderer/render_view.cc +++ b/content/renderer/render_view.cc @@ -3944,6 +3944,11 @@ gfx::Point RenderView::GetScrollOffset() { return gfx::Point(scroll_offset.width, scroll_offset.height); } +gfx::Size RenderView::GetContentsSize() { + WebSize bounds = webview()->mainFrame()->contentsSize(); + return gfx::Size(bounds.width, bounds.height); +} + void RenderView::OnClearFocusedNode() { if (webview()) webview()->clearFocusedNode(); diff --git a/content/renderer/render_view.h b/content/renderer/render_view.h index 3b95206..b34322c 100644 --- a/content/renderer/render_view.h +++ b/content/renderer/render_view.h @@ -624,6 +624,7 @@ class RenderView : public RenderWidget, gfx::Rect* location, gfx::Rect* clip); virtual gfx::Point GetScrollOffset(); + virtual gfx::Size GetContentsSize(); virtual void DidHandleKeyEvent(); virtual void DidHandleMouseEvent(const WebKit::WebMouseEvent& event); virtual void OnSetFocus(bool enable); diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index 761a993..bd09fe6 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc @@ -831,6 +831,7 @@ void RenderWidget::DoDeferredUpdate() { params.plugin_window_moves.swap(plugin_window_moves_); params.flags = next_paint_flags_; params.scroll_offset = GetScrollOffset(); + params.contents_size = GetContentsSize(); update_reply_pending_ = true; Send(new ViewHostMsg_UpdateRect(routing_id_, params)); @@ -1248,6 +1249,11 @@ gfx::Point RenderWidget::GetScrollOffset() { return gfx::Point(0, 0); } +gfx::Size RenderWidget::GetContentsSize() { + // Bare RenderWidgets don't support contents size. + return gfx::Size(0, 0); +} + void RenderWidget::SetHidden(bool hidden) { if (is_hidden_ == hidden) return; diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h index 3bad78a..360dd68 100644 --- a/content/renderer/render_widget.h +++ b/content/renderer/render_widget.h @@ -250,6 +250,9 @@ class RenderWidget : public IPC::Channel::Listener, // scroll offset. virtual gfx::Point GetScrollOffset(); + // Gets the dimensions of the content area. + virtual gfx::Size GetContentsSize(); + // Sets the "hidden" state of this widget. All accesses to is_hidden_ should // use this method so that we can properly inform the RenderThread of our // state. |