void paintControl(PaintEvent e) { updateLastVisible(); Point listSize = getSize(); Point itemSize = new Point(listSize.x, 0); int curY = 0; Transform translator = new Transform(Display.getDefault()); e.gc.setTransform(translator); for (int i = _firstVisibleItem; i < _lastVisibleItem; i++) { ListItem item = getListItem(i); itemSize.y = item.getPreferredHeight(e.gc); translator.translate(0, -curY); item.paintControl(e.gc, 0, itemSize); translator.translate(0, curY); curY += itemSize.y; } translator.dispose(); }