comparison dwt/custom/CLabel.d @ 213:36f5cb12e1a2

Update to SWT 3.4M7
author Frank Benoit <benoit@tionex.de>
date Sat, 17 May 2008 17:34:28 +0200
parents ab60f3309436
children fd9c62a2998e
comparison
equal deleted inserted replaced
212:ab60f3309436 213:36f5cb12e1a2
31 import dwt.graphics.Font; 31 import dwt.graphics.Font;
32 import dwt.graphics.GC; 32 import dwt.graphics.GC;
33 import dwt.graphics.Image; 33 import dwt.graphics.Image;
34 import dwt.graphics.Point; 34 import dwt.graphics.Point;
35 import dwt.graphics.Rectangle; 35 import dwt.graphics.Rectangle;
36 import dwt.graphics.TextLayout;
36 import dwt.widgets.Canvas; 37 import dwt.widgets.Canvas;
37 import dwt.widgets.Composite; 38 import dwt.widgets.Composite;
38 import dwt.widgets.Control; 39 import dwt.widgets.Control;
39 import dwt.widgets.Display; 40 import dwt.widgets.Display;
40 41
795 int l = t.length; 796 int l = t.length;
796 int max = l/2; 797 int max = l/2;
797 int min = 0; 798 int min = 0;
798 int mid = (max+min)/2 - 1; 799 int mid = (max+min)/2 - 1;
799 if (mid <= 0) return t; 800 if (mid <= 0) return t;
801 TextLayout layout = new TextLayout (getDisplay());
802 layout.setText(t);
803 mid = validateOffset(layout, mid);
800 while (min < mid && mid < max) { 804 while (min < mid && mid < max) {
801 String s1 = t[0 .. mid].dup; 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 int l1 = gc.textExtent(s1, DRAW_FLAGS).x; 807 int l1 = gc.textExtent(s1, DRAW_FLAGS).x;
804 int l2 = gc.textExtent(s2, DRAW_FLAGS).x; 808 int l2 = gc.textExtent(s2, DRAW_FLAGS).x;
805 if (l1+w+l2 > width) { 809 if (l1+w+l2 > width) {
806 max = mid; 810 max = mid;
807 mid = (max+min)/2; 811 mid = validateOffset(layout, (max+min)/2);
808 } else if (l1+w+l2 < width) { 812 } else if (l1+w+l2 < width) {
809 min = mid; 813 min = mid;
810 mid = (max+min)/2; 814 mid = validateOffset(layout, (max+min)/2);
811 } else { 815 } else {
812 min = max; 816 min = max;
813 } 817 }
814 } 818 }
815 if (mid is 0) return t; 819 String result = mid is 0 ? t : t.substring(0, mid) ~ ELLIPSIS ~ t.substring(validateOffset(layout, l-mid), l);
816 return t[ 0 .. mid ] ~ ELLIPSIS ~ t[ l-mid .. l ]; 820 layout.dispose();
817 } 821 return result;
818 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 private String[] splitString(String text) { 828 private String[] splitString(String text) {
820 String[] lines = new String[1]; 829 String[] lines = new String[1];
821 int start = 0, pos; 830 int start = 0, pos;
822 do { 831 do {
823 pos = tango.text.Util.locate( text, '\n', start); 832 pos = tango.text.Util.locate( text, '\n', start);