Skip to content

Commit 62e0987

Browse files
committed
Scale ImageBasedFrame on parent:resize after ZoomChanged event
This commit adapts ImageBasedFrame scaling to be triggered when it's parent recieves a resize event after ZoomChanged event on its wrapped control.
1 parent 6ed2b3b commit 62e0987

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

bundles/org.eclipse.e4.ui.widgets/src/org/eclipse/e4/ui/widgets/ImageBasedFrame.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
******************************************************************************/
1515
package org.eclipse.e4.ui.widgets;
1616

17+
import java.util.concurrent.atomic.AtomicReference;
18+
1719
import org.eclipse.swt.SWT;
1820
import org.eclipse.swt.events.ControlEvent;
1921
import org.eclipse.swt.events.ControlListener;
@@ -24,6 +26,7 @@
2426
import org.eclipse.swt.widgets.Canvas;
2527
import org.eclipse.swt.widgets.Composite;
2628
import org.eclipse.swt.widgets.Control;
29+
import org.eclipse.swt.widgets.Listener;
2730
import org.eclipse.swt.widgets.ToolBar;
2831

2932

@@ -66,9 +69,18 @@ public ImageBasedFrame(Composite parent, Control toWrap, boolean vertical,
6669
ImageBasedFrame frame = (ImageBasedFrame) event.widget;
6770
frame.setCursor(null);
6871
});
72+
6973
toWrap.addListener(SWT.ZoomChanged, event -> {
70-
toWrap.pack(true);
71-
setFramedControlLocation();
74+
final AtomicReference<Listener> scaleOnParentResize = new AtomicReference<>();
75+
scaleOnParentResize.set(e -> {
76+
if (isDisposed())
77+
return;
78+
toWrap.pack(true);
79+
setFramedControlLocation();
80+
parent.layout();
81+
parent.removeListener(SWT.Resize, scaleOnParentResize.get());
82+
});
83+
parent.addListener(SWT.Resize, scaleOnParentResize.get());
7284
});
7385

7486
addMouseMoveListener(e -> {

0 commit comments

Comments
 (0)