Show
Ignore:
Timestamp:
05/17/08 11:34:28 (8 months ago)
Author:
Frank Benoit <benoit@tionex.de>
branch:
default
Message:

Update to SWT 3.4M7

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • dwt/custom/CLabel.d

    r212 r213  
    3434import dwt.graphics.Point; 
    3535import dwt.graphics.Rectangle; 
     36import dwt.graphics.TextLayout; 
    3637import dwt.widgets.Canvas; 
    3738import dwt.widgets.Composite; 
     
    798799    int mid = (max+min)/2 - 1; 
    799800    if (mid <= 0) return t; 
     801    TextLayout layout = new TextLayout (getDisplay()); 
     802    layout.setText(t); 
     803    mid = validateOffset(layout, mid); 
    800804    while (min < mid && mid < max) { 
    801805        String s1 = t[0 .. mid].dup; 
    802         String s2 = t[l-mid .. l].dup
     806        String s2 = t.substring(validateOffset(layout, l-mid), l)
    803807        int l1 = gc.textExtent(s1, DRAW_FLAGS).x; 
    804808        int l2 = gc.textExtent(s2, DRAW_FLAGS).x; 
    805809        if (l1+w+l2 > width) { 
    806810            max = mid; 
    807             mid = (max+min)/2
     811            mid = validateOffset(layout, (max+min)/2)
    808812        } else if (l1+w+l2 < width) { 
    809813            min = mid; 
    810             mid = (max+min)/2
     814            mid = validateOffset(layout, (max+min)/2)
    811815        } else { 
    812816            min = max; 
    813817        } 
    814818    } 
    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
     823int 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
    819828private String[] splitString(String text) { 
    820829    String[] lines = new String[1];