Changeset 213:36f5cb12e1a2 for dwt/custom/CLabel.d
- Timestamp:
- 05/17/08 11:34:28 (8 months ago)
- Files:
-
- dwt/custom/CLabel.d (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
dwt/custom/CLabel.d
r212 r213 34 34 import dwt.graphics.Point; 35 35 import dwt.graphics.Rectangle; 36 import dwt.graphics.TextLayout; 36 37 import dwt.widgets.Canvas; 37 38 import dwt.widgets.Composite; … … 798 799 int mid = (max+min)/2 - 1; 799 800 if (mid <= 0) return t; 801 TextLayout layout = new TextLayout (getDisplay()); 802 layout.setText(t); 803 mid = validateOffset(layout, mid); 800 804 while (min < mid && mid < max) { 801 805 String s1 = t[0 .. mid].dup; 802 String s2 = t [l-mid .. l].dup;806 String s2 = t.substring(validateOffset(layout, l-mid), l); 803 807 int l1 = gc.textExtent(s1, DRAW_FLAGS).x; 804 808 int l2 = gc.textExtent(s2, DRAW_FLAGS).x; 805 809 if (l1+w+l2 > width) { 806 810 max = mid; 807 mid = (max+min)/2;811 mid = validateOffset(layout, (max+min)/2); 808 812 } else if (l1+w+l2 < width) { 809 813 min = mid; 810 mid = (max+min)/2;814 mid = validateOffset(layout, (max+min)/2); 811 815 } else { 812 816 min = max; 813 817 } 814 818 } 815 if (mid is 0) return t; 816 return t[ 0 .. mid ] ~ ELLIPSIS ~ t[ l-mid .. l ]; 817 } 818 819 String result = mid is 0 ? t : t.substring(0, mid) ~ ELLIPSIS ~ t.substring(validateOffset(layout, l-mid), l); 820 layout.dispose(); 821 return result; 822 } 823 int validateOffset(TextLayout layout, int offset) { 824 int nextOffset = layout.getNextOffset(offset, DWT.MOVEMENT_CLUSTER); 825 if (nextOffset !is offset) return layout.getPreviousOffset(nextOffset, DWT.MOVEMENT_CLUSTER); 826 return offset; 827 } 819 828 private String[] splitString(String text) { 820 829 String[] lines = new String[1];
