# HG changeset patch # User Frank Benoit # Date 1217808373 -7200 # Node ID 6956821fe8ed9d72ff3798c17e3fafb6a1a3ed39 # Parent 05e48e1e65d1944a973c7ebca8916c6e9f721891 Fixes for StyledText diff -r 05e48e1e65d1 -r 6956821fe8ed dwt/custom/StyledText.d --- a/dwt/custom/StyledText.d Mon Aug 04 02:05:58 2008 +0200 +++ b/dwt/custom/StyledText.d Mon Aug 04 02:06:13 2008 +0200 @@ -471,7 +471,7 @@ printerRenderer = null; } } - void init() { + void init_() { Rectangle trim = printer.computeTrim(0, 0, 0, 0); Point dpi = printer.getDPI(); @@ -723,7 +723,7 @@ jobName = "Printing"; } if (printer.startJob(jobName)) { - init(); + init_(); print(); dispose(); printer.endJob(); @@ -5008,6 +5008,7 @@ case DWT.COMPOSITION_SELECTION: handleCompositionSelection(event); break; case DWT.COMPOSITION_CHANGED: handleCompositionChanged(event); break; case DWT.COMPOSITION_OFFSET: handleCompositionOffset(event); break; + default: } } }); diff -r 05e48e1e65d1 -r 6956821fe8ed dwt/custom/StyledTextContent.d --- a/dwt/custom/StyledTextContent.d Mon Aug 04 02:05:58 2008 +0200 +++ b/dwt/custom/StyledTextContent.d Mon Aug 04 02:06:13 2008 +0200 @@ -143,7 +143,7 @@ *

* * @param listener the listener which should no longer be notified - * + * * @exception IllegalArgumentException

