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;
39
39
class RenderingDevice;
40
40
41
41
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. */
43
43
float screen_max_scale = 2 .0f ;
44
44
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. */
46
48
uint32_t display_id = -1 ;
47
49
48
50
void serialize (PackedByteArray &r_data);
@@ -157,6 +159,7 @@ class DisplayServerEmbedded : public DisplayServerMacOSBase {
157
159
virtual Size2i screen_get_size (int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
158
160
virtual Rect2i screen_get_usable_rect (int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
159
161
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;
160
163
virtual float screen_get_refresh_rate (int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
161
164
162
165
virtual Vector<DisplayServer::WindowID> get_window_list () const override;
Original file line number Diff line number Diff line change 542
542
return 96 ;
543
543
}
544
544
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
+
545
560
float DisplayServerEmbedded::screen_get_refresh_rate (int p_screen) const {
546
561
_THREAD_SAFE_METHOD_
547
562
830
845
}
831
846
832
847
void DisplayServerEmbeddedState::serialize (PackedByteArray &r_data) {
833
- r_data.resize (12 );
848
+ r_data.resize (16 );
834
849
835
850
uint8_t *data = r_data.ptrw ();
836
851
data += encode_float (screen_max_scale, data);
837
852
data += encode_float (screen_dpi, data);
853
+ data += encode_float (screen_window_scale, data);
838
854
data += encode_uint32 (display_id, data);
839
855
840
856
// 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 () ));
842
858
}
843
859
844
860
Error DisplayServerEmbeddedState::deserialize (const PackedByteArray &p_data) {
848
864
data += sizeof (float );
849
865
screen_dpi = decode_float (data);
850
866
data += sizeof (float );
867
+ screen_window_scale = decode_float (data);
868
+ data += sizeof (float );
851
869
display_id = decode_uint32 (data);
852
870
853
871
return OK;
Original file line number Diff line number Diff line change 135
135
DisplayServerEmbeddedState state;
136
136
state.screen_max_scale = ds->screen_get_max_scale ();
137
137
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
+
139
142
PackedByteArray data;
140
143
state.serialize (data);
141
144
script_debugger->send_message (" embed:ds_state" , { data });
You can’t perform that action at this time.
0 commit comments