| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/renderer_host/render_widget_host_view_views.h" | 5 #include "chrome/browser/renderer_host/render_widget_host_view_views.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "chrome/browser/renderer_host/accelerated_surface_container_touch.h" | 8 #include "chrome/browser/renderer_host/accelerated_surface_container_touch.h" |
| 9 #include "content/browser/renderer_host/render_widget_host.h" | 9 #include "content/browser/renderer_host/render_widget_host.h" |
| 10 #include "third_party/WebKit/Source/WebKit/chromium/public/gtk/WebInputEventFact
ory.h" | 10 #include "third_party/WebKit/Source/WebKit/chromium/public/gtk/WebInputEventFact
ory.h" |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 if (!host_) | 81 if (!host_) |
| 82 return ui::TOUCH_STATUS_UNKNOWN; | 82 return ui::TOUCH_STATUS_UNKNOWN; |
| 83 | 83 |
| 84 // Update the list of touch points first. | 84 // Update the list of touch points first. |
| 85 WebKit::WebTouchPoint* point = NULL; | 85 WebKit::WebTouchPoint* point = NULL; |
| 86 ui::TouchStatus status = ui::TOUCH_STATUS_UNKNOWN; | 86 ui::TouchStatus status = ui::TOUCH_STATUS_UNKNOWN; |
| 87 | 87 |
| 88 switch (event.type()) { | 88 switch (event.type()) { |
| 89 case ui::ET_TOUCH_PRESSED: | 89 case ui::ET_TOUCH_PRESSED: |
| 90 // Add a new touch point. | 90 // Add a new touch point. |
| 91 if (touch_event_.touchPointsLength < | 91 if (touch_event_.touchesLength < |
| 92 WebTouchEvent::touchPointsLengthCap) { | 92 WebTouchEvent::touchesLengthCap) { |
| 93 point = &touch_event_.touchPoints[touch_event_.touchPointsLength++]; | 93 point = &touch_event_.touches[touch_event_.touchesLength++]; |
| 94 point->id = event.identity(); | 94 point->id = event.identity(); |
| 95 | 95 |
| 96 if (touch_event_.touchPointsLength == 1) { | 96 if (touch_event_.touchesLength == 1) { |
| 97 // A new touch sequence has started. | 97 // A new touch sequence has started. |
| 98 status = ui::TOUCH_STATUS_START; | 98 status = ui::TOUCH_STATUS_START; |
| 99 | 99 |
| 100 // We also want the focus. | 100 // We also want the focus. |
| 101 RequestFocus(); | 101 RequestFocus(); |
| 102 | 102 |
| 103 // Confirm existing composition text on touch press events, to make | 103 // Confirm existing composition text on touch press events, to make |
| 104 // sure the input caret won't be moved with an ongoing composition | 104 // sure the input caret won't be moved with an ongoing composition |
| 105 // text. | 105 // text. |
| 106 FinishImeCompositionSession(); | 106 FinishImeCompositionSession(); |
| 107 } | 107 } |
| 108 } | 108 } |
| 109 break; | 109 break; |
| 110 case ui::ET_TOUCH_RELEASED: | 110 case ui::ET_TOUCH_RELEASED: |
| 111 case ui::ET_TOUCH_CANCELLED: | 111 case ui::ET_TOUCH_CANCELLED: |
| 112 case ui::ET_TOUCH_MOVED: { | 112 case ui::ET_TOUCH_MOVED: { |
| 113 // The touch point should have been added to the event from an earlier | 113 // The touch point should have been added to the event from an earlier |
| 114 // _PRESSED event. So find that. | 114 // _PRESSED event. So find that. |
| 115 // At the moment, only a maximum of 4 touch-points are allowed. So a | 115 // At the moment, only a maximum of 4 touch-points are allowed. So a |
| 116 // simple loop should be sufficient. | 116 // simple loop should be sufficient. |
| 117 for (int i = 0; i < touch_event_.touchPointsLength; ++i) { | 117 for (int i = 0; i < touch_event_.touchesLength; ++i) { |
| 118 point = touch_event_.touchPoints + i; | 118 point = touch_event_.touches + i; |
| 119 if (point->id == event.identity()) { | 119 if (point->id == event.identity()) { |
| 120 break; | 120 break; |
| 121 } | 121 } |
| 122 point = NULL; | 122 point = NULL; |
| 123 } | 123 } |
| 124 break; | 124 break; |
| 125 } | 125 } |
| 126 default: | 126 default: |
| 127 DLOG(WARNING) << "Unknown touch event " << event.type(); | 127 DLOG(WARNING) << "Unknown touch event " << event.type(); |
| 128 break; | 128 break; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 142 // It is possible for badly written touch drivers to emit Move events even | 142 // It is possible for badly written touch drivers to emit Move events even |
| 143 // when the touch location hasn't changed. In such cases, consume the event | 143 // when the touch location hasn't changed. In such cases, consume the event |
| 144 // and pretend nothing happened. | 144 // and pretend nothing happened. |
| 145 if (point->position.x == event.x() && point->position.y == event.y()) { | 145 if (point->position.x == event.x() && point->position.y == event.y()) { |
| 146 return status; | 146 return status; |
| 147 } | 147 } |
| 148 } | 148 } |
| 149 UpdateTouchPointPosition(&event, GetMirroredPosition(), point); | 149 UpdateTouchPointPosition(&event, GetMirroredPosition(), point); |
| 150 | 150 |
| 151 // Mark the rest of the points as stationary. | 151 // Mark the rest of the points as stationary. |
| 152 for (int i = 0; i < touch_event_.touchPointsLength; ++i) { | 152 for (int i = 0; i < touch_event_.touchesLength; ++i) { |
| 153 WebKit::WebTouchPoint* iter = touch_event_.touchPoints + i; | 153 WebKit::WebTouchPoint* iter = touch_event_.touches + i; |
| 154 if (iter != point) { | 154 if (iter != point) { |
| 155 iter->state = WebKit::WebTouchPoint::StateStationary; | 155 iter->state = WebKit::WebTouchPoint::StateStationary; |
| 156 } | 156 } |
| 157 } | 157 } |
| 158 | 158 |
| 159 // Update the type of the touch event. | 159 // Update the type of the touch event. |
| 160 touch_event_.type = TouchEventTypeFromEvent(&event); | 160 touch_event_.type = TouchEventTypeFromEvent(&event); |
| 161 touch_event_.timeStampSeconds = base::Time::Now().ToDoubleT(); | 161 touch_event_.timeStampSeconds = base::Time::Now().ToDoubleT(); |
| 162 | 162 |
| 163 // The event and all the touches have been updated. Dispatch. | 163 // The event and all the touches have been updated. Dispatch. |
| 164 host_->ForwardTouchEvent(touch_event_); | 164 host_->ForwardTouchEvent(touch_event_); |
| 165 | 165 |
| 166 // If the touch was released, then remove it from the list of touch points. | 166 // If the touch was released, then remove it from the list of touch points. |
| 167 if (event.type() == ui::ET_TOUCH_RELEASED) { | 167 if (event.type() == ui::ET_TOUCH_RELEASED) { |
| 168 --touch_event_.touchPointsLength; | 168 --touch_event_.touchesLength; |
| 169 for (int i = point - touch_event_.touchPoints; | 169 for (int i = point - touch_event_.touches; |
| 170 i < touch_event_.touchPointsLength; | 170 i < touch_event_.touchesLength; |
| 171 ++i) { | 171 ++i) { |
| 172 touch_event_.touchPoints[i] = touch_event_.touchPoints[i + 1]; | 172 touch_event_.touches[i] = touch_event_.touches[i + 1]; |
| 173 } | 173 } |
| 174 if (touch_event_.touchPointsLength == 0) | 174 if (touch_event_.touchesLength == 0) |
| 175 status = ui::TOUCH_STATUS_END; | 175 status = ui::TOUCH_STATUS_END; |
| 176 } else if (event.type() == ui::ET_TOUCH_CANCELLED) { | 176 } else if (event.type() == ui::ET_TOUCH_CANCELLED) { |
| 177 status = ui::TOUCH_STATUS_CANCEL; | 177 status = ui::TOUCH_STATUS_CANCEL; |
| 178 } | 178 } |
| 179 | 179 |
| 180 return status; | 180 return status; |
| 181 } | 181 } |
| 182 | 182 |
| 183 gfx::PluginWindowHandle RenderWidgetHostViewViews::GetCompositingSurface() { | 183 gfx::PluginWindowHandle RenderWidgetHostViewViews::GetCompositingSurface() { |
| 184 // On TOUCH_UI builds, the GPU process renders to an offscreen surface | 184 // On TOUCH_UI builds, the GPU process renders to an offscreen surface |
| (...skipping 12 matching lines...) Expand all Loading... |
| 197 | 197 |
| 198 void RenderWidgetHostViewViews::AcceleratedSurfaceRelease(uint64 surface_id) { | 198 void RenderWidgetHostViewViews::AcceleratedSurfaceRelease(uint64 surface_id) { |
| 199 accelerated_surface_containers_.erase(surface_id); | 199 accelerated_surface_containers_.erase(surface_id); |
| 200 } | 200 } |
| 201 | 201 |
| 202 void RenderWidgetHostViewViews::AcceleratedSurfaceBuffersSwapped( | 202 void RenderWidgetHostViewViews::AcceleratedSurfaceBuffersSwapped( |
| 203 uint64 surface_id) { | 203 uint64 surface_id) { |
| 204 SetExternalTexture(accelerated_surface_containers_[surface_id].get()); | 204 SetExternalTexture(accelerated_surface_containers_[surface_id].get()); |
| 205 glFlush(); | 205 glFlush(); |
| 206 } | 206 } |
| OLD | NEW |