Skip to content

Commit ef78aa3

Browse files
vkarehlukefromdc
authored andcommitted
Scale screen dimensions
1 parent cfd5021 commit ef78aa3

File tree

7 files changed

+60
-25
lines changed

7 files changed

+60
-25
lines changed

eel/eel-background.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,9 @@ drawable_get_adjusted_size (EelBackground *self,
308308
if (self->details->is_desktop)
309309
{
310310
GdkScreen *screen = gtk_widget_get_screen (self->details->widget);
311-
*width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen));
312-
*height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen));
311+
gint scale = gtk_widget_get_scale_factor (self->details->widget);
312+
*width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
313+
*height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
313314
}
314315
else
315316
{

eel/eel-editable-label.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,6 +1049,7 @@ eel_editable_label_ensure_layout (EelEditableLabel *label,
10491049
else
10501050
{
10511051
gint wrap_width;
1052+
gint scale;
10521053

10531054
pango_layout_set_width (label->layout, -1);
10541055
pango_layout_get_extents (label->layout, NULL, &logical_rect);
@@ -1059,9 +1060,10 @@ eel_editable_label_ensure_layout (EelEditableLabel *label,
10591060
longest_paragraph = width;
10601061

10611062
wrap_width = get_label_wrap_width (label);
1063+
scale = gtk_widget_get_scale_factor (widget);
10621064
width = MIN (width, wrap_width);
10631065
width = MIN (width,
1064-
PANGO_SCALE * (WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) + 1) / 2);
1066+
PANGO_SCALE * (WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) / scale + 1) / 2);
10651067

10661068
pango_layout_set_width (label->layout, width);
10671069
pango_layout_get_extents (label->layout, NULL, &logical_rect);
@@ -3046,6 +3048,7 @@ popup_position_func (GtkMenu *menu,
30463048
GtkWidget *widget;
30473049
GtkRequisition req;
30483050
GtkAllocation allocation;
3051+
gint scale;
30493052

30503053
label = EEL_EDITABLE_LABEL (user_data);
30513054
widget = GTK_WIDGET (label);
@@ -3056,12 +3059,13 @@ popup_position_func (GtkMenu *menu,
30563059

30573060
gtk_widget_get_preferred_size (widget, &req, NULL);
30583061
gtk_widget_get_allocation (widget, &allocation);
3062+
scale = gtk_widget_get_scale_factor (widget);
30593063

30603064
*x += allocation.width / 2;
30613065
*y += allocation.height;
30623066

3063-
*x = CLAMP (*x, 0, MAX (0, WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) - req.width));
3064-
*y = CLAMP (*y, 0, MAX (0, HeightOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) - req.height));
3067+
*x = CLAMP (*x, 0, MAX (0, WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) / scale - req.width));
3068+
*y = CLAMP (*y, 0, MAX (0, HeightOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) / scale - req.height));
30653069
}
30663070

30673071
static void

eel/eel-gtk-extensions.c

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,16 +86,22 @@ eel_gtk_window_get_geometry_string (GtkWindow *window)
8686
static void
8787
sanity_check_window_position (int *left, int *top)
8888
{
89+
GdkScreen *screen;
90+
gint scale;
91+
8992
g_assert (left != NULL);
9093
g_assert (top != NULL);
9194

95+
screen = gdk_screen_get_default ();
96+
scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
97+
9298
/* Make sure the top of the window is on screen, for
9399
* draggability (might not be necessary with all window managers,
94100
* but seems reasonable anyway). Make sure the top of the window
95101
* isn't off the bottom of the screen, or so close to the bottom
96102
* that it might be obscured by the panel.
97103
*/
98-
*top = CLAMP (*top, 0, HeightOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) - MINIMUM_ON_SCREEN_HEIGHT);
104+
*top = CLAMP (*top, 0, HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale - MINIMUM_ON_SCREEN_HEIGHT);
99105

100106
/* FIXME bugzilla.eazel.com 669:
101107
* If window has negative left coordinate, set_uposition sends it
@@ -108,22 +114,28 @@ sanity_check_window_position (int *left, int *top)
108114
* the screen, or so close to the right edge that it might be
109115
* obscured by the panel.
110116
*/
111-
*left = CLAMP (*left, 0, WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) - MINIMUM_ON_SCREEN_WIDTH);
117+
*left = CLAMP (*left, 0, WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale - MINIMUM_ON_SCREEN_WIDTH);
112118
}
113119

