Mouse event handling and keyboard event handling (not totally working yet)
This commit is contained in:
parent
e4c01f3187
commit
c59c0bd5b3
9 changed files with 330 additions and 3 deletions
|
@ -9,6 +9,8 @@
|
|||
#include <vector>
|
||||
|
||||
#include "content/public/browser/render_widget_host_view_frame_subscriber.h"
|
||||
#include "content/public/browser/native_web_keyboard_event.h"
|
||||
#include "third_party/WebKit/public/web/WebInputEvent.h"
|
||||
#include "media/base/video_frame.h"
|
||||
#include "media/base/yuv_convert.h"
|
||||
#include "atom/browser/atom_browser_context.h"
|
||||
|
@ -547,10 +549,69 @@ void NativeWindow::DevToolsClosed() {
|
|||
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnDevToolsClosed());
|
||||
}
|
||||
|
||||
void NativeWindow::RenderViewReady(){
|
||||
if(offscreen_){
|
||||
const auto view = web_contents()->GetRenderWidgetHostView();
|
||||
void NativeWindow::SendKeyboardEvent(blink::WebInputEvent::Type type, int modifiers, int keycode){
|
||||
auto keyb_event = new content::NativeWebKeyboardEvent;
|
||||
|
||||
keyb_event->nativeKeyCode = keycode;
|
||||
keyb_event->windowsKeyCode = keycode;
|
||||
keyb_event->setKeyIdentifierFromWindowsKeyCode();
|
||||
keyb_event->type = type;
|
||||
keyb_event->modifiers = modifiers;
|
||||
keyb_event->isSystemKey = false;
|
||||
keyb_event->timeStampSeconds = base::Time::Now().ToDoubleT();
|
||||
keyb_event->skip_in_browser = false;
|
||||
|
||||
if (type == blink::WebInputEvent::Char || type == blink::WebInputEvent::KeyDown) {
|
||||
keyb_event->text[0] = keycode;
|
||||
keyb_event->unmodifiedText[0] = keycode;
|
||||
}
|
||||
|
||||
const auto view = web_contents()->GetRenderWidgetHostView();
|
||||
const auto host = view ? view->GetRenderWidgetHost() : nullptr;
|
||||
host->ForwardKeyboardEvent(*keyb_event);
|
||||
}
|
||||
|
||||
void NativeWindow::SendMouseEvent(blink::WebInputEvent::Type type, int modifiers, blink::WebMouseEvent::Button button, int x, int y, int movementX, int movementY, int clickCount){
|
||||
auto mouse_event = new blink::WebMouseEvent();
|
||||
|
||||
mouse_event->x = x;
|
||||
mouse_event->y = y;
|
||||
mouse_event->windowX = x;
|
||||
mouse_event->windowY = y;
|
||||
mouse_event->clickCount = clickCount;
|
||||
mouse_event->type = type;
|
||||
mouse_event->modifiers = modifiers;
|
||||
mouse_event->button = button;
|
||||
|
||||
mouse_event->timeStampSeconds = base::Time::Now().ToDoubleT();
|
||||
|
||||
const auto view = web_contents()->GetRenderWidgetHostView();
|
||||
const auto host = view ? view->GetRenderWidgetHost() : nullptr;
|
||||
host->ForwardMouseEvent(*mouse_event);
|
||||
}
|
||||
|
||||
void NativeWindow::SendMouseWheelEvent(int modifiers, int x, int y, bool precise){
|
||||
auto wheel_event = new blink::WebMouseWheelEvent();
|
||||
|
||||
wheel_event->type = blink::WebInputEvent::MouseWheel;
|
||||
wheel_event->deltaX = x;
|
||||
wheel_event->deltaY = y;
|
||||
if(x) wheel_event->wheelTicksX = x > 0.0f ? 1.0f : -1.0f;
|
||||
if(y) wheel_event->wheelTicksY = y > 0.0f ? 1.0f : -1.0f;
|
||||
wheel_event->modifiers = modifiers;
|
||||
wheel_event->hasPreciseScrollingDeltas = precise;
|
||||
wheel_event->canScroll = true;
|
||||
|
||||
const auto view = web_contents()->GetRenderWidgetHostView();
|
||||
const auto host = view ? view->GetRenderWidgetHost() : nullptr;
|
||||
host->ForwardWheelEvent(*wheel_event);
|
||||
}
|
||||
|
||||
void NativeWindow::DidFinishLoad(content::RenderFrameHost* render_frame_host, const GURL& validated_url) {
|
||||
const auto view = web_contents()->GetRenderWidgetHostView();
|
||||
const auto host = view ? view->GetRenderWidgetHost() : nullptr;
|
||||
|
||||
if(offscreen_){
|
||||
scoped_ptr<content::RenderWidgetHostViewFrameSubscriber> subscriber(new RenderSubscriber(
|
||||
view->GetVisibleViewportSize(), base::Bind(&NativeWindow::OnFrameReceived, base::Unretained(this))
|
||||
));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue