Have icon for "reset" entry in reflog
[egit/eclipse.git] / org.eclipse.egit.ui / src / org / eclipse / egit / ui / internal / commit / LogicalLineNumberRulerColumn.java
blob09493d593ca176d246939de971b5b0c3bda8af20
1 /*******************************************************************************
2 * Copyright (C) 2016, Thomas Wolf <thomas.wolf@paranor.ch>
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License 2.0
6 * which accompanies this distribution, and is available at
7 * https://www.eclipse.org/legal/epl-2.0/
9 * SPDX-License-Identifier: EPL-2.0
10 *******************************************************************************/
11 package org.eclipse.egit.ui.internal.commit;
13 import org.eclipse.core.runtime.Assert;
14 import org.eclipse.jface.text.ITextViewer;
15 import org.eclipse.jface.text.source.LineNumberRulerColumn;
16 import org.eclipse.jgit.annotations.NonNull;
17 import org.eclipse.jgit.diff.DiffEntry;
19 /**
20 * A {@link LineNumberRulerColumn} that uses an
21 * {@link ILogicalLineNumberProvider} to determine the line numbers to show.
23 public class LogicalLineNumberRulerColumn extends LineNumberRulerColumn {
25 private ILogicalLineNumberProvider logicalLineNumberProvider;
27 private final @NonNull DiffEntry.Side side;
29 /**
30 * Zoom level for workaround for HiDPI line number rulers on macOS retina.
32 * @see <a href="https://bugs.eclipse.org/516322">Bug 516322</a>
34 int zoom = 100;
36 /**
37 * @param side
39 public LogicalLineNumberRulerColumn(@NonNull DiffEntry.Side side) {
40 this.side = side;
43 /**
44 * @return the {@link DiffEntry} side
46 protected @NonNull DiffEntry.Side getSide() {
47 return side;
50 /**
51 * Retrieves the {@link ILogicalLineNumberProvider} to use. This
52 * implementation returns a {@link LogicalLineNumberProvider}.
54 * @return the {@link ILogicalLineNumberProvider}
56 protected ILogicalLineNumberProvider getLogicalLineNumberProvider() {
57 if (logicalLineNumberProvider == null) {
58 ITextViewer viewer = getParentRuler().getTextViewer();
59 Assert.isNotNull(viewer);
60 logicalLineNumberProvider = new LogicalLineNumberProvider(getSide(),
61 viewer);
63 return logicalLineNumberProvider;
66 @Override
67 protected String createDisplayString(int line) {
68 int logicalLine = getLogicalLineNumberProvider().getLogicalLine(line);
69 return logicalLine < 0 ? "" : Integer.toString(logicalLine + 1); //$NON-NLS-1$
72 @Override
73 protected int computeNumberOfDigits() {
74 int max = getLogicalLineNumberProvider().getMaximum();
75 int digits = 2;
76 while (max > Math.pow(10, digits) - 1) {
77 ++digits;
79 return digits;
82 /**
83 * Enable workaround for HiDPI line number rulers on macOS retina. This
84 * method will override an internal method in Oxygen (4.7).
86 * @return true
87 * @see <a href="https://bugs.eclipse.org/516322">Bug 516322</a>
89 protected boolean internalSupportsZoomedPaint() {
90 return true;
93 /**
94 * Store zoom level for workaround for HiDPI line number rulers on macOS
95 * retina. This method will override an internal method in Oxygen (4.7).
97 * @param zoomLevel
98 * the zoom level to use for drawing operations
99 * @see <a href="https://bugs.eclipse.org/516322">Bug 516322</a>
101 protected void internalSetZoom(int zoomLevel) {
102 this.zoom = zoomLevel;