Skip to content

[Windows] [Tree] Column icons and text overlaps in multi resolution monitor setup #3075

@glasedom

Description

@glasedom

Eclipse: 4.38
OS: Windows 11
Monitor Setup: Primary Monitor 100% (1920x1080), Second Monitor 150% (3840x2160)

In our RCP application we have some views and editors where the icons and text of tree cells are overlapped in a monitor setup with multiple resolutions.
I have created a mini snippet that demonstrates the problem.

Steps to reproduce

Open the given sample program.
The tree looks like this:

Image

Move the window from the primary monitor to the second monitor.
You can see that icon and text overlaps in the second column.

Image

If you move the window back to the primary monitor the icon and text still overlaps.

Image

Here is the sample snippet:

import java.io.File;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeColumn;

public class CellIconError {

	public CellIconError(Shell shell) {
		final TreeViewer v = new TreeViewer(shell, SWT.BORDER | SWT.FULL_SELECTION);
		v.setContentProvider(new DummyContentProvider());

		TreeColumn column = new TreeColumn(v.getTree(), SWT.NONE);
		column.setWidth(200);
		column.setText("Column 1");
		TreeViewerColumn viewerColumn = new TreeViewerColumn(v, column);
		viewerColumn.setLabelProvider(new DelegatingStyledCellLabelProvider(new DummyLabelProvider()));

		column = new TreeColumn(v.getTree(), SWT.NONE);
		column.setWidth(200);
		column.setText("Column 2");
		viewerColumn = new TreeViewerColumn(v, column);
		viewerColumn.setLabelProvider(new DelegatingStyledCellLabelProvider(new DummyLabelProviderWithCellImage()));

		v.setInput(new File[] { new File("C:\\") });
		v.getTree().setLinesVisible(true);
		v.getTree().setHeaderVisible(true);
	}

	public static void main(String[] args) {
		System.setProperty("swt.autoScale.updateOnRuntime", "true");
		Display display = new Display();
		
		JFaceResources.getImageRegistry().put("stop", ImageDescriptor.createFromURLSupplier(true, () -> {
			return Action.class.getResource("images/stop.png");
		}));

		Shell shell = new Shell(display);
		shell.setLayout(new FillLayout());
		new CellIconError(shell);
		shell.setSize(600, 150);
		shell.open();

		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}

		display.dispose();
	}
	
	public static class DummyLabelProvider extends LabelProvider implements IStyledLabelProvider {

		@Override
		public StyledString getStyledText(Object element) {
			return new StyledString(element.toString());
		}
		
	}

	public static class DummyLabelProviderWithCellImage extends LabelProvider implements IStyledLabelProvider {

		@Override
		public StyledString getStyledText(Object element) {
			return new StyledString(element.toString());
		}
		
		@Override
		public Image getImage(Object element) {
			return JFaceResources.getImage("stop");
		}

	}
	
	public static class DummyContentProvider extends ArrayContentProvider implements ITreeContentProvider {

		@Override
		public Object[] getChildren(Object parentElement) {
			return new Object[0];
		}

		@Override
		public Object getParent(Object element) {
			return null;
		}

		@Override
		public boolean hasChildren(Object element) {
			return false;
		}
		
	}

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions