Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorXi Yan2018-07-04 20:50:22 +0000
committerXi Yan2018-07-10 14:01:04 +0000
commit90b11d0439eaf39696ee5c80da07e42a77c9ce34 (patch)
tree027b8adc86ca8e7dc511c24491196ba183ca64b4 /tests
parent2ef6954b2724f4b0e6be7d10562b1cdac3ce7206 (diff)
downloadeclipse.platform.swt-90b11d0439eaf39696ee5c80da07e42a77c9ce34.tar.gz
eclipse.platform.swt-90b11d0439eaf39696ee5c80da07e42a77c9ce34.tar.xz
eclipse.platform.swt-90b11d0439eaf39696ee5c80da07e42a77c9ce34.zip
Bug 531882 (Snippet230_tableCol_icon_packing) - [Gtk3] Snippet230,
tablecolumn icons on right size get cut off 1) In GTK3, event.width in PaintItem is the same as the one previously set in MeasureItem. Snippet230 paints icons at the default event.width position on the right of text in PaintItem, so the icons were painted too far right as a result. This was fixed by explicitly setting event.width to be used in PaintItem to the default event.width using gtk_cell_renderer_set_fixed_size. 2) Custom drawn icons in the expander column of Tree is not positioned correctly. Fixed by adding expander arrow indent in the x position. 3) Calling TreeColumn#pack() for the first time do not account for the indent in the expander column because gtk_tree_view_get_expander_column() returns 0 if expander column is not visible. This was fixed by setting column to visible beforehand in Tree#calculateWidth. Change-Id: I04a26c94ff716c1a52c84d2dbe8ef96386b17035 Signed-off-by: Xi Yan <xixiyan@redhat.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug531882_TreeColIconPacking.java112
1 files changed, 112 insertions, 0 deletions
diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug531882_TreeColIconPacking.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug531882_TreeColIconPacking.java
new file mode 100644
index 0000000000..09a4bd70ff
--- /dev/null
+++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug531882_TreeColIconPacking.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Red Hat and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.tests.gtk.snippets;
+
+/*
+ * Tree example snippet: draw images on right side of tree item
+ *
+ * For more info on custom-drawing TreeItem and TreeItem content see
+ * http://www.eclipse.org/articles/article.php?file=Article-CustomDrawingTableAndTreeItems/index.html
+ *
+ * For a list of all SWT example snippets see
+ * http://www.eclipse.org/swt/snippets/
+ *
+ * @since 3.2
+ */
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.swt.widgets.TreeItem;
+
+public class Bug531882_TreeColIconPacking {
+
+public static void main(String [] args) {
+ Display display = new Display();
+ final Image image = display.getSystemImage(SWT.ICON_INFORMATION);
+ Shell shell = new Shell(display);
+
+ shell.setText("Images on the right side of the TreeItem");
+ shell.setLayout(new FillLayout ());
+
+ Tree tree = new Tree(shell, SWT.MULTI | SWT.FULL_SELECTION);
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+
+ int columnCount = 3;
+ for (int i=0; i<columnCount; i++) {
+ TreeColumn column = new TreeColumn(tree, SWT.NONE);
+ column.setText("Column " + i);
+ }
+
+ int itemCount = 4;
+ for(int i = 0; i < itemCount; i++) {
+ TreeItem item = new TreeItem(tree, SWT.NONE);
+ item.setText(new String[] {"item "+i+" a", "item "+i+" b", "item "+i+" c"});
+ for (int j = 0; j < itemCount; j++) {
+ TreeItem subItem = new TreeItem(item, SWT.NONE);
+ subItem.setText(new String[] {"sub-item " + j + " a", "sub-item " + j + " b", "sub-item " + j + " c"});
+ for (int k = 0; k < itemCount; k++) {
+ TreeItem kItem = new TreeItem(subItem, SWT.NONE);
+ kItem.setText(new String[] {"sub-sub-item "+k+" a", "sub-sub-item "+k+" b", "sub-sub-item "+k+" c"});
+ }
+ }
+ }
+
+ /*
+ * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
+ * Therefore, it is critical for performance that these methods be
+ * as efficient as possible.
+ */
+ Listener paintListener = event -> {
+ switch(event.type) {
+ case SWT.MeasureItem: {
+ Rectangle rect1 = image.getBounds();
+ event.width += rect1.width;
+ event.height = Math.max(event.height, rect1.height + 2);
+ break;
+ }
+ case SWT.PaintItem: {
+ int x = event.x + event.width;
+ Rectangle rect2 = image.getBounds();
+ int offset = Math.max(0, (event.height - rect2.height) / 2);
+ event.gc.drawImage(image, x, event.y + offset);
+ break;
+ }
+ }
+ };
+ tree.addListener(SWT.MeasureItem, paintListener);
+ tree.addListener(SWT.PaintItem, paintListener);
+
+ tree.setVisible(true);
+
+ for(int i = 0; i < columnCount; i++) {
+ tree.getColumn(i).pack();
+ }
+
+// for(int i = 0; i < columnCount; i++) {
+// tree.getColumn(i).pack();
+// }
+
+ shell.setSize(500, 200);
+ shell.open();
+ while(!shell.isDisposed ()) {
+ if(!display.readAndDispatch()) display.sleep();
+ }
+ if(image != null) image.dispose();
+ display.dispose();
+}
+}

Back to the top