114120
static void
115121
sanity_check_window_dimensions (guint *width, guint *height)
116122
{
123+
GdkScreen *screen;
124+
gint scale;
125+
117126
g_assert (width != NULL);
118127
g_assert (height != NULL);
119128

129+
screen = gdk_screen_get_default ();
130+
scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
131+
120132
/* Pin the size of the window to the screen, so we don't end up in
121133
* a state where the window is so big essential parts of it can't
122134
* be reached (might not be necessary with all window managers,
123135
* but seems reasonable anyway).
124136
*/
125-
*width = MIN (*width, WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())));
126-
*height = MIN (*height, HeightOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())));
137+
*width = MIN (*width, WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale);
138+
*height = MIN (*height, HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale);
127139
}
128140

129141
/**
@@ -153,6 +165,7 @@ eel_gtk_window_set_initial_geometry (GtkWindow *window,
153165
GdkScreen *screen;
154166
int real_left, real_top;
155167
int screen_width, screen_height;
168+
int scale;
156169

157170
g_return_if_fail (GTK_IS_WINDOW (window));
158171

@@ -168,8 +181,9 @@ eel_gtk_window_set_initial_geometry (GtkWindow *window,
168181
real_top = top;
169182

170183
screen = gtk_window_get_screen (window);
171-
screen_width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen));
172-
screen_height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen));
184+
scale = gtk_widget_get_scale_factor (GTK_WIDGET (window));
185+
screen_width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
186+
screen_height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
173187

174188
/* This is sub-optimal. GDK doesn't allow us to set win_gravity
175189
* to South/East types, which should be done if using negative

libcaja-private/caja-icon-container.c

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ icon_set_position (CajaIcon *icon,
326326
int item_width, item_height;
327327
int height_above, width_left;
328328
int min_x, max_x, min_y, max_y;
329+
int scale;
329330

330331
if (icon->x == x && icon->y == y)
331332
{
@@ -354,12 +355,13 @@ icon_set_position (CajaIcon *icon,
354355
355356
For now, we have a cheesy workaround:
356357
*/
358+
scale = gtk_widget_get_scale_factor (GTK_WIDGET (container));
357359
container_x = 0;
358360
container_y = 0;
359-
container_width = WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) - container_x
361+
container_width = WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) / scale - container_x
360362
- container->details->left_margin
361363
- container->details->right_margin;
362-
container_height = HeightOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) - container_y
364+
container_height = HeightOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) / scale - container_y
363365
- container->details->top_margin
364366
- container->details->bottom_margin;
365367
pixels_per_unit = EEL_CANVAS (container)->pixels_per_unit;
@@ -5239,6 +5241,7 @@ caja_icon_container_search_position_func (CajaIconContainer *container,
52395241
gint x, y;
52405242
gint cont_x, cont_y;
52415243
gint cont_width, cont_height;
5244+
gint scale;
52425245
GdkWindow *cont_window;
52435246
GdkScreen *screen;
52445247
GtkRequisition requisition;
@@ -5247,6 +5250,7 @@ caja_icon_container_search_position_func (CajaIconContainer *container,
52475250

52485251

52495252
cont_window = gtk_widget_get_window (GTK_WIDGET (container));
5253+
scale = gtk_widget_get_scale_factor (GTK_WIDGET (container));
52505254
screen = gdk_window_get_screen (cont_window);
52515255

52525256
monitor_num = gdk_display_get_monitor_at_window (gdk_screen_get_display (screen),
@@ -5262,9 +5266,9 @@ caja_icon_container_search_position_func (CajaIconContainer *container,
52625266

52635267
gtk_widget_get_preferred_size (search_dialog, &requisition, NULL);
52645268

5265-
if (cont_x + cont_width - requisition.width > WidthOfScreen (gdk_x11_screen_get_xscreen (screen)))
5269+
if (cont_x + cont_width - requisition.width > WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale)
52665270
{
5267-
x = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) - requisition.width;
5271+
x = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale - requisition.width;
52685272
}
52695273
else if (cont_x + cont_width - requisition.width < 0)
52705274
{
@@ -6025,6 +6029,7 @@ key_press_event (GtkWidget *widget,
60256029
GdkScreen *screen;
60266030
gboolean text_modified;
60276031
gulong popup_menu_id;
6032+
gint scale;
60286033

60296034
caja_icon_container_ensure_interactive_directory (container);
60306035

@@ -6040,9 +6045,10 @@ key_press_event (GtkWidget *widget,
60406045

60416046
/* Move the entry off screen */
60426047
screen = gtk_widget_get_screen (GTK_WIDGET (container));
6048+
scale = gtk_widget_get_scale_factor (GTK_WIDGET (container));
60436049
gtk_window_move (GTK_WINDOW (container->details->search_window),
6044-
WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) + 1,
6045-
HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) + 1);
6050+
WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale + 1,
6051+
HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale + 1);
60466052
gtk_widget_show (container->details->search_window);
60476053

60486054
/* Send the event to the window. If the preedit_changed signal is emitted

src/caja-desktop-window.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,12 @@ caja_desktop_window_screen_size_changed (GdkScreen *screen,
114114
CajaDesktopWindow *window)
115115
{
116116
int width_request, height_request;
117+
int scale;
117118

118-
width_request = WidthOfScreen (gdk_x11_screen_get_xscreen (screen));
119-
height_request = HeightOfScreen (gdk_x11_screen_get_xscreen (screen));
119+
scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
120+
121+
width_request = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
122+
height_request = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
120123

121124
g_object_set (window,
122125
"width_request", width_request,
@@ -130,9 +133,12 @@ caja_desktop_window_new (CajaApplication *application,
130133
{
131134
CajaDesktopWindow *window;
132135
int width_request, height_request;
136+
int scale;
137+
138+
scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
133139

134-
width_request = WidthOfScreen (gdk_x11_screen_get_xscreen (screen));
135-
height_request = HeightOfScreen (gdk_x11_screen_get_xscreen (screen));
140+
width_request = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
141+
height_request = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
136142

137143
window = CAJA_DESKTOP_WINDOW
138144
(gtk_widget_new (caja_desktop_window_get_type(),

src/caja-window.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,8 @@ caja_window_zoom_to_default (CajaWindow *window)
507507
static guint
508508
get_max_forced_height (GdkScreen *screen)
509509
{
510-
return (HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) * 90) / 100;
510+
gint scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
511+
return (HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale * 90) / 100;
511512
}
512513

513514
/* Code should never force the window wider than this size.
@@ -516,7 +517,8 @@ get_max_forced_height (GdkScreen *screen)
516517
static guint
517518
get_max_forced_width (GdkScreen *screen)
518519
{
519-
return (WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) * 90) / 100;
520+
gint scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
521+
return (WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale * 90) / 100;
520522
}
521523

522524
/* This must be called when construction of CajaWindow is finished,

src/file-manager/fm-desktop-icon-view.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,10 +392,12 @@ realized_callback (GtkWidget *widget, FMDesktopIconView *desktop_icon_view)
392392
GdkWindow *root_window;
393393
GdkScreen *screen;
394394
GtkAllocation allocation;
395+
gint scale;
395396

396397
g_return_if_fail (desktop_icon_view->details->root_window == NULL);
397398

398399
screen = gtk_widget_get_screen (widget);
400+
scale = gtk_widget_get_scale_factor (widget);
399401

400402
/* Ugly HACK for the problem that the views realize at the
401403
* wrong size and then get resized. (This is a problem with
@@ -405,8 +407,8 @@ realized_callback (GtkWidget *widget, FMDesktopIconView *desktop_icon_view)
405407
*/
406408
allocation.x = 0;
407409
allocation.y = 0;
408-
allocation.width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen));
409-
allocation.height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen));
410+
allocation.width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
411+
allocation.height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
410412
gtk_widget_size_allocate (GTK_WIDGET(get_icon_container(desktop_icon_view)),
411413
&allocation);
412414

0 commit comments

Comments
 (0)