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
;
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
;
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>
39 public LogicalLineNumberRulerColumn(@NonNull DiffEntry
.Side side
) {
44 * @return the {@link DiffEntry} side
46 protected @NonNull DiffEntry
.Side
getSide() {
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(),
63 return logicalLineNumberProvider
;
67 protected String
createDisplayString(int line
) {
68 int logicalLine
= getLogicalLineNumberProvider().getLogicalLine(line
);
69 return logicalLine
< 0 ?
"" : Integer
.toString(logicalLine
+ 1); //$NON-NLS-1$
73 protected int computeNumberOfDigits() {
74 int max
= getLogicalLineNumberProvider().getMaximum();
76 while (max
> Math
.pow(10, digits
) - 1) {
83 * Enable workaround for HiDPI line number rulers on macOS retina. This
84 * method will override an internal method in Oxygen (4.7).
87 * @see <a href="https://bugs.eclipse.org/516322">Bug 516322</a>
89 protected boolean internalSupportsZoomedPaint() {
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).
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
;