diff -r 05e48e1e65d1 -r 6956821fe8ed dwt/graphics/TextLayout.d --- a/dwt/graphics/TextLayout.d Mon Aug 04 02:05:58 2008 +0200 +++ b/dwt/graphics/TextLayout.d Mon Aug 04 02:06:13 2008 +0200 @@ -140,7 +140,7 @@ if (styles.length is 2 && styles[0].style is null && ascent is -1 && descent is -1 && segments is null) return; auto ptr = OS.pango_layout_get_text(layout); attrList = OS.pango_attr_list_new(); - //PangoAttribute* attribute = new PangoAttribute(); + PangoAttribute* attribute; char[] chars = null; int segementsLength = segmentsText.length; if ((ascent !is -1 || descent !is -1) && segementsLength > 0) { @@ -156,12 +156,14 @@ /* Note: The length in bytes of ZWS and ZWNBS are both equals to 3 */ int offset = lineIndex * 6; PangoAttribute* attr = OS.pango_attr_shape_new (&rect, &rect); - attr.start_index = bytePos + offset; - attr.end_index = bytePos + offset + 3; + attribute = attr; + attribute.start_index = bytePos + offset; + attribute.end_index = bytePos + offset + 3; OS.pango_attr_list_insert(attrList, attr); attr = OS.pango_attr_shape_new (&rect, &rect); - attr.start_index = bytePos + offset + 3; - attr.end_index = bytePos + offset + 6; + attribute = attr; + attribute.start_index = bytePos + offset + 3; + attribute.end_index = bytePos + offset + 6; OS.pango_attr_list_insert(attrList, attr); int pos = bytePos;//OS.g_utf8_pointer_to_offset(ptr, ptr + bytePos); chars[pos + lineIndex * 6 +0 .. pos + lineIndex * 6 + 3] = STR_ZWS; @@ -1347,28 +1349,31 @@ } PangoLogAttr* attrs; int nAttrs; + // return one attr per codepoint (=char in pango) OS.pango_layout_get_log_attrs(layout, &attrs, &nAttrs); if (attrs is null) return offset + step; - length_ = OS.g_utf8_strlen(cont, -1); + length_ = dcont.length;//OS.g_utf8_strlen(cont, -1); offset = translateOffset(offset); offset = dcont.utf8AdjustOffset( offset ); - PangoLogAttr* logAttr = new PangoLogAttr(); + + PangoLogAttr* logAttr; offset = validateOffset( dcont, offset, step); + // the loop is byte oriented while (0 < offset && offset < length_) { - *logAttr = attrs[ offset ]; - if (((movement & DWT.MOVEMENT_CLUSTER) !is 0) && ( logAttr.bitfield0 & (1<<4/*is_cursor_position*/))) break; + logAttr = & attrs[ OS.g_utf8_pointer_to_offset( cont, cont+offset) ]; + if (((movement & DWT.MOVEMENT_CLUSTER) !is 0) && logAttr.is_cursor_position ) break; if ((movement & DWT.MOVEMENT_WORD) !is 0) { if (forward) { - if (logAttr.bitfield0 & (1<<6/*is_word_end*/)) break; + if (logAttr.is_word_end ) break; } else { - if (logAttr.bitfield0 & (1<<5/*is_word_start*/)) break; + if (logAttr.is_word_start ) break; } } if ((movement & DWT.MOVEMENT_WORD_START) !is 0) { - if (logAttr.bitfield0 & (1<<5/*is_word_start*/)) break; + if (logAttr.is_word_start ) break; } if ((movement & DWT.MOVEMENT_WORD_END) !is 0) { - if (logAttr.bitfield0 & (1<<6/*is_word_end*/)) break; + if (logAttr.is_word_end ) break; } offset = validateOffset( dcont, offset, step); } diff -r 05e48e1e65d1 -r 6956821fe8ed dwt/internal/c/pango.d --- a/dwt/internal/c/pango.d Mon Aug 04 02:05:58 2008 +0200 +++ b/dwt/internal/c/pango.d Mon Aug 04 02:06:13 2008 +0200 @@ -531,6 +531,30 @@ } struct _PangoLogAttr { uint bitfield0; +bool is_line_break (){ return (bitfield0 & (1<< 0)) !is 0; } +bool is_mandatory_break (){ return (bitfield0 & (1<< 1)) !is 0; } +bool is_char_break (){ return (bitfield0 & (1<< 2)) !is 0; } +bool is_white (){ return (bitfield0 & (1<< 3)) !is 0; } +bool is_cursor_position (){ return (bitfield0 & (1<< 4)) !is 0; } +bool is_word_start (){ return (bitfield0 & (1<< 5)) !is 0; } +bool is_word_end (){ return (bitfield0 & (1<< 6)) !is 0; } +bool is_sentence_boundary (){ return (bitfield0 & (1<< 7)) !is 0; } +bool is_sentence_start (){ return (bitfield0 & (1<< 8)) !is 0; } +bool is_sentence_end (){ return (bitfield0 & (1<< 9)) !is 0; } +bool backspace_deletes_character(){ return (bitfield0 & (1<<10)) !is 0; } +bool is_expandable_space (){ return (bitfield0 & (1<<11)) !is 0; } +bool is_line_break (bool v){ if(v) bitfield0 |= (1<< 0); else bitfield0 &= ~(1<< 0); return v; } +bool is_mandatory_break (bool v){ if(v) bitfield0 |= (1<< 1); else bitfield0 &= ~(1<< 1); return v; } +bool is_char_break (bool v){ if(v) bitfield0 |= (1<< 2); else bitfield0 &= ~(1<< 2); return v; } +bool is_white (bool v){ if(v) bitfield0 |= (1<< 3); else bitfield0 &= ~(1<< 3); return v; } +bool is_cursor_position (bool v){ if(v) bitfield0 |= (1<< 4); else bitfield0 &= ~(1<< 4); return v; } +bool is_word_start (bool v){ if(v) bitfield0 |= (1<< 5); else bitfield0 &= ~(1<< 5); return v; } +bool is_word_end (bool v){ if(v) bitfield0 |= (1<< 6); else bitfield0 &= ~(1<< 6); return v; } +bool is_sentence_boundary (bool v){ if(v) bitfield0 |= (1<< 7); else bitfield0 &= ~(1<< 7); return v; } +bool is_sentence_start (bool v){ if(v) bitfield0 |= (1<< 8); else bitfield0 &= ~(1<< 8); return v; } +bool is_sentence_end (bool v){ if(v) bitfield0 |= (1<< 9); else bitfield0 &= ~(1<< 9); return v; } +bool backspace_deletes_character(bool v){ if(v) bitfield0 |= (1<<10); else bitfield0 &= ~(1<<10); return v; } +bool is_expandable_space (bool v){ if(v) bitfield0 |= (1<<11); else bitfield0 &= ~(1<<11); return v; } // uint is_line_break // bits 0 .. 1 // uint is_mandatory_break // bits 1 .. 2 // uint is_char_break // bits 2 .. 3