Skip to content

Commit 6c399bd

Browse files
committed
Merge pull request #109064 from stuartcarnie/108949_screen_get_scale
MacOS: Fix embedded screen_get_scale API
2 parents ccb0556 + c62ad8d commit 6c399bd

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

platform/macos/display_server_embedded.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,12 @@ class RenderingContextDriver;
3939
class RenderingDevice;
4040

4141
struct DisplayServerEmbeddedState {
42-
/// Default to a scale of 2.0, which is the most common.
42+
/*! Default to a scale of 2.0, which is the most common. */
4343
float screen_max_scale = 2.0f;
4444
float screen_dpi = 96.0f;
45-
/// The display ID of the window which is displaying the embedded process content.
45+
/*! Scale for window displaying embedded content */
46+
float screen_window_scale = 2.0f;
47+
/*! The display ID of the window which is displaying the embedded process content. */
4648
uint32_t display_id = -1;
4749

4850
void serialize(PackedByteArray &r_data);
@@ -157,6 +159,7 @@ class DisplayServerEmbedded : public DisplayServerMacOSBase {
157159
virtual Size2i screen_get_size(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
158160
virtual Rect2i screen_get_usable_rect(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
159161
virtual int screen_get_dpi(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
162+
virtual float screen_get_scale(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
160163
virtual float screen_get_refresh_rate(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
161164

162165
virtual Vector<DisplayServer::WindowID> get_window_list() const override;

platform/macos/display_server_embedded.mm

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,21 @@
542542
return 96;
543543
}
544544

545+
float DisplayServerEmbedded::screen_get_scale(int p_screen) const {
546+
_THREAD_SAFE_METHOD_
547+
548+
switch (p_screen) {
549+
case SCREEN_WITH_MOUSE_FOCUS:
550+
case SCREEN_WITH_KEYBOARD_FOCUS:
551+
case SCREEN_PRIMARY:
552+
case SCREEN_OF_MAIN_WINDOW:
553+
case 0:
554+
return state.screen_window_scale;
555+
default:
556+
return 1.0;
557+
}
558+
}
559+
545560
float DisplayServerEmbedded::screen_get_refresh_rate(int p_screen) const {
546561
_THREAD_SAFE_METHOD_
547562

@@ -830,15 +845,16 @@
830845
}
831846

832847
void DisplayServerEmbeddedState::serialize(PackedByteArray &r_data) {
833-
r_data.resize(12);
848+
r_data.resize(16);
834849

835850
uint8_t *data = r_data.ptrw();
836851
data += encode_float(screen_max_scale, data);
837852
data += encode_float(screen_dpi, data);
853+
data += encode_float(screen_window_scale, data);
838854
data += encode_uint32(display_id, data);
839855

840856
// Assert we had enough space.
841-
DEV_ASSERT((data - r_data.ptrw()) >= r_data.size());
857+
DEV_ASSERT(r_data.size() >= (data - r_data.ptrw()));
842858
}
843859

844860
Error DisplayServerEmbeddedState::deserialize(const PackedByteArray &p_data) {
@@ -848,6 +864,8 @@
848864
data += sizeof(float);
849865
screen_dpi = decode_float(data);
850866
data += sizeof(float);
867+
screen_window_scale = decode_float(data);
868+
data += sizeof(float);
851869
display_id = decode_uint32(data);
852870

853871
return OK;

platform/macos/editor/embedded_process_macos.mm

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,10 @@
135135
DisplayServerEmbeddedState state;
136136
state.screen_max_scale = ds->screen_get_max_scale();
137137
state.screen_dpi = ds->screen_get_dpi();
138-
state.display_id = ds->window_get_display_id(window->get_window_id());
138+
DisplayServer::WindowID wid = window->get_window_id();
139+
state.screen_window_scale = ds->screen_get_scale(ds->window_get_current_screen(wid));
140+
state.display_id = ds->window_get_display_id(wid);
141+
139142
PackedByteArray data;
140143
state.serialize(data);
141144
script_debugger->send_message("embed:ds_state", { data });

0 commit comments

Comments
 (0)