提交 2d95d0ad 编写于 作者: I Ian Hickson

Merge pull request #2153 from Hixie/mojo-pointer

Fix pointers in mojo.
......@@ -130,22 +130,33 @@ void PlatformViewMojo::OnEvent(mojo::EventPtr event,
mojo::PointerDataPtr data = event->pointer_data.Pass();
if (!data)
break;
pointer::PointerPtr pointer = pointer::Pointer::New();
pointer->time_stamp = event->time_stamp;
pointer->pointer = data->pointer_id;
pointer->type = GetTypeFromAction(event->action);
pointer->kind = GetKindFromKind(data->kind);
pointer->x = data->x;
pointer->y = data->y;
pointer->buttons = static_cast<int32_t>(event->flags);
pointer->pressure = data->pressure;
pointer->radius_major = data->radius_major;
pointer->radius_minor = data->radius_minor;
pointer->orientation = data->orientation;
pointer::PointerPacketPtr packet = pointer::PointerPacket::New();
packet->pointers = mojo::Array<pointer::PointerPtr>::New(1);
packet->pointers[0] = pointer.Pass();
pointer::PointerPacketPtr packet;
int packetIndex = 0;
if (pointer_positions_.count(data->pointer_id) > 0) {
if (event->action == mojo::EventType::POINTER_UP ||
event->action == mojo::EventType::POINTER_CANCEL) {
std::pair<float, float> last_position = pointer_positions_[data->pointer_id];
if (last_position.first != data->x || last_position.second != data->y) {
packet = pointer::PointerPacket::New();
packet->pointers = mojo::Array<pointer::PointerPtr>::New(2);
packet->pointers[packetIndex] = CreateEvent(pointer::PointerType::MOVE, event.get(), data.get());
packetIndex += 1;
}
pointer_positions_.erase(data->pointer_id);
}
} else {
// We don't currently support hover moves.
// If we want to support those, we have to first implement
// added/removed events for pointers.
// See: https://github.com/flutter/flutter/issues/720
if (event->action != mojo::EventType::POINTER_DOWN)
break;
}
if (packetIndex == 0) {
packet = pointer::PointerPacket::New();
packet->pointers = mojo::Array<pointer::PointerPtr>::New(1);
}
packet->pointers[packetIndex] = CreateEvent(GetTypeFromAction(event->action), event.get(), data.get());
sky_engine_->OnPointerPacket(packet.Pass());
break;
}
......@@ -162,6 +173,26 @@ void PlatformViewMojo::OnEvent(mojo::EventPtr event,
callback.Run();
}
pointer::PointerPtr PlatformViewMojo::CreateEvent(pointer::PointerType type, mojo::Event* event, mojo::PointerData* data) {
DCHECK(data);
pointer::PointerPtr pointer = pointer::Pointer::New();
pointer->time_stamp = event->time_stamp;
pointer->pointer = data->pointer_id;
pointer->type = type;
pointer->kind = GetKindFromKind(data->kind);
pointer->x = data->x;
pointer->y = data->y;
pointer->buttons = static_cast<int32_t>(event->flags);
pointer->pressure = data->pressure;
pointer->radius_major = data->radius_major;
pointer->radius_minor = data->radius_minor;
pointer->orientation = data->orientation;
if (event->action != mojo::EventType::POINTER_UP ||
event->action != mojo::EventType::POINTER_CANCEL)
pointer_positions_[data->pointer_id] = { data->x, data->y };
return pointer.Pass();
}
void PlatformViewMojo::Create(
mojo::ApplicationConnection* connection,
mojo::InterfaceRequest<keyboard::KeyboardService> request) {
......
......@@ -37,6 +37,8 @@ class PlatformViewMojo : public PlatformView,
void OnEvent(mojo::EventPtr event,
const mojo::Callback<void()>& callback) override;
pointer::PointerPtr CreateEvent(pointer::PointerType type, mojo::Event* event, mojo::PointerData* data);
// |mojo::InterfaceFactory<mojo::asset_bundle::AssetUnpacker>| implementation:
void Create(
mojo::ApplicationConnection* connection,
......@@ -53,6 +55,8 @@ class PlatformViewMojo : public PlatformView,
mojo::NativeViewportEventDispatcherPtr key_event_dispatcher_;
std::map<int, std::pair<float, float>> pointer_positions_;
DISALLOW_COPY_AND_ASSIGN(PlatformViewMojo);
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册