Skip to content

Commit 9103503

Browse files
akoch-yattaptziegler
authored andcommitted
Fix rulers and guides for enabled custom autoscaling
This commit adapts guides and rulers to properly work when the custom autoscaling is enabled. To achieve that the monitor scale is applied where necessary.
1 parent 671e248 commit 9103503

File tree

3 files changed

+34
-9
lines changed

3 files changed

+34
-9
lines changed

org.eclipse.gef/src/org/eclipse/gef/internal/ui/rulers/DragGuidePolicy.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.eclipse.draw2d.Cursors;
1818
import org.eclipse.draw2d.Figure;
1919
import org.eclipse.draw2d.IFigure;
20+
import org.eclipse.draw2d.geometry.Dimension;
2021
import org.eclipse.draw2d.geometry.Point;
2122
import org.eclipse.draw2d.geometry.Rectangle;
2223

@@ -89,10 +90,12 @@ public Command getCommand(Request request) {
8990
cmd = getGuideEditPart().getRulerProvider().getDeleteGuideCommand(getHost().getModel());
9091
} else {
9192
int pDelta;
93+
Dimension moveDelta = new Dimension(req.getMoveDelta().x, req.getMoveDelta().y);
94+
getHostFigure().translateToRelative(moveDelta);
9295
if (getGuideEditPart().isHorizontal()) {
93-
pDelta = req.getMoveDelta().y;
96+
pDelta = moveDelta.height;
9497
} else {
95-
pDelta = req.getMoveDelta().x;
98+
pDelta = moveDelta.width;
9699
}
97100
if (isMoveValid(getGuideEditPart().getZoomedPosition() + pDelta)) {
98101
ZoomManager zoomManager = getGuideEditPart().getZoomManager();
@@ -217,10 +220,13 @@ public void showSourceFeedback(Request request) {
217220
eraseAttachedPartsFeedback(request);
218221
} else {
219222
int newPosition;
223+
224+
Dimension moveDelta = new Dimension(req.getMoveDelta().x, req.getMoveDelta().y);
225+
getHostFigure().translateToRelative(moveDelta);
220226
if (getGuideEditPart().isHorizontal()) {
221-
newPosition = getGuideEditPart().getZoomedPosition() + req.getMoveDelta().y;
227+
newPosition = getGuideEditPart().getZoomedPosition() + moveDelta.height;
222228
} else {
223-
newPosition = getGuideEditPart().getZoomedPosition() + req.getMoveDelta().x;
229+
newPosition = getGuideEditPart().getZoomedPosition() + moveDelta.width;
224230
}
225231
getHostFigure().setVisible(true);
226232
getGuideEditPart().getGuideLineFigure().setVisible(true);

org.eclipse.gef/src/org/eclipse/gef/internal/ui/rulers/RulerRootEditPart.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.eclipse.draw2d.Viewport;
2222
import org.eclipse.draw2d.geometry.Dimension;
2323
import org.eclipse.draw2d.geometry.Insets;
24+
import org.eclipse.draw2d.geometry.Point;
2425
import org.eclipse.draw2d.geometry.Rectangle;
2526

2627
import org.eclipse.gef.AutoexposeHelper;
@@ -246,6 +247,13 @@ public void setContents(IFigure figure) {
246247
}
247248
}
248249

250+
@Override
251+
public Point getViewLocation() {
252+
Point viewLocation = new Point(getHorizontalRangeModel().getValue(), getVerticalRangeModel().getValue());
253+
getFigure().translateToRelative(viewLocation);
254+
return viewLocation;
255+
}
256+
249257
/**
250258
* RulerViewport uses local coordinates.
251259
*

org.eclipse.gef/src/org/eclipse/gef/ui/rulers/RulerComposite.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,13 @@
3434
import org.eclipse.draw2d.FigureCanvas;
3535
import org.eclipse.draw2d.Graphics;
3636
import org.eclipse.draw2d.IFigure;
37+
import org.eclipse.draw2d.LightweightSystem;
3738
import org.eclipse.draw2d.PositionConstants;
3839
import org.eclipse.draw2d.RangeModel;
40+
import org.eclipse.draw2d.ScalableLightweightSystem;
3941
import org.eclipse.draw2d.Viewport;
4042
import org.eclipse.draw2d.geometry.Insets;
43+
import org.eclipse.draw2d.internal.InternalDraw2dUtils;
4144

4245
import org.eclipse.gef.DragTracker;
4346
import org.eclipse.gef.EditDomain;
@@ -82,6 +85,7 @@ public class RulerComposite extends Composite {
8285
private boolean isRulerVisible = true;
8386
private boolean needToLayout = false;
8487
private final Runnable runnable = () -> layout(false);
88+
private double monitorScale = 1.0;
8589

8690
/**
8791
* Constructor
@@ -93,6 +97,7 @@ public class RulerComposite extends Composite {
9397
*/
9498
public RulerComposite(Composite parent, int style) {
9599
super(parent, style);
100+
InternalDraw2dUtils.configureForAutoscalingMode(this, scale -> monitorScale = scale);
96101
addDisposeListener(e -> disposeResources());
97102
}
98103

@@ -242,14 +247,15 @@ public void doLayout() {
242247
* Motif) leave some trimming around some canvasses.
243248
*/
244249
Rectangle trim = calculateEditorTrim(editor);
250+
// Positioning must compensate for the RulerBorder
251+
int rulerBorder = (int) Math.floor(1 * monitorScale);
245252
if (left != null) {
246-
// The - 1 and + 1 are to compensate for the RulerBorder
247-
left.getControl().setBounds(0, topHeight - trim.x + leftTrim.x - 1, leftWidth,
248-
editorSize.height - trim.height + leftTrim.height + 1);
253+
left.getControl().setBounds(0, topHeight - trim.x + leftTrim.x - rulerBorder, leftWidth,
254+
editorSize.height - trim.height + leftTrim.height + rulerBorder);
249255
}
250256
if (top != null) {
251-
top.getControl().setBounds(leftWidth - trim.y + topTrim.y - 1, 0,
252-
editorSize.width - trim.width + topTrim.width + 1, topHeight);
257+
top.getControl().setBounds(leftWidth - trim.y + topTrim.y - rulerBorder, 0,
258+
editorSize.width - trim.width + topTrim.width + rulerBorder, topHeight);
253259
}
254260
}
255261

@@ -458,6 +464,11 @@ public RulerViewer() {
458464
init();
459465
}
460466

467+
@Override
468+
protected LightweightSystem createLightweightSystem() {
469+
return InternalDraw2dUtils.isAutoScaleEnabled() ? new ScalableLightweightSystem() : new LightweightSystem();
470+
}
471+
461472
/**
462473
* @see org.eclipse.gef.EditPartViewer#appendSelection(org.eclipse.gef.EditPart)
463474
*/

0 commit comments

Comments
 (0)