Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 39 additions & 19 deletions ui/ozone/platform/starboard/platform_event_source_starboard.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,46 @@
#include "ui/events/keycodes/dom/dom_key.h"
#include "ui/events/keycodes/keyboard_code_conversion.h"
#include "ui/events/keycodes/keyboard_code_conversion_starboard.h"
#include "ui/events/pointer_details.h"
#include "ui/events/types/event_type.h"

namespace ui {

namespace {

std::unique_ptr<ui::Event> CreateTouchInputEvent(const SbEvent* event) {
CHECK(event) << "CreateTouchInputEvent: missing event";
CHECK(event->data) << "CreateTouchInputEvent: missing event data";
SbInputData* input_data = static_cast<SbInputData*>(event->data);
const SbInputData& data = *input_data;
ui::EventType event_type;
switch (data.type) {
case kSbInputEventTypePress:
event_type = ui::EventType::kTouchPressed;
break;
case kSbInputEventTypeUnpress:
event_type = ui::EventType::kTouchReleased;
break;
case kSbInputEventTypeMove:
event_type = ui::EventType::kTouchMoved;
break;
default:
NOTREACHED();
}
float pressure = data.pressure;
if (!std::isnan(pressure) && (event_type == ui::EventType::kTouchPressed ||
event_type == ui::EventType::kTouchMoved)) {
pressure = std::max(pressure, 0.5f);
}
return std::make_unique<ui::TouchEvent>(
event_type, gfx::PointF(data.position.x, data.position.y), gfx::PointF{},
base::TimeTicks() + base::Microseconds(event->timestamp),
ui::PointerDetails(ui::EventPointerType::kTouch, data.device_id,
data.size.x, data.size.y, pressure));
}

} // namespace

void DeliverEventHandler(std::unique_ptr<ui::Event> ui_event) {
CHECK(ui::PlatformEventSource::GetInstance());
static_cast<PlatformEventSourceStarboard*>(
Expand All @@ -51,25 +87,6 @@ void PlatformEventSourceStarboard::HandleEvent(const SbEvent* event) {
int64_t raw_timestamp = event->timestamp;
SbInputEventType raw_type = input_data->type;

std::string type_name;
switch (input_data->type) {
case kSbInputEventTypeMove:
type_name = "kSbInputEventTypeMove";
break;
case kSbInputEventTypePress:
type_name = "kSbInputEventTypePress";
break;
case kSbInputEventTypeUnpress:
type_name = "kSbInputEventTypeUnpress";
break;
case kSbInputEventTypeWheel:
type_name = "kSbInputEventTypeWheel";
break;
case kSbInputEventTypeInput:
type_name = "kSbInputEventTypeInput";
break;
}

std::unique_ptr<ui::Event> ui_event;

if ((input_data->device_type == kSbInputDeviceTypeKeyboard) ||
Expand Down Expand Up @@ -140,6 +157,9 @@ void PlatformEventSourceStarboard::HandleEvent(const SbEvent* event) {
event_type, gfx::PointF(input_data->position.x, input_data->position.y),
gfx::PointF{}, base::TimeTicks() + base::Microseconds(raw_timestamp),
flag, ui::EF_LEFT_MOUSE_BUTTON);
} else if (input_data->device_type == kSbInputDeviceTypeTouchScreen ||
input_data->device_type == kSbInputDeviceTypeTouchPad) {
ui_event = CreateTouchInputEvent(event);
} else {
return;
}
Expand Down
Loading