|
|
@@ -75,14 +75,16 @@ bool Backend::Initialize(const char* window_name, int width, int height, bool al
|
|
|
SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1");
|
|
|
|
|
|
#if SDL_MAJOR_VERSION >= 3
|
|
|
+ const float window_size_scale = SDL_GetDisplayContentScale(SDL_GetPrimaryDisplay());
|
|
|
SDL_PropertiesID props = SDL_CreateProperties();
|
|
|
SDL_SetStringProperty(props, SDL_PROP_WINDOW_CREATE_TITLE_STRING, window_name);
|
|
|
SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_X_NUMBER, SDL_WINDOWPOS_CENTERED);
|
|
|
SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_Y_NUMBER, SDL_WINDOWPOS_CENTERED);
|
|
|
- SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_WIDTH_NUMBER, width);
|
|
|
- SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_HEIGHT_NUMBER, height);
|
|
|
+ SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_WIDTH_NUMBER, int(width * window_size_scale));
|
|
|
+ SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_HEIGHT_NUMBER, int(height * window_size_scale));
|
|
|
SDL_SetBooleanProperty(props, SDL_PROP_WINDOW_CREATE_VULKAN_BOOLEAN, true);
|
|
|
SDL_SetBooleanProperty(props, SDL_PROP_WINDOW_CREATE_RESIZABLE_BOOLEAN, allow_resize);
|
|
|
+ SDL_SetBooleanProperty(props, SDL_PROP_WINDOW_CREATE_HIGH_PIXEL_DENSITY_BOOLEAN, true);
|
|
|
SDL_Window* window = SDL_CreateWindowWithProperties(props);
|
|
|
SDL_DestroyProperties(props);
|
|
|
auto CreateSurface = [](VkInstance instance, VkSurfaceKHR* out_surface) {
|
|
|
@@ -217,6 +219,7 @@ bool Backend::ProcessEvents(Rml::Context* context, KeyDownCallback key_down_call
|
|
|
#define RMLSDL_WINDOW_EVENTS_BEGIN
|
|
|
#define RMLSDL_WINDOW_EVENTS_END
|
|
|
auto GetKey = [](const SDL_Event& event) { return event.key.key; };
|
|
|
+ auto GetDisplayScale = []() { return SDL_GetWindowDisplayScale(data->window); };
|
|
|
constexpr auto event_quit = SDL_EVENT_QUIT;
|
|
|
constexpr auto event_key_down = SDL_EVENT_KEY_DOWN;
|
|
|
constexpr auto event_window_size_changed = SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED;
|
|
|
@@ -232,6 +235,7 @@ bool Backend::ProcessEvents(Rml::Context* context, KeyDownCallback key_down_call
|
|
|
} \
|
|
|
break;
|
|
|
auto GetKey = [](const SDL_Event& event) { return event.key.keysym.sym; };
|
|
|
+ auto GetDisplayScale = []() { return 1.f; };
|
|
|
constexpr auto event_quit = SDL_QUIT;
|
|
|
constexpr auto event_key_down = SDL_KEYDOWN;
|
|
|
constexpr auto event_window_size_changed = SDL_WINDOWEVENT_SIZE_CHANGED;
|
|
|
@@ -263,13 +267,13 @@ bool Backend::ProcessEvents(Rml::Context* context, KeyDownCallback key_down_call
|
|
|
propagate_event = false;
|
|
|
const Rml::Input::KeyIdentifier key = RmlSDL::ConvertKey(GetKey(ev));
|
|
|
const int key_modifier = RmlSDL::GetKeyModifierState();
|
|
|
- const float native_dp_ratio = 1.f;
|
|
|
+ const float native_dp_ratio = GetDisplayScale();
|
|
|
|
|
|
// See if we have any global shortcuts that take priority over the context.
|
|
|
if (key_down_callback && !key_down_callback(context, key, key_modifier, native_dp_ratio, true))
|
|
|
break;
|
|
|
// Otherwise, hand the event over to the context by calling the input handler as normal.
|
|
|
- if (!RmlSDL::InputEventHandler(context, ev))
|
|
|
+ if (!RmlSDL::InputEventHandler(context, data->window, ev))
|
|
|
break;
|
|
|
// The key was not consumed by the context either, try keyboard shortcuts of lower priority.
|
|
|
if (key_down_callback && !key_down_callback(context, key, key_modifier, native_dp_ratio, false))
|
|
|
@@ -292,7 +296,7 @@ bool Backend::ProcessEvents(Rml::Context* context, KeyDownCallback key_down_call
|
|
|
}
|
|
|
|
|
|
if (propagate_event)
|
|
|
- RmlSDL::InputEventHandler(context, ev);
|
|
|
+ RmlSDL::InputEventHandler(context, data->window, ev);
|
|
|
|
|
|
has_event = SDL_PollEvent(&ev);
|
|
|
}
|