You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-08 12:40:44 +00:00
Merge pull request #109064 from stuartcarnie/108949_screen_get_scale
MacOS: Fix embedded screen_get_scale API
This commit is contained in:
@@ -39,10 +39,12 @@ class RenderingContextDriver;
|
|||||||
class RenderingDevice;
|
class RenderingDevice;
|
||||||
|
|
||||||
struct DisplayServerEmbeddedState {
|
struct DisplayServerEmbeddedState {
|
||||||
/// Default to a scale of 2.0, which is the most common.
|
/*! Default to a scale of 2.0, which is the most common. */
|
||||||
float screen_max_scale = 2.0f;
|
float screen_max_scale = 2.0f;
|
||||||
float screen_dpi = 96.0f;
|
float screen_dpi = 96.0f;
|
||||||
/// The display ID of the window which is displaying the embedded process content.
|
/*! Scale for window displaying embedded content */
|
||||||
|
float screen_window_scale = 2.0f;
|
||||||
|
/*! The display ID of the window which is displaying the embedded process content. */
|
||||||
uint32_t display_id = -1;
|
uint32_t display_id = -1;
|
||||||
|
|
||||||
void serialize(PackedByteArray &r_data);
|
void serialize(PackedByteArray &r_data);
|
||||||
@@ -157,6 +159,7 @@ public:
|
|||||||
virtual Size2i screen_get_size(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
virtual Size2i screen_get_size(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||||
virtual Rect2i screen_get_usable_rect(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
virtual Rect2i screen_get_usable_rect(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||||
virtual int screen_get_dpi(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
virtual int screen_get_dpi(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||||
|
virtual float screen_get_scale(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||||
virtual float screen_get_refresh_rate(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
virtual float screen_get_refresh_rate(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||||
|
|
||||||
virtual Vector<DisplayServer::WindowID> get_window_list() const override;
|
virtual Vector<DisplayServer::WindowID> get_window_list() const override;
|
||||||
|
|||||||
@@ -542,6 +542,21 @@ int DisplayServerEmbedded::screen_get_dpi(int p_screen) const {
|
|||||||
return 96;
|
return 96;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float DisplayServerEmbedded::screen_get_scale(int p_screen) const {
|
||||||
|
_THREAD_SAFE_METHOD_
|
||||||
|
|
||||||
|
switch (p_screen) {
|
||||||
|
case SCREEN_WITH_MOUSE_FOCUS:
|
||||||
|
case SCREEN_WITH_KEYBOARD_FOCUS:
|
||||||
|
case SCREEN_PRIMARY:
|
||||||
|
case SCREEN_OF_MAIN_WINDOW:
|
||||||
|
case 0:
|
||||||
|
return state.screen_window_scale;
|
||||||
|
default:
|
||||||
|
return 1.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
float DisplayServerEmbedded::screen_get_refresh_rate(int p_screen) const {
|
float DisplayServerEmbedded::screen_get_refresh_rate(int p_screen) const {
|
||||||
_THREAD_SAFE_METHOD_
|
_THREAD_SAFE_METHOD_
|
||||||
|
|
||||||
@@ -830,15 +845,16 @@ void DisplayServerEmbedded::swap_buffers() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DisplayServerEmbeddedState::serialize(PackedByteArray &r_data) {
|
void DisplayServerEmbeddedState::serialize(PackedByteArray &r_data) {
|
||||||
r_data.resize(12);
|
r_data.resize(16);
|
||||||
|
|
||||||
uint8_t *data = r_data.ptrw();
|
uint8_t *data = r_data.ptrw();
|
||||||
data += encode_float(screen_max_scale, data);
|
data += encode_float(screen_max_scale, data);
|
||||||
data += encode_float(screen_dpi, data);
|
data += encode_float(screen_dpi, data);
|
||||||
|
data += encode_float(screen_window_scale, data);
|
||||||
data += encode_uint32(display_id, data);
|
data += encode_uint32(display_id, data);
|
||||||
|
|
||||||
// Assert we had enough space.
|
// Assert we had enough space.
|
||||||
DEV_ASSERT((data - r_data.ptrw()) >= r_data.size());
|
DEV_ASSERT(r_data.size() >= (data - r_data.ptrw()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Error DisplayServerEmbeddedState::deserialize(const PackedByteArray &p_data) {
|
Error DisplayServerEmbeddedState::deserialize(const PackedByteArray &p_data) {
|
||||||
@@ -848,6 +864,8 @@ Error DisplayServerEmbeddedState::deserialize(const PackedByteArray &p_data) {
|
|||||||
data += sizeof(float);
|
data += sizeof(float);
|
||||||
screen_dpi = decode_float(data);
|
screen_dpi = decode_float(data);
|
||||||
data += sizeof(float);
|
data += sizeof(float);
|
||||||
|
screen_window_scale = decode_float(data);
|
||||||
|
data += sizeof(float);
|
||||||
display_id = decode_uint32(data);
|
display_id = decode_uint32(data);
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
|
|||||||
@@ -135,7 +135,10 @@ void EmbeddedProcessMacOS::display_state_changed() {
|
|||||||
DisplayServerEmbeddedState state;
|
DisplayServerEmbeddedState state;
|
||||||
state.screen_max_scale = ds->screen_get_max_scale();
|
state.screen_max_scale = ds->screen_get_max_scale();
|
||||||
state.screen_dpi = ds->screen_get_dpi();
|
state.screen_dpi = ds->screen_get_dpi();
|
||||||
state.display_id = ds->window_get_display_id(window->get_window_id());
|
DisplayServer::WindowID wid = window->get_window_id();
|
||||||
|
state.screen_window_scale = ds->screen_get_scale(ds->window_get_current_screen(wid));
|
||||||
|
state.display_id = ds->window_get_display_id(wid);
|
||||||
|
|
||||||
PackedByteArray data;
|
PackedByteArray data;
|
||||||
state.serialize(data);
|
state.serialize(data);
|
||||||
script_debugger->send_message("embed:ds_state", { data });
|
script_debugger->send_message("embed:ds_state", { data });
|
||||||
|
|||||||
Reference in New Issue
Block a user