Index: chrome/browser/renderer_host/render_widget_host_view_views.cc |
=================================================================== |
--- chrome/browser/renderer_host/render_widget_host_view_views.cc (revision 89890) |
+++ chrome/browser/renderer_host/render_widget_host_view_views.cc (working copy) |
@@ -22,42 +22,24 @@ |
#include "content/common/view_messages.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/gtk/WebInputEventFactory.h" |
-#include "ui/base/keycodes/keyboard_code_conversion_gtk.h" |
#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/x/x11_util.h" |
#include "ui/gfx/canvas.h" |
#include "ui/gfx/canvas_skia.h" |
-#include "ui/gfx/gtk_native_view_id_manager.h" |
#include "views/events/event.h" |
#include "views/ime/input_method.h" |
-#include "views/widget/native_widget_gtk.h" |
#include "views/widget/widget.h" |
static const int kMaxWindowWidth = 4000; |
static const int kMaxWindowHeight = 4000; |
-static const char kRenderWidgetHostViewKey[] = "__RENDER_WIDGET_HOST_VIEW__"; |
-// Copied from third_party/WebKit/Source/WebCore/page/EventHandler.cpp |
-// |
-// Match key code of composition keydown event on windows. |
-// IE sends VK_PROCESSKEY which has value 229; |
-// |
-// Please refer to following documents for detals: |
-// - Virtual-Key Codes |
-// http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx |
-// - How the IME System Works |
-// http://msdn.microsoft.com/en-us/library/cc194848.aspx |
-// - ImmGetVirtualKey Function |
-// http://msdn.microsoft.com/en-us/library/dd318570(VS.85).aspx |
-static const int kCompositionEventKeyCode = 229; |
+// static |
+const char RenderWidgetHostViewViews::kViewClassName[] = |
+ "browser/renderer_host/RenderWidgetHostViewViews"; |
using WebKit::WebInputEventFactory; |
using WebKit::WebMouseWheelEvent; |
using WebKit::WebTouchEvent; |
-const char RenderWidgetHostViewViews::kViewClassName[] = |
- "browser/renderer_host/RenderWidgetHostViewViews"; |
- |
namespace { |
int WebInputEventFlagsFromViewsEvent(const views::Event& event) { |
@@ -75,56 +57,6 @@ |
return modifiers; |
} |
-WebKit::WebTouchPoint::State TouchPointStateFromEvent( |
- const views::TouchEvent* event) { |
- switch (event->type()) { |
- case ui::ET_TOUCH_PRESSED: |
- return WebKit::WebTouchPoint::StatePressed; |
- case ui::ET_TOUCH_RELEASED: |
- return WebKit::WebTouchPoint::StateReleased; |
- case ui::ET_TOUCH_MOVED: |
- return WebKit::WebTouchPoint::StateMoved; |
- case ui::ET_TOUCH_CANCELLED: |
- return WebKit::WebTouchPoint::StateCancelled; |
- default: |
- return WebKit::WebTouchPoint::StateUndefined; |
- } |
-} |
- |
-WebKit::WebInputEvent::Type TouchEventTypeFromEvent( |
- const views::TouchEvent* event) { |
- switch (event->type()) { |
- case ui::ET_TOUCH_PRESSED: |
- return WebKit::WebInputEvent::TouchStart; |
- case ui::ET_TOUCH_RELEASED: |
- return WebKit::WebInputEvent::TouchEnd; |
- case ui::ET_TOUCH_MOVED: |
- return WebKit::WebInputEvent::TouchMove; |
- case ui::ET_TOUCH_CANCELLED: |
- return WebKit::WebInputEvent::TouchCancel; |
- default: |
- return WebKit::WebInputEvent::Undefined; |
- } |
-} |
- |
-inline void UpdateTouchParams(const views::TouchEvent& event, |
- WebKit::WebTouchPoint* tpoint) { |
- tpoint->radiusX = event.radius_x(); |
- tpoint->radiusY = event.radius_y(); |
- tpoint->rotationAngle = event.rotation_angle(); |
- tpoint->force = event.force(); |
-} |
- |
-void UpdateTouchPointPosition(const views::TouchEvent* event, |
- const gfx::Point& origin, |
- WebKit::WebTouchPoint* tpoint) { |
- tpoint->position.x = event->x(); |
- tpoint->position.y = event->y(); |
- |
- tpoint->screenPosition.x = tpoint->position.x + origin.x(); |
- tpoint->screenPosition.y = tpoint->position.y + origin.y(); |
-} |
- |
void InitializeWebMouseEventFromViewsEvent(const views::LocatedEvent& event, |
const gfx::Point& origin, |
WebKit::WebMouseEvent* wmevent) { |
@@ -139,12 +71,6 @@ |
} // namespace |
-// static |
-RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget( |
- RenderWidgetHost* widget) { |
- return new RenderWidgetHostViewViews(widget); |
-} |
- |
RenderWidgetHostViewViews::RenderWidgetHostViewViews(RenderWidgetHost* host) |
: host_(host), |
about_to_validate_and_paint_(false), |
@@ -276,24 +202,13 @@ |
return bounds(); |
} |
-void RenderWidgetHostViewViews::UpdateCursor(const WebCursor& cursor) { |
- // Optimize the common case, where the cursor hasn't changed. |
- // However, we can switch between different pixmaps, so only on the |
- // non-pixmap branch. |
- if (current_cursor_.GetCursorType() != GDK_CURSOR_IS_PIXMAP && |
- current_cursor_.GetCursorType() == cursor.GetCursorType()) { |
- return; |
- } |
- |
- current_cursor_ = cursor; |
- ShowCurrentCursor(); |
-} |
- |
void RenderWidgetHostViewViews::SetIsLoading(bool is_loading) { |
is_loading_ = is_loading; |
+#if defined(TOOLKIT_USES_GTK) |
// Only call ShowCurrentCursor() when it will actually change the cursor. |
if (current_cursor_.GetCursorType() == GDK_LAST_CURSOR) |
ShowCurrentCursor(); |
+#endif // TOOLKIT_USES_GTK |
} |
void RenderWidgetHostViewViews::ImeUpdateTextInputState( |
@@ -404,16 +319,6 @@ |
host_->Send(new ViewMsg_SetBackground(host_->routing_id(), background)); |
} |
-void RenderWidgetHostViewViews::CreatePluginContainer( |
- gfx::PluginWindowHandle id) { |
- // TODO(anicolao): plugin_container_manager_.CreatePluginContainer(id); |
-} |
- |
-void RenderWidgetHostViewViews::DestroyPluginContainer( |
- gfx::PluginWindowHandle id) { |
- // TODO(anicolao): plugin_container_manager_.DestroyPluginContainer(id); |
-} |
- |
void RenderWidgetHostViewViews::SetVisuallyDeemphasized( |
const SkColor* color, bool animate) { |
// TODO(anicolao) |
@@ -423,37 +328,10 @@ |
gfx::NativeView native_view) const { |
// TODO(port) |
NOTREACHED() << |
- "RenderWidgetHostViewViews::ContainsNativeView not implemented."; |
+ "RenderWidgetHostViewViews::ContainsNativeView not implemented."; |
return false; |
} |
-void RenderWidgetHostViewViews::AcceleratedCompositingActivated( |
- bool activated) { |
- // TODO(anicolao): figure out if we need something here |
- if (activated) |
- NOTIMPLEMENTED(); |
-} |
- |
-gfx::PluginWindowHandle RenderWidgetHostViewViews::GetCompositingSurface() { |
- GtkNativeViewManager* manager = GtkNativeViewManager::GetInstance(); |
- gfx::PluginWindowHandle surface = gfx::kNullPluginWindow; |
- gfx::NativeViewId view_id = gfx::IdFromNativeView(GetInnerNativeView()); |
- |
- if (!manager->GetXIDForId(&surface, view_id)) { |
- DLOG(ERROR) << "Can't find XID for view id " << view_id; |
- } |
- return surface; |
-} |
- |
-gfx::NativeView RenderWidgetHostViewViews::GetInnerNativeView() const { |
- // TODO(sad): Ideally this function should be equivalent to GetNativeView, and |
- // NativeWidgetGtk-specific function call should not be necessary. |
- const views::Widget* widget = GetWidget(); |
- const views::NativeWidget* native = widget ? widget->native_widget() : NULL; |
- return native ? static_cast<const views::NativeWidgetGtk*>(native)-> |
- window_contents() : NULL; |
-} |
- |
std::string RenderWidgetHostViewViews::GetClassName() const { |
return kViewClassName; |
} |
@@ -517,110 +395,6 @@ |
// Already generated synthetically by webkit. |
} |
-ui::TouchStatus RenderWidgetHostViewViews::OnTouchEvent( |
- const views::TouchEvent& event) { |
- if (!host_) |
- return ui::TOUCH_STATUS_UNKNOWN; |
- |
- // Update the list of touch points first. |
- WebKit::WebTouchPoint* point = NULL; |
- ui::TouchStatus status = ui::TOUCH_STATUS_UNKNOWN; |
- |
- switch (event.type()) { |
- case ui::ET_TOUCH_PRESSED: |
- // Add a new touch point. |
- if (touch_event_.touchPointsLength < |
- WebTouchEvent::touchPointsLengthCap) { |
- point = &touch_event_.touchPoints[touch_event_.touchPointsLength++]; |
- point->id = event.identity(); |
- |
- if (touch_event_.touchPointsLength == 1) { |
- // A new touch sequence has started. |
- status = ui::TOUCH_STATUS_START; |
- |
- // We also want the focus. |
- RequestFocus(); |
- |
- // Confirm existing composition text on touch press events, to make |
- // sure the input caret won't be moved with an ongoing composition |
- // text. |
- FinishImeCompositionSession(); |
- } |
- } |
- break; |
- case ui::ET_TOUCH_RELEASED: |
- case ui::ET_TOUCH_CANCELLED: |
- case ui::ET_TOUCH_MOVED: { |
- // The touch point should have been added to the event from an earlier |
- // _PRESSED event. So find that. |
- // At the moment, only a maximum of 4 touch-points are allowed. So a |
- // simple loop should be sufficient. |
- for (int i = 0; i < touch_event_.touchPointsLength; ++i) { |
- point = touch_event_.touchPoints + i; |
- if (point->id == event.identity()) { |
- break; |
- } |
- point = NULL; |
- } |
- break; |
- } |
- default: |
- DLOG(WARNING) << "Unknown touch event " << event.type(); |
- break; |
- } |
- |
- if (!point) |
- return ui::TOUCH_STATUS_UNKNOWN; |
- |
- if (status != ui::TOUCH_STATUS_START) |
- status = ui::TOUCH_STATUS_CONTINUE; |
- |
- UpdateTouchParams(event, point); |
- |
- // Update the location and state of the point. |
- point->state = TouchPointStateFromEvent(&event); |
- if (point->state == WebKit::WebTouchPoint::StateMoved) { |
- // It is possible for badly written touch drivers to emit Move events even |
- // when the touch location hasn't changed. In such cases, consume the event |
- // and pretend nothing happened. |
- if (point->position.x == event.x() && point->position.y == event.y()) { |
- return status; |
- } |
- } |
- UpdateTouchPointPosition(&event, GetMirroredPosition(), point); |
- |
- // Mark the rest of the points as stationary. |
- for (int i = 0; i < touch_event_.touchPointsLength; ++i) { |
- WebKit::WebTouchPoint* iter = touch_event_.touchPoints + i; |
- if (iter != point) { |
- iter->state = WebKit::WebTouchPoint::StateStationary; |
- } |
- } |
- |
- // Update the type of the touch event. |
- touch_event_.type = TouchEventTypeFromEvent(&event); |
- touch_event_.timeStampSeconds = base::Time::Now().ToDoubleT(); |
- |
- // The event and all the touches have been updated. Dispatch. |
- host_->ForwardTouchEvent(touch_event_); |
- |
- // If the touch was released, then remove it from the list of touch points. |
- if (event.type() == ui::ET_TOUCH_RELEASED) { |
- --touch_event_.touchPointsLength; |
- for (int i = point - touch_event_.touchPoints; |
- i < touch_event_.touchPointsLength; |
- ++i) { |
- touch_event_.touchPoints[i] = touch_event_.touchPoints[i + 1]; |
- } |
- if (touch_event_.touchPointsLength == 0) |
- status = ui::TOUCH_STATUS_END; |
- } else if (event.type() == ui::ET_TOUCH_CANCELLED) { |
- status = ui::TOUCH_STATUS_CANCEL; |
- } |
- |
- return status; |
-} |
- |
bool RenderWidgetHostViewViews::OnKeyPressed(const views::KeyEvent& event) { |
// TODO(suzhe): Support editor key bindings. |
if (!host_) |
@@ -807,7 +581,9 @@ |
if (host_->is_accelerated_compositing_active()) |
return; |
+#if defined(TOOLKIT_USES_GTK) |
GdkWindow* window = GetInnerNativeView()->window; |
+#endif |
DCHECK(!about_to_validate_and_paint_); |
// TODO(anicolao): get the damage somehow |
@@ -825,10 +601,12 @@ |
paint_rect = paint_rect.Intersect(invalid_rect_); |
if (backing_store) { |
+#if defined(TOOLKIT_USES_GTK) |
// Only render the widget if it is attached to a window; there's a short |
// period where this object isn't attached to a window but hasn't been |
// Destroy()ed yet and it receives paint messages... |
if (window) { |
+#endif |
if (!visually_deemphasized_) { |
// In the common case, use XCopyArea. We don't draw more than once, so |
// we don't need to double buffer. |
@@ -843,7 +621,9 @@ |
// TODO(sad) |
NOTIMPLEMENTED(); |
} |
+#if defined(TOOLKIT_USES_GTK) |
} |
+#endif |
if (!whiteout_start_time_.is_null()) { |
base::TimeDelta whiteout_duration = base::TimeTicks::Now() - |
whiteout_start_time_; |
@@ -909,15 +689,6 @@ |
return popup_type_ != WebKit::WebPopupTypeNone; |
} |
-void RenderWidgetHostViewViews::ShowCurrentCursor() { |
- // The widget may not have a window. If that's the case, abort mission. This |
- // is the same issue as that explained above in Paint(). |
- if (!GetInnerNativeView() || !GetInnerNativeView()->window) |
- return; |
- |
- native_cursor_ = current_cursor_.GetNativeCursor(); |
-} |
- |
WebKit::WebMouseEvent RenderWidgetHostViewViews::WebMouseEventFromViewsEvent( |
const views::MouseEvent& event) { |
WebKit::WebMouseEvent wmevent; |
@@ -950,12 +721,3 @@ |
GetInputMethod()->CancelComposition(this); |
has_composition_text_ = false; |
} |
- |
-// static |
-RenderWidgetHostView* |
- RenderWidgetHostView::GetRenderWidgetHostViewFromNativeView( |
- gfx::NativeView widget) { |
- gpointer user_data = g_object_get_data(G_OBJECT(widget), |
- kRenderWidgetHostViewKey); |
- return reinterpret_cast<RenderWidgetHostView*>(user_data); |
-} |