File tree Expand file tree Collapse file tree 3 files changed +29
-5
lines changed Expand file tree Collapse file tree 3 files changed +29
-5
lines changed Original file line number Diff line number Diff line change @@ -39,10 +39,12 @@ class RenderingContextDriver;
3939class RenderingDevice;
4040
4141struct 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;
Original file line number Diff line number Diff line change 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+
545560float DisplayServerEmbedded::screen_get_refresh_rate (int p_screen) const {
546561 _THREAD_SAFE_METHOD_
547562
830845}
831846
832847void 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
844860Error DisplayServerEmbeddedState::deserialize (const PackedByteArray &p_data) {
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;
Original file line number Diff line number Diff line change 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 });
You can’t perform that action at this time.
0 commit comments