Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
liujiuri
engine
提交
e8d046e9
E
engine
项目概览
liujiuri
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e8d046e9
编写于
10月 11, 2016
作者:
A
Adam Barth
提交者:
GitHub
10月 11, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add support for Mozart input events (#3114)
上级
e8f57e74
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
61 addition
and
3 deletion
+61
-3
content_handler/BUILD.gn
content_handler/BUILD.gn
+1
-0
content_handler/rasterizer.cc
content_handler/rasterizer.cc
+1
-0
content_handler/runtime_holder.cc
content_handler/runtime_holder.cc
+49
-2
content_handler/runtime_holder.h
content_handler/runtime_holder.h
+10
-1
未找到文件。
content_handler/BUILD.gn
浏览文件 @
e8d046e9
...
...
@@ -23,6 +23,7 @@ executable("content_handler") {
deps = [
"//apps/mozart/services/composition/interfaces",
"//apps/mozart/services/input/interfaces",
"//apps/mozart/services/views/interfaces",
"//dart/runtime:libdart",
"//dart/runtime/vm:libdart_platform",
...
...
content_handler/rasterizer.cc
浏览文件 @
e8d046e9
...
...
@@ -58,6 +58,7 @@ void Rasterizer::Draw(std::unique_ptr<flow::LayerTree> layer_tree,
update
->
resources
.
insert
(
kContentImageResourceId
,
content_resource
.
Pass
());
auto
root_node
=
mozart
::
Node
::
New
();
root_node
->
hit_test_behavior
=
mozart
::
HitTestBehavior
::
New
();
root_node
->
op
=
mozart
::
NodeOp
::
New
();
root_node
->
op
->
set_image
(
mozart
::
ImageNodeOp
::
New
());
root_node
->
op
->
get_image
()
->
content_rect
=
bounds
.
Clone
();
...
...
content_handler/runtime_holder.cc
浏览文件 @
e8d046e9
...
...
@@ -10,6 +10,7 @@
#include "flutter/common/threads.h"
#include "flutter/content_handler/rasterizer.h"
#include "flutter/lib/ui/mojo_services.h"
#include "flutter/lib/ui/window/pointer_data_packet.h"
#include "flutter/runtime/asset_font_selector.h"
#include "flutter/runtime/dart_controller.h"
#include "flutter/services/engine/sky_engine.mojom.h"
...
...
@@ -32,11 +33,27 @@ constexpr int kMaxPipelineDepth = 3;
// to recover before acknowleding the invalidation and scheduling more frames.
constexpr
int
kRecoveryPipelineDepth
=
1
;
blink
::
PointerData
::
Change
GetChangeFromEventType
(
mozart
::
EventType
type
)
{
switch
(
type
)
{
case
mozart
::
EventType
::
POINTER_CANCEL
:
return
blink
::
PointerData
::
Change
::
kCancel
;
case
mozart
::
EventType
::
POINTER_DOWN
:
return
blink
::
PointerData
::
Change
::
kDown
;
case
mozart
::
EventType
::
POINTER_MOVE
:
return
blink
::
PointerData
::
Change
::
kMove
;
case
mozart
::
EventType
::
POINTER_UP
:
return
blink
::
PointerData
::
Change
::
kUp
;
default:
return
blink
::
PointerData
::
Change
::
kCancel
;
}
}
}
// namespace
RuntimeHolder
::
RuntimeHolder
()
:
viewport_metrics_
(
sky
::
ViewportMetrics
::
New
()),
view_listener_binding_
(
this
),
input_listener_binding_
(
this
),
weak_factory_
(
this
)
{}
RuntimeHolder
::~
RuntimeHolder
()
{
...
...
@@ -79,6 +96,15 @@ void RuntimeHolder::CreateView(
std
::
move
(
view_owner_request
),
std
::
move
(
view_listener
),
script_uri
);
mojo
::
ServiceProviderPtr
view_services
;
view_
->
GetServiceProvider
(
GetProxy
(
&
view_services
));
// Listen for input events.
mojo
::
ConnectToService
(
view_services
.
get
(),
GetProxy
(
&
input_connection_
));
mozart
::
InputListenerPtr
input_listener
;
input_listener_binding_
.
Bind
(
GetProxy
(
&
input_listener
));
input_connection_
->
SetListener
(
std
::
move
(
input_listener
));
mozart
::
ScenePtr
scene
;
view_
->
CreateScene
(
mojo
::
GetProxy
(
&
scene
));
blink
::
Threads
::
Gpu
()
->
PostTask
(
ftl
::
MakeCopyable
([
...
...
@@ -148,6 +174,26 @@ blink::UnzipperProvider RuntimeHolder::GetUnzipperProviderForRootBundle() {
};
}
void
RuntimeHolder
::
OnEvent
(
mozart
::
EventPtr
event
,
const
OnEventCallback
&
callback
)
{
bool
handled
=
false
;
if
(
event
->
pointer_data
)
{
blink
::
PointerData
pointer_data
;
pointer_data
.
time_stamp
=
event
->
time_stamp
;
pointer_data
.
pointer
=
event
->
pointer_data
->
pointer_id
;
pointer_data
.
change
=
GetChangeFromEventType
(
event
->
action
);
pointer_data
.
kind
=
blink
::
PointerData
::
DeviceKind
::
kTouch
;
pointer_data
.
physical_x
=
event
->
pointer_data
->
x
;
pointer_data
.
physical_y
=
event
->
pointer_data
->
y
;
blink
::
PointerDataPacket
packet
(
1
);
packet
.
SetPointerData
(
0
,
pointer_data
);
runtime_
->
DispatchPointerDataPacket
(
packet
);
handled
=
true
;
}
callback
.
Run
(
handled
);
}
void
RuntimeHolder
::
OnInvalidation
(
mozart
::
ViewInvalidationPtr
invalidation
,
const
OnInvalidationCallback
&
callback
)
{
FTL_DCHECK
(
invalidation
);
...
...
@@ -160,8 +206,9 @@ void RuntimeHolder::OnInvalidation(mozart::ViewInvalidationPtr invalidation,
view_properties_
->
view_layout
->
size
->
width
;
viewport_metrics_
->
physical_height
=
view_properties_
->
view_layout
->
size
->
height
;
viewport_metrics_
->
device_pixel_ratio
=
view_properties_
->
display_metrics
->
device_pixel_ratio
;
viewport_metrics_
->
device_pixel_ratio
=
2.0
;
// TODO(abarth): Use view_properties_->display_metrics->device_pixel_ratio
// once that's reasonable.
runtime_
->
SetViewportMetrics
(
viewport_metrics_
);
}
...
...
content_handler/runtime_holder.h
浏览文件 @
e8d046e9
...
...
@@ -5,6 +5,7 @@
#ifndef FLUTTER_CONTENT_HANDLER_RUNTIME_HOLDER_H_
#define FLUTTER_CONTENT_HANDLER_RUNTIME_HOLDER_H_
#include "apps/mozart/services/input/interfaces/input_connection.mojom.h"
#include "apps/mozart/services/views/interfaces/view_manager.mojom.h"
#include "flutter/assets/unzipper_provider.h"
#include "flutter/assets/zip_asset_store.h"
...
...
@@ -22,7 +23,9 @@
namespace
flutter_content_handler
{
class
Rasterizer
;
class
RuntimeHolder
:
public
blink
::
RuntimeDelegate
,
mozart
::
ViewListener
{
class
RuntimeHolder
:
public
blink
::
RuntimeDelegate
,
public
mozart
::
ViewListener
,
public
mozart
::
InputListener
{
public:
RuntimeHolder
();
~
RuntimeHolder
();
...
...
@@ -39,6 +42,10 @@ class RuntimeHolder : public blink::RuntimeDelegate, mozart::ViewListener {
void
UpdateSemantics
(
std
::
vector
<
blink
::
SemanticsNode
>
update
)
override
;
void
DidCreateMainIsolate
(
Dart_Isolate
isolate
)
override
;
// |mozart::InputListener| implementation:
void
OnEvent
(
mozart
::
EventPtr
event
,
const
OnEventCallback
&
callback
)
override
;
// |mozart::ViewListener| implementation:
void
OnInvalidation
(
mozart
::
ViewInvalidationPtr
invalidation
,
const
OnInvalidationCallback
&
callback
)
override
;
...
...
@@ -62,6 +69,8 @@ class RuntimeHolder : public blink::RuntimeDelegate, mozart::ViewListener {
mozart
::
ViewManagerPtr
view_manager_
;
mojo
::
Binding
<
mozart
::
ViewListener
>
view_listener_binding_
;
mojo
::
Binding
<
mozart
::
InputListener
>
input_listener_binding_
;
mozart
::
InputConnectionPtr
input_connection_
;
mozart
::
ViewPtr
view_
;
mozart
::
ViewPropertiesPtr
view_properties_
;
uint32_t
scene_version_
=
mozart
::
kSceneVersionNone
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录