Skip to content

Commit c39183f

Browse files
committed
Don't mess up the component bounds in HiDPI mode (#635)
1 parent facc39f commit c39183f

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

enable/abstract_window.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,16 +220,19 @@ def _component_changed(self, old, new):
220220
size = self._get_control_size()
221221
if (size is not None) and hasattr(self.component, "bounds"):
222222
new.on_trait_change(self.component_bounds_changed, "bounds")
223+
pix_scale = self.base_pixel_scale
223224
if getattr(self.component, "fit_window", False):
224225
self.component.outer_position = [0, 0]
225-
self.component.outer_bounds = list(size)
226+
self.component.outer_bounds = [
227+
size[0] / pix_scale, size[1] / pix_scale
228+
]
226229
elif hasattr(self.component, "resizable"):
227230
if "h" in self.component.resizable:
228231
self.component.outer_x = 0
229-
self.component.outer_width = size[0]
232+
self.component.outer_width = size[0] / pix_scale
230233
if "v" in self.component.resizable:
231234
self.component.outer_y = 0
232-
self.component.outer_height = size[1]
235+
self.component.outer_height = size[1] / pix_scale
233236
self._update_region = None
234237
self.redraw()
235238

enable/tests/test_component_editor.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@
1111
"""
1212
import unittest
1313

14-
from enable.component_editor import ComponentEditor
1514
from traits.api import Any, HasTraits
1615
from traitsui.api import Item, View
1716

17+
from enable.component import Component
18+
from enable.component_editor import ComponentEditor
1819
from enable.tests._testing import get_dialog_size, skip_if_null
1920

2021
ITEM_WIDTH, ITEM_HEIGHT = 700, 200
@@ -72,3 +73,19 @@ def test_initial_component_with_item_size(self):
7273

7374
self.assertGreater(size[0], ITEM_WIDTH - 1)
7475
self.assertGreater(size[1], ITEM_HEIGHT - 1)
76+
77+
@skip_if_null
78+
def test_component_hidpi_size_stability(self):
79+
# Issue #634: HiDPI doubles size of components when a component is
80+
# replaced
81+
dialog = _ComponentDialogWithSize(thing=Component())
82+
dialog.edit_traits()
83+
84+
initial_bounds = dialog.thing.bounds
85+
# Force the window into HiDPI mode
86+
dialog.thing.window.base_pixel_scale = 2.0
87+
88+
dialog.thing = Component()
89+
new_bounds = dialog.thing.bounds
90+
91+
self.assertListEqual(initial_bounds, new_bounds)

0 commit comments

Comments
 (0)