1 #!/usr/bin/env dub 2 /+ 3 dub.sdl: 4 name "snippet_paint_item" 5 dependency "dwt" path="../../../../../../" 6 stringImportPaths "../../../../../res" 7 libs \ 8 "atk-1.0" \ 9 "cairo" \ 10 "dl" \ 11 "fontconfig" \ 12 "gdk-x11-2.0" \ 13 "gdk_pixbuf-2.0" \ 14 "glib-2.0" \ 15 "gmodule-2.0" \ 16 "gnomeui-2" \ 17 "gnomevfs-2" \ 18 "gobject-2.0" \ 19 "gthread-2.0" \ 20 "gtk-x11-2.0" \ 21 "pango-1.0" \ 22 "pangocairo-1.0" \ 23 "X11" \ 24 "Xcomposite" \ 25 "Xcursor" \ 26 "Xdamage" \ 27 "Xext" \ 28 "Xfixes" \ 29 "Xi" \ 30 "Xinerama" \ 31 "Xrandr" \ 32 "Xrender" \ 33 "Xtst" \ 34 platform="linux" 35 +/ 36 37 /** 38 * Author: kntroh 39 * License: CC0(http://creativecommons.org/publicdomain/zero/1.0/) 40 */ 41 module org.eclipse.swt.snippets.SnippetPaintItem; 42 43 /* 44 * Example for custom drawing a TableItem. 45 * 46 * For more information on custom drawing, see the this articles: 47 * https://www.eclipse.org/articles/article.php?file=Article-CustomDrawingTableAndTreeItems/index.html 48 */ 49 50 import org.eclipse.swt.all; 51 52 import java.io.ByteArrayInputStream; 53 import java.lang.all; 54 55 void main() { 56 auto d = new Display; 57 auto s = new Shell(d); 58 s.setText("SnippetPaintItem"); 59 s.setLayout(new FillLayout); 60 s.setSize(200, 150); 61 62 auto table = new Table(s, SWT.FULL_SELECTION); 63 table.setHeaderVisible(true); 64 auto column0 = new TableColumn(table, SWT.NONE); 65 column0.setText("Column0"); 66 column0.setWidth(80); 67 auto column1 = new TableColumn(table, SWT.NONE); 68 column1.setText("Column1"); 69 column1.setWidth(80); 70 71 auto image = new Image(d, new ImageData(new ByteArrayInputStream(cast(byte[])import("eclipse.png")))); 72 auto item0 = new TableItem(table, SWT.NONE); 73 item0.setImage(0, image); 74 item0.setText(0, "TableItem - 0-0"); 75 item0.setText(1, "TableItem - 0-1"); 76 auto item1 = new TableItem(table, SWT.NONE); 77 item1.setImage(1, image); 78 item1.setText(0, "TableItem - 1-0"); 79 item1.setText(1, "TableItem - 1-1"); 80 auto item2 = new TableItem(table, SWT.NONE); 81 item2.setText(0, "TableItem - 2-0"); 82 item2.setText(1, "TableItem - 2-1"); 83 84 table.addListener(SWT.EraseItem, new class Listener { 85 override void handleEvent(Event e) { 86 e.gc.fillRectangle(e.x, e.y, e.width, e.height); 87 e.detail = e.detail & ~SWT.FOREGROUND; 88 } 89 }); 90 table.addListener(SWT.PaintItem, new class Listener { 91 override void handleEvent(Event e) { 92 auto item = cast(TableItem)e.item; 93 auto column = e.index; 94 auto index = table.indexOf(item); 95 auto image = item.getImage(column); 96 if (image) { 97 auto imageBounds = item.getImageBounds(column); 98 auto iconBounds = image.getBounds(); 99 if (column == 1) { 100 e.gc.setAlpha(128); 101 } 102 e.gc.drawImage(image, imageBounds.x, imageBounds.y + (imageBounds.height - iconBounds.height) / 2); 103 e.gc.setAlpha(255); 104 } 105 auto textBounds = item.getTextBounds(column); 106 string text; 107 switch (index) { 108 case 0: 109 text = "one"; 110 break; 111 case 1: 112 text = "two"; 113 break; 114 case 2: 115 text = "three"; 116 break; 117 default: 118 assert (0); 119 } 120 if (column == 1) { 121 text = "sub-" ~ text; 122 } 123 auto textHeight = e.gc.textExtent(text).y; 124 e.gc.drawText(text, textBounds.x, textBounds.y + (textBounds.height - textHeight) / 2, true); 125 } 126 }); 127 128 s.open(); 129 while (!s.isDisposed()) { 130 if (!d.readAndDispatch()) { 131 d.sleep(); 132 } 133 } 134 image.dispose(); 135 d.dispose(); 136 }