Mercurial > projects > dwt-linux
annotate dwt/graphics/TextLayout.d @ 238:380bad9f6852
reverted char[] to String
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 05 May 2008 00:42:55 +0200 |
parents | 08789b28bdf3 |
children | ce446666f5a2 |
rev | line source |
---|---|
72 | 1 /******************************************************************************* |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2 * Copyright (c) 2000, 2007 IBM Corporation and others. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 * All rights reserved. This program and the accompanying materials |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
4 * are made available under the terms of the Eclipse Public License v1.0 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
5 * which accompanies this distribution, and is available at |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
6 * http://www.eclipse.org/legal/epl-v10.html |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
7 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 * Contributors: |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 * IBM Corporation - initial API and implementation |
72 | 10 * Port to the D programming language: |
11 * Frank Benoit <benoit@tionex.de> | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 *******************************************************************************/ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 module dwt.graphics.TextLayout; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
14 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
15 import dwt.internal.cairo.Cairo; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
16 import dwt.internal.gtk.OS; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
17 import dwt.internal.Converter; |
71 | 18 import dwt.DWT; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
19 import dwt.graphics.Color; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
20 import dwt.graphics.Device; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
21 import dwt.graphics.Font; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
22 import dwt.graphics.FontMetrics; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
23 import dwt.graphics.GC; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 import dwt.graphics.GCData; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 import dwt.graphics.GlyphMetrics; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
26 import dwt.graphics.Point; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
27 import dwt.graphics.Rectangle; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
28 import dwt.graphics.Region; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 import dwt.graphics.Resource; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 import dwt.graphics.TextStyle; |
200
08789b28bdf3
import dwt.dwthelper.utils now explicit
Frank Benoit <benoit@tionex.de>
parents:
183
diff
changeset
|
31 import dwt.dwthelper.utils; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 import tango.text.convert.Format; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 import tango.stdc.stringz; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 import tango.stdc.string; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 import tango.text.convert.Utf; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 import Math = tango.math.Math; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 * <code>TextLayout</code> is a graphic object that represents |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 * styled text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
42 * <p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
43 * Instances of this class provide support for drawing, cursor |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
44 * navigation, hit testing, text wrapping, alignment, tab expansion |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 * line breaking, etc. These are aspects required for rendering internationalized text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 * </p><p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
47 * Application code must explicitly invoke the <code>TextLayout#dispose()</code> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
48 * method to release the operating system resources managed by each instance |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 * when those instances are no longer required. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
50 * </p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
51 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
52 * @since 3.0 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
54 public final class TextLayout : Resource { |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
55 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
56 static class StyleItem { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
57 TextStyle style; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
58 int start; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
59 |
238 | 60 public override String toString () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
61 return Format( "StyleItem {{{}, {}}", start, style ); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
62 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
63 } |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
64 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
65 Font font; |
238 | 66 String text; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
67 int ascent, descent; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
68 int[] segments; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
69 int[] tabs; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
70 StyleItem[] styles; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
71 PangoLayout* layout; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
72 PangoContext* context; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
73 PangoAttrList* attrList; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
74 int[] invalidOffsets; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
75 // LTR_MARK LEFT-TO-RIGHT MARK |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
76 // RTL_MARK RIGHT-TO-LEFT MARK |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
77 // ZWS ZERO WIDTH SPACE |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
78 // ZWNBS ZERO WIDTH NO-BREAK SPACE |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
79 static const dchar LTR_MARK = '\u200E', RTL_MARK = '\u200F', ZWS = '\u200B', ZWNBS = '\uFEFF'; |
238 | 80 static const String STR_LTR_MARK = "\u200E", STR_RTL_MARK = "\u200F", STR_ZWS = "\u200B", STR_ZWNBS = "\uFEFF"; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
81 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
82 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
83 * Constructs a new instance of this class on the given device. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
84 * <p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
85 * You must dispose the text layout when it is no longer required. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
86 * </p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
87 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
88 * @param device the device on which to allocate the text layout |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
89 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
90 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
91 * <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
92 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
93 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
94 * @see #dispose() |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
95 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
96 public this (Device device) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
97 if (device is null) device = Device.getDevice(); |
71 | 98 if (device is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
99 this.device = device; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
100 context = OS.gdk_pango_context_get(); |
71 | 101 if (context is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
102 OS.pango_context_set_language(context, OS.gtk_get_default_language()); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
103 OS.pango_context_set_base_dir(context, OS.PANGO_DIRECTION_LTR); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
104 OS.gdk_pango_context_set_colormap(context, OS.gdk_colormap_get_system()); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
105 layout = OS.pango_layout_new(context); |
71 | 106 if (layout is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
107 OS.pango_layout_set_wrap(layout, OS.PANGO_WRAP_WORD_CHAR); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
108 OS.pango_layout_set_tabs(layout, device.emptyTab); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
109 if (OS.GTK_VERSION >= OS.buildVERSION(2, 4, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
110 OS.pango_layout_set_auto_dir(layout, false); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
111 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
112 text = ""; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
113 ascent = descent = -1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
114 styles = new StyleItem[2]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
115 styles[0] = new StyleItem(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
116 styles[1] = new StyleItem(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
117 if (device.tracking) device.new_Object(this); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
118 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
119 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
120 void checkLayout() { |
71 | 121 if (isDisposed()) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
122 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
123 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
124 void computeRuns () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
125 if (attrList !is null) return; |
238 | 126 String segmentsText = getSegmentsText(); |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
127 OS.pango_layout_set_text (layout, segmentsText.ptr, segmentsText.length); |
140 | 128 if (styles.length is 2 && styles[0].style is null && ascent is -1 && descent is -1 && segments is null) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
129 auto ptr = OS.pango_layout_get_text(layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
130 attrList = OS.pango_attr_list_new(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
131 //PangoAttribute* attribute = new PangoAttribute(); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
132 char[] chars = null; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
133 int segementsLength = segmentsText.length; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
134 if ((ascent !is -1 || descent !is -1) && segementsLength > 0) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
135 auto iter = OS.pango_layout_get_iter(layout); |
71 | 136 if (iter is null) DWT.error(DWT.ERROR_NO_HANDLES); |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
137 PangoRectangle rect; |
140 | 138 if (ascent !is -1) rect.y = -(ascent * OS.PANGO_SCALE); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
139 rect.height = (Math.max(0, ascent) + Math.max(0, descent)) * OS.PANGO_SCALE; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
140 int lineCount = OS.pango_layout_get_line_count(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
141 chars = new char[segementsLength + lineCount * 6/*2*/]; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
142 int oldPos = 0, count = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
143 do { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
144 int bytePos = OS.pango_layout_iter_get_index(iter); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
145 /* Note: The length in bytes of ZWS and ZWNBS are both equals to 3 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
146 int offset = count * 6; |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
147 PangoAttribute* attr = OS.pango_attr_shape_new (&rect, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
148 attr.start_index = bytePos + offset; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
149 attr.end_index = bytePos + offset + 3; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
150 OS.pango_attr_list_insert(attrList, attr); |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
151 attr = OS.pango_attr_shape_new (&rect, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
152 attr.start_index = bytePos + offset + 3; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
153 attr.end_index = bytePos + offset + 6; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
154 OS.pango_attr_list_insert(attrList, attr); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
155 int pos = bytePos;//OS.g_utf8_pointer_to_offset(ptr, ptr + bytePos); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
156 chars[pos + count * 6 +0 .. pos + count * 6 + 3] = STR_ZWS; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
157 chars[pos + count * 6 +3 .. pos + count * 6 + 6] = STR_ZWNBS; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
158 chars[ oldPos + count*6 .. oldPos + count*6 + pos - oldPos ] = |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
159 segmentsText[ oldPos .. pos ]; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
160 oldPos = pos; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
161 count++; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
162 } while (OS.pango_layout_iter_next_line(iter)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
163 OS.pango_layout_iter_free (iter); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
164 chars[ oldPos + count*6 .. oldPos + count*6 + segementsLength - oldPos ] = |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
165 segmentsText[ oldPos .. segementsLength ]; |
238 | 166 String buffer = chars;// Converter.wcsToMbcs(null, chars, false); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
167 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
168 OS.pango_layout_set_text (layout, buffer.ptr, buffer.length); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
169 ptr = OS.pango_layout_get_text(layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
170 } else { |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
171 chars = segmentsText.dup; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
172 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
173 int offsetCount = 0; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
174 { |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
175 int i = 0; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
176 while( i < chars.length ){ |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
177 int incr; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
178 dchar c = firstCodePoint( chars[ i .. $ ], incr ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
179 if (c is LTR_MARK || c is RTL_MARK || c is ZWNBS || c is ZWS) { |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
180 offsetCount+=3; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
181 } |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
182 i += incr; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
183 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
184 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
185 invalidOffsets = new int[offsetCount]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
186 offsetCount = 0; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
187 { |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
188 int i = 0; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
189 while( i < chars.length ){ |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
190 int incr; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
191 dchar c = firstCodePoint( chars[ i .. $ ], incr ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
192 if (c is LTR_MARK || c is RTL_MARK || c is ZWNBS || c is ZWS) { |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
193 invalidOffsets[offsetCount++] = i; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
194 invalidOffsets[offsetCount++] = i+1; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
195 invalidOffsets[offsetCount++] = i+2; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
196 } |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
197 i += incr; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
198 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
199 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
200 int slen = strlen(ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
201 for (int i = 0; i < styles.length - 1; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
202 StyleItem styleItem = styles[i]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
203 TextStyle style = styleItem.style; |
140 | 204 if (style is null) continue; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
205 int start = translateOffset(styleItem.start); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
206 int end = translateOffset(styles[i+1].start - 1); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
207 int byteStart = start;//(OS.g_utf8_offset_to_pointer(ptr, start) - ptr); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
208 int byteEnd = end+1;//(OS.g_utf8_offset_to_pointer(ptr, end + 1) - ptr); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
209 byteStart = Math.min(byteStart, slen); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
210 byteEnd = Math.min(byteEnd, slen); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
211 Font font = style.font; |
140 | 212 if (font !is null && !font.isDisposed()) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
213 auto attr = OS.pango_attr_font_desc_new (font.handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
214 attr.start_index = byteStart; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
215 attr.end_index = byteEnd; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
216 OS.pango_attr_list_insert(attrList, attr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
217 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
218 if (style.underline) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
219 auto attr = OS.pango_attr_underline_new(OS.PANGO_UNDERLINE_SINGLE); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
220 attr.start_index = byteStart; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
221 attr.end_index = byteEnd; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
222 OS.pango_attr_list_insert(attrList, attr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
223 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
224 if (style.strikeout) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
225 auto attr = OS.pango_attr_strikethrough_new(true); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
226 attr.start_index = byteStart; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
227 attr.end_index = byteEnd; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
228 OS.pango_attr_list_insert(attrList, attr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
229 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
230 Color foreground = style.foreground; |
140 | 231 if (foreground !is null && !foreground.isDisposed()) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
232 GdkColor* fg = foreground.handle; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
233 auto attr = OS.pango_attr_foreground_new(fg.red, fg.green, fg.blue); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
234 attr.start_index = byteStart; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
235 attr.end_index = byteEnd; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
236 OS.pango_attr_list_insert(attrList, attr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
237 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
238 Color background = style.background; |
140 | 239 if (background !is null && !background.isDisposed()) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
240 GdkColor* bg = background.handle; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
241 auto attr = OS.pango_attr_background_new(bg.red, bg.green, bg.blue); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
242 attr.start_index = byteStart; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
243 attr.end_index = byteEnd; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
244 OS.pango_attr_list_insert(attrList, attr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
245 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
246 GlyphMetrics metrics = style.metrics; |
140 | 247 if (metrics !is null) { |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
248 PangoRectangle rect; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
249 rect.y = -(metrics.ascent * OS.PANGO_SCALE); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
250 rect.height = (metrics.ascent + metrics.descent) * OS.PANGO_SCALE; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
251 rect.width = metrics.width * OS.PANGO_SCALE; |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
252 auto attr = OS.pango_attr_shape_new (&rect, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
253 attr.start_index = byteStart; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
254 attr.end_index = byteEnd; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
255 OS.pango_attr_list_insert(attrList, attr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
256 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
257 int rise = style.rise; |
140 | 258 if (rise !is 0) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
259 auto attr = OS.pango_attr_rise_new (rise * OS.PANGO_SCALE); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
260 attr.start_index = byteStart; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
261 attr.end_index = byteEnd; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
262 OS.pango_attr_list_insert(attrList, attr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
263 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
264 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
265 OS.pango_layout_set_attributes(layout, attrList); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
266 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
267 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
268 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
269 * Disposes of the operating system resources associated with |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
270 * the text layout. Applications must dispose of all allocated text layouts. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
271 */ |
150
f2e04420fd6c
reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents:
146
diff
changeset
|
272 public override void dispose() { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
273 if (layout is null) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
274 font = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
275 text = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
276 styles = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
277 freeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
278 if (layout !is null) OS.g_object_unref(layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
279 layout = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
280 if (context !is null) OS.g_object_unref(context); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
281 context = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
282 if (device.tracking) device.dispose_Object(this); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
283 device = null; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
284 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
285 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
286 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
287 * Draws the receiver's text using the specified GC at the specified |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
288 * point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
289 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
290 * @param gc the GC to draw |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
291 * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
292 * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
293 * |
71 | 294 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
295 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
296 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
297 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
298 * <li>ERROR_NULL_ARGUMENT - if the gc is null</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
299 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
300 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
301 public void draw(GC gc, int x, int y) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
302 draw(gc, x, y, -1, -1, null, null); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
303 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
304 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
305 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
306 * Draws the receiver's text using the specified GC at the specified |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
307 * point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
308 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
309 * @param gc the GC to draw |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
310 * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
311 * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
312 * @param selectionStart the offset where the selections starts, or -1 indicating no selection |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
313 * @param selectionEnd the offset where the selections ends, or -1 indicating no selection |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
314 * @param selectionForeground selection foreground, or NULL to use the system default color |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
315 * @param selectionBackground selection background, or NULL to use the system default color |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
316 * |
71 | 317 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
318 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
319 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
320 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
321 * <li>ERROR_NULL_ARGUMENT - if the gc is null</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
322 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
323 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
324 public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Color selectionForeground, Color selectionBackground) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
325 draw(gc, x, y, selectionStart, selectionEnd, selectionForeground, selectionBackground, 0); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
326 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
327 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
328 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
329 * Draws the receiver's text using the specified GC at the specified |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
330 * point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
331 * <p> |
71 | 332 * The parameter <code>flags</code> can include one of <code>DWT.DELIMITER_SELECTION</code> |
333 * or <code>DWT.FULL_SELECTION</code> to specify the selection behavior on all lines except | |
334 * for the last line, and can also include <code>DWT.LAST_LINE_SELECTION</code> to extend | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
335 * the specified selection behavior to the last line. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
336 * </p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
337 * @param gc the GC to draw |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
338 * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
339 * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
340 * @param selectionStart the offset where the selections starts, or -1 indicating no selection |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
341 * @param selectionEnd the offset where the selections ends, or -1 indicating no selection |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
342 * @param selectionForeground selection foreground, or NULL to use the system default color |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
343 * @param selectionBackground selection background, or NULL to use the system default color |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
344 * @param flags drawing options |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
345 * |
71 | 346 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
347 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
348 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
349 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
350 * <li>ERROR_NULL_ARGUMENT - if the gc is null</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
351 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
352 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
353 * @since 3.3 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
354 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
355 public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Color selectionForeground, Color selectionBackground, int flags) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
356 checkLayout (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
357 computeRuns(); |
71 | 358 if (gc is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); |
359 if (gc.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
360 if (selectionForeground !is null && selectionForeground.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
361 if (selectionBackground !is null && selectionBackground.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
362 gc.checkGC(GC.FOREGROUND); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
363 int length = text.length; |
140 | 364 bool hasSelection = selectionStart <= selectionEnd && selectionStart !is -1 && selectionEnd !is -1; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
365 GCData data = gc.data; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
366 auto cairo = data.cairo; |
140 | 367 if (flags !is 0 && (hasSelection || (flags & DWT.LAST_LINE_SELECTION) !is 0)) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
368 PangoLogAttr* attrs; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
369 int nAttrs; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
370 PangoLogAttr* logAttr = new PangoLogAttr(); |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
371 PangoRectangle rect; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
372 int lineCount = OS.pango_layout_get_line_count(layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
373 auto ptr = OS.pango_layout_get_text(layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
374 auto iter = OS.pango_layout_get_iter(layout); |
140 | 375 if (selectionBackground is null) selectionBackground = device.getSystemColor(DWT.COLOR_LIST_SELECTION); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
376 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
377 Cairo.cairo_save(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
378 GdkColor* color = selectionBackground.handle; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
379 Cairo.cairo_set_source_rgba(cairo, (color.red & 0xFFFF) / cast(float)0xFFFF, (color.green & 0xFFFF) / cast(float)0xFFFF, (color.blue & 0xFFFF) / cast(float)0xFFFF, data.alpha / cast(float)0xFF); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
380 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
381 OS.gdk_gc_set_foreground(gc.handle, selectionBackground.handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
382 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
383 int lineIndex = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
384 do { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
385 int lineEnd; |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
386 OS.pango_layout_iter_get_line_extents(iter, null, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
387 if (OS.pango_layout_iter_next_line(iter)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
388 int bytePos = OS.pango_layout_iter_get_index(iter); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
389 lineEnd = bytePos;//OS.g_utf8_pointer_to_offset(ptr, ptr + bytePos); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
390 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
391 lineEnd = OS.g_utf8_strlen(ptr, -1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
392 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
393 bool extent = false; |
140 | 394 if (lineIndex is lineCount - 1 && (flags & DWT.LAST_LINE_SELECTION) !is 0) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
395 extent = true; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
396 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
397 if (attrs is null) OS.pango_layout_get_log_attrs(layout, &attrs, &nAttrs); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
398 *logAttr = attrs[lineEnd]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
399 if (!( logAttr.bitfield0 & 0x01 /* PangoLogAttr.is_line_break is Bit0 */)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
400 if (selectionStart <= lineEnd && lineEnd <= selectionEnd) extent = true; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
401 } else { |
140 | 402 if (selectionStart <= lineEnd && lineEnd < selectionEnd && (flags & DWT.FULL_SELECTION) !is 0) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
403 extent = true; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
404 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
405 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
406 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
407 if (extent) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
408 int lineX = x + OS.PANGO_PIXELS(rect.x) + OS.PANGO_PIXELS(rect.width); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
409 int lineY = y + OS.PANGO_PIXELS(rect.y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
410 int height = OS.PANGO_PIXELS(rect.height); |
140 | 411 if (ascent !is -1 && descent !is -1) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
412 height = Math.max (height, ascent + descent); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
413 } |
140 | 414 int width = (flags & DWT.FULL_SELECTION) !is 0 ? 0x7fffffff : height / 3; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
415 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
416 Cairo.cairo_rectangle(cairo, lineX, lineY, width, height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
417 Cairo.cairo_fill(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
418 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
419 OS.gdk_draw_rectangle(data.drawable, gc.handle, 1, lineX, lineY, width, height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
420 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
421 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
422 lineIndex++; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
423 } while (lineIndex < lineCount); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
424 OS.pango_layout_iter_free(iter); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
425 if (attrs !is null) OS.g_free(attrs); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
426 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
427 Cairo.cairo_restore(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
428 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
429 OS.gdk_gc_set_foreground(gc.handle, data.foreground); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
430 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
431 } |
140 | 432 if (length is 0) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
433 if (!hasSelection) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
434 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
435 Cairo.cairo_move_to(cairo, x, y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
436 OS.pango_cairo_show_layout(cairo, layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
437 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
438 OS.gdk_draw_layout(data.drawable, gc.handle, x, y, layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
439 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
440 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
441 selectionStart = Math.min(Math.max(0, selectionStart), length - 1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
442 selectionEnd = Math.min(Math.max(0, selectionEnd), length - 1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
443 length = OS.g_utf8_strlen(OS.pango_layout_get_text(layout), -1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
444 selectionStart = translateOffset(selectionStart); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
445 selectionEnd = translateOffset(selectionEnd); |
140 | 446 if (selectionForeground is null) selectionForeground = device.getSystemColor(DWT.COLOR_LIST_SELECTION_TEXT); |
447 if (selectionBackground is null) selectionBackground = device.getSystemColor(DWT.COLOR_LIST_SELECTION); | |
448 bool fullSelection = selectionStart is 0 && selectionEnd is length - 1; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
449 if (fullSelection) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
450 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
451 auto ptr = OS.pango_layout_get_text(layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
452 drawWithCairo(cairo, x, y, 0, strlen(ptr), fullSelection, selectionBackground.handle, selectionForeground.handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
453 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
454 OS.gdk_draw_layout_with_colors(data.drawable, gc.handle, x, y, layout, selectionForeground.handle, selectionBackground.handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
455 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
456 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
457 auto ptr = OS.pango_layout_get_text(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
458 int byteSelStart = selectionStart;//(OS.g_utf8_offset_to_pointer(ptr, selectionStart) - ptr); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
459 int byteSelEnd = selectionEnd + 1;//(OS.g_utf8_offset_to_pointer(ptr, selectionEnd + 1) - ptr); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
460 int slen = strlen(ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
461 byteSelStart = Math.min(byteSelStart, slen); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
462 byteSelEnd = Math.min(byteSelEnd, slen); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
463 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
464 drawWithCairo(cairo, x, y, byteSelStart, byteSelEnd, fullSelection, selectionBackground.handle, selectionForeground.handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
465 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
466 Region clipping = new Region(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
467 gc.getClipping(clipping); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
468 OS.gdk_draw_layout(data.drawable, gc.handle, x, y, layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
469 int[] ranges = [byteSelStart, byteSelEnd]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
470 auto rgn = OS.gdk_pango_layout_get_clip_region(layout, x, y, ranges.ptr, ranges.length / 2); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
471 if (rgn !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
472 OS.gdk_gc_set_clip_region(gc.handle, rgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
473 OS.gdk_region_destroy(rgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
474 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
475 OS.gdk_draw_layout_with_colors(data.drawable, gc.handle, x, y, layout, selectionForeground.handle, selectionBackground.handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
476 gc.setClipping(clipping); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
477 clipping.dispose(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
478 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
479 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
480 } |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
481 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
482 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
483 void drawWithCairo(cairo_t* cairo, int x, int y, int byteSelStart, int byteSelEnd, bool fullSelection, GdkColor* selectionBackground, GdkColor* selectionForeground) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
484 Cairo.cairo_save(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
485 if (!fullSelection) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
486 Cairo.cairo_move_to(cairo, x, y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
487 OS.pango_cairo_show_layout(cairo, layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
488 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
489 int[] ranges = [byteSelStart, byteSelEnd]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
490 auto rgn = OS.gdk_pango_layout_get_clip_region(layout, x, y, ranges.ptr, ranges.length / 2); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
491 if (rgn !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
492 OS.gdk_cairo_region(cairo, rgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
493 Cairo.cairo_clip(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
494 OS.gdk_cairo_set_source_color(cairo, selectionBackground); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
495 Cairo.cairo_paint(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
496 OS.gdk_region_destroy(rgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
497 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
498 OS.gdk_cairo_set_source_color(cairo, selectionForeground); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
499 Cairo.cairo_move_to(cairo, x, y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
500 OS.pango_cairo_show_layout(cairo, layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
501 Cairo.cairo_restore(cairo); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
502 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
503 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
504 void freeRuns() { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
505 if (attrList is null) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
506 OS.pango_layout_set_attributes(layout, null ); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
507 OS.pango_attr_list_unref(attrList); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
508 attrList = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
509 invalidOffsets = null; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
510 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
511 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
512 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
513 * Returns the receiver's horizontal text alignment, which will be one |
71 | 514 * of <code>DWT.LEFT</code>, <code>DWT.CENTER</code> or |
515 * <code>DWT.RIGHT</code>. | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
516 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
517 * @return the alignment used to positioned text horizontally |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
518 * |
71 | 519 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
520 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
521 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
522 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
523 public int getAlignment() { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
524 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
525 auto alignment = OS.pango_layout_get_alignment(layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
526 switch ( cast(int)alignment) { |
71 | 527 case OS.PANGO_ALIGN_CENTER: return DWT.CENTER; |
528 case OS.PANGO_ALIGN_RIGHT: return DWT.RIGHT; | |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
529 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
530 } |
71 | 531 return DWT.LEFT; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
532 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
533 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
534 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
535 * Returns the ascent of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
536 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
537 * @return the ascent |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
538 * |
71 | 539 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
540 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
541 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
542 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
543 * @see #getDescent() |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
544 * @see #setDescent(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
545 * @see #setAscent(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
546 * @see #getLineMetrics(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
547 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
548 public int getAscent () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
549 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
550 return ascent; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
551 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
552 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
553 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
554 * Returns the bounds of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
555 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
556 * @return the bounds of the receiver |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
557 * |
71 | 558 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
559 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
560 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
561 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
562 public Rectangle getBounds() { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
563 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
564 computeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
565 int w, h; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
566 OS.pango_layout_get_size(layout, &w, &h); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
567 int wrapWidth = OS.pango_layout_get_width(layout); |
140 | 568 int width = OS.PANGO_PIXELS(wrapWidth !is -1 ? wrapWidth : w); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
569 int height = OS.PANGO_PIXELS(h); |
140 | 570 if (ascent !is -1 && descent !is -1) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
571 height = Math.max (height, ascent + descent); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
572 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
573 return new Rectangle(0, 0, width, height); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
574 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
575 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
576 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
577 * Returns the bounds for the specified range of characters. The |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
578 * bounds is the smallest rectangle that encompasses all characters |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
579 * in the range. The start and end offsets are inclusive and will be |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
580 * clamped if out of range. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
581 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
582 * @param start the start offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
583 * @param end the end offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
584 * @return the bounds of the character range |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
585 * |
71 | 586 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
587 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
588 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
589 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
590 public Rectangle getBounds(int start, int end) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
591 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
592 computeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
593 int length = text.length; |
140 | 594 if (length is 0) return new Rectangle(0, 0, 0, 0); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
595 if (start > end) return new Rectangle(0, 0, 0, 0); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
596 start = Math.min(Math.max(0, start), length - 1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
597 end = Math.min(Math.max(0, end), length - 1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
598 start = translateOffset(start); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
599 end = translateOffset(end); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
600 auto ptr = OS.pango_layout_get_text(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
601 auto cont = fromStringz(ptr); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
602 start = cont.utf8AdjustOffset( start ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
603 end = cont.utf8AdjustOffset( end ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
604 int incr = 1; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
605 if( end < cont.length ){ |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
606 incr = cont.getRelativeCodePointOffset( end, 1 ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
607 } |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
608 int byteStart = start;//(OS.g_utf8_offset_to_pointer (ptr, start) - ptr); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
609 int byteEnd = end + incr;//(OS.g_utf8_offset_to_pointer (ptr, end + 1) - ptr); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
610 int slen = strlen(ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
611 byteStart = Math.min(byteStart, slen); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
612 byteEnd = Math.min(byteEnd, slen); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
613 int[] ranges = [byteStart, byteEnd]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
614 auto clipRegion = OS.gdk_pango_layout_get_clip_region(layout, 0, 0, ranges.ptr, 1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
615 if (clipRegion is null) return new Rectangle(0, 0, 0, 0); |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
616 GdkRectangle rect; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
617 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
618 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
619 * Bug in Pango. The region returned by gdk_pango_layout_get_clip_region() |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
620 * includes areas from lines outside of the requested range. The fix |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
621 * is to subtract these areas from the clip region. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
622 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
623 PangoRectangle* pangoRect = new PangoRectangle(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
624 auto iter = OS.pango_layout_get_iter(layout); |
71 | 625 if (iter is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
626 auto linesRegion = OS.gdk_region_new(); |
71 | 627 if (linesRegion is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
628 int lineEnd = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
629 do { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
630 OS.pango_layout_iter_get_line_extents(iter, null, pangoRect); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
631 if (OS.pango_layout_iter_next_line(iter)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
632 lineEnd = OS.pango_layout_iter_get_index(iter) - 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
633 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
634 lineEnd = slen; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
635 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
636 if (byteStart > lineEnd) continue; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
637 rect.x = OS.PANGO_PIXELS(pangoRect.x); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
638 rect.y = OS.PANGO_PIXELS(pangoRect.y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
639 rect.width = OS.PANGO_PIXELS(pangoRect.width); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
640 rect.height = OS.PANGO_PIXELS(pangoRect.height); |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
641 OS.gdk_region_union_with_rect(linesRegion, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
642 } while (lineEnd + 1 <= byteEnd); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
643 OS.gdk_region_intersect(clipRegion, linesRegion); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
644 OS.gdk_region_destroy(linesRegion); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
645 OS.pango_layout_iter_free(iter); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
646 |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
647 OS.gdk_region_get_clipbox(clipRegion, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
648 OS.gdk_region_destroy(clipRegion); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
649 return new Rectangle(rect.x, rect.y, rect.width, rect.height); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
650 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
651 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
652 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
653 * Returns the descent of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
654 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
655 * @return the descent |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
656 * |
71 | 657 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
658 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
659 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
660 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
661 * @see #getAscent() |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
662 * @see #setAscent(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
663 * @see #setDescent(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
664 * @see #getLineMetrics(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
665 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
666 public int getDescent () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
667 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
668 return descent; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
669 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
670 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
671 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
672 * Returns the default font currently being used by the receiver |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
673 * to draw and measure text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
674 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
675 * @return the receiver's font |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
676 * |
71 | 677 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
678 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
679 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
680 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
681 public Font getFont () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
682 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
683 return font; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
684 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
685 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
686 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
687 * Returns the receiver's indent. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
688 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
689 * @return the receiver's indent |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
690 * |
71 | 691 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
692 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
693 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
694 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
695 * @since 3.2 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
696 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
697 public int getIndent () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
698 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
699 return OS.PANGO_PIXELS(OS.pango_layout_get_indent(layout)); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
700 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
701 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
702 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
703 * Returns the receiver's justification. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
704 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
705 * @return the receiver's justification |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
706 * |
71 | 707 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
708 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
709 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
710 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
711 * @since 3.2 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
712 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
713 public bool getJustify () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
714 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
715 return cast(bool) OS.pango_layout_get_justify(layout); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
716 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
717 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
718 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
719 * Returns the embedding level for the specified character offset. The |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
720 * embedding level is usually used to determine the directionality of a |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
721 * character in bidirectional text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
722 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
723 * @param offset the character offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
724 * @return the embedding level |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
725 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
726 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
727 * <li>ERROR_INVALID_ARGUMENT - if the character offset is out of range</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
728 * </ul> |
71 | 729 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
730 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
731 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
732 public int getLevel(int offset) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
733 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
734 computeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
735 int length = text.length; |
71 | 736 if (!(0 <= offset && offset <= length)) DWT.error(DWT.ERROR_INVALID_RANGE); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
737 offset = translateOffset(offset); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
738 auto iter = OS.pango_layout_get_iter(layout); |
71 | 739 if (iter is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
740 int level = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
741 PangoItem* item = new PangoItem(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
742 PangoLayoutRun* run = new PangoLayoutRun(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
743 auto ptr = OS.pango_layout_get_text(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
744 auto byteOffset = offset;//OS.g_utf8_offset_to_pointer(ptr, offset) - ptr; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
745 int slen = strlen(ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
746 byteOffset = Math.min(byteOffset, slen); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
747 do { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
748 auto runPtr = OS.pango_layout_iter_get_run(iter); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
749 if (runPtr !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
750 memmove(run, runPtr, PangoLayoutRun.sizeof); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
751 memmove(item, run.item, PangoItem.sizeof); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
752 if (item.offset <= byteOffset && byteOffset < item.offset + item.length) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
753 level = item.analysis.level; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
754 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
755 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
756 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
757 } while (OS.pango_layout_iter_next_run(iter)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
758 OS.pango_layout_iter_free(iter); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
759 return level; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
760 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
761 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
762 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
763 * Returns the bounds of the line for the specified line index. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
764 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
765 * @param lineIndex the line index |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
766 * @return the line bounds |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
767 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
768 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
769 * <li>ERROR_INVALID_ARGUMENT - if the line index is out of range</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
770 * </ul> |
71 | 771 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
772 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
773 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
774 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
775 public Rectangle getLineBounds(int lineIndex) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
776 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
777 computeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
778 int lineCount = OS.pango_layout_get_line_count(layout); |
71 | 779 if (!(0 <= lineIndex && lineIndex < lineCount)) DWT.error(DWT.ERROR_INVALID_RANGE); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
780 auto iter = OS.pango_layout_get_iter(layout); |
71 | 781 if (iter is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
782 for (int i = 0; i < lineIndex; i++) OS.pango_layout_iter_next_line(iter); |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
783 PangoRectangle rect; |
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
784 OS.pango_layout_iter_get_line_extents(iter, null, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
785 OS.pango_layout_iter_free(iter); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
786 int x = OS.PANGO_PIXELS(rect.x); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
787 int y = OS.PANGO_PIXELS(rect.y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
788 int width = OS.PANGO_PIXELS(rect.width); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
789 int height = OS.PANGO_PIXELS(rect.height); |
140 | 790 if (ascent !is -1 && descent !is -1) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
791 height = Math.max (height, ascent + descent); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
792 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
793 return new Rectangle(x, y, width, height); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
794 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
795 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
796 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
797 * Returns the receiver's line count. This includes lines caused |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
798 * by wrapping. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
799 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
800 * @return the line count |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
801 * |
71 | 802 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
803 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
804 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
805 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
806 public int getLineCount() { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
807 checkLayout (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
808 computeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
809 return OS.pango_layout_get_line_count(layout); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
810 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
811 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
812 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
813 * Returns the index of the line that contains the specified |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
814 * character offset. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
815 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
816 * @param offset the character offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
817 * @return the line index |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
818 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
819 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
820 * <li>ERROR_INVALID_ARGUMENT - if the character offset is out of range</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
821 * </ul> |
71 | 822 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
823 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
824 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
825 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
826 public int getLineIndex(int offset) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
827 checkLayout (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
828 computeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
829 int length = text.length; |
71 | 830 if (!(0 <= offset && offset <= length)) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
831 offset = translateOffset(offset); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
832 int line = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
833 auto ptr = OS.pango_layout_get_text(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
834 auto byteOffset = offset;//OS.g_utf8_offset_to_pointer(ptr,offset) - ptr; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
835 int slen = strlen(ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
836 byteOffset = Math.min(byteOffset, slen); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
837 auto iter = OS.pango_layout_get_iter(layout); |
71 | 838 if (iter is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
839 while (OS.pango_layout_iter_next_line(iter)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
840 if (OS.pango_layout_iter_get_index(iter) > byteOffset) break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
841 line++; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
842 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
843 OS.pango_layout_iter_free(iter); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
844 return line; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
845 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
846 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
847 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
848 * Returns the font metrics for the specified line index. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
849 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
850 * @param lineIndex the line index |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
851 * @return the font metrics |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
852 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
853 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
854 * <li>ERROR_INVALID_ARGUMENT - if the line index is out of range</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
855 * </ul> |
71 | 856 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
857 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
858 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
859 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
860 public FontMetrics getLineMetrics (int lineIndex) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
861 checkLayout (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
862 computeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
863 int lineCount = OS.pango_layout_get_line_count(layout); |
71 | 864 if (!(0 <= lineIndex && lineIndex < lineCount)) DWT.error(DWT.ERROR_INVALID_RANGE); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
865 int ascent = 0, descent = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
866 PangoLayoutLine* line = new PangoLayoutLine(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
867 memmove(line, OS.pango_layout_get_line(layout, lineIndex), PangoLayoutLine.sizeof); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
868 if (line.runs is null) { |
140 | 869 auto font = this.font !is null ? this.font.handle : device.systemFont.handle; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
870 auto lang = OS.pango_context_get_language(context); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
871 auto metrics = OS.pango_context_get_metrics(context, font, lang); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
872 ascent = OS.pango_font_metrics_get_ascent(metrics); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
873 descent = OS.pango_font_metrics_get_descent(metrics); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
874 OS.pango_font_metrics_unref(metrics); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
875 } else { |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
876 PangoRectangle rect; |
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
877 OS.pango_layout_line_get_extents(OS.pango_layout_get_line(layout, lineIndex), null, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
878 ascent = -rect.y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
879 descent = rect.height - ascent; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
880 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
881 ascent = Math.max(this.ascent, OS.PANGO_PIXELS(ascent)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
882 descent = Math.max(this.descent, OS.PANGO_PIXELS(descent)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
883 return FontMetrics.gtk_new(ascent, descent, 0, 0, ascent + descent); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
884 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
885 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
886 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
887 * Returns the line offsets. Each value in the array is the |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
888 * offset for the first character in a line except for the last |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
889 * value, which contains the length of the text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
890 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
891 * @return the line offsets |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
892 * |
71 | 893 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
894 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
895 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
896 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
897 public int[] getLineOffsets() { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
898 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
899 computeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
900 int lineCount = OS.pango_layout_get_line_count(layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
901 int[] offsets = new int [lineCount + 1]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
902 auto ptr = OS.pango_layout_get_text(layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
903 auto iter = OS.pango_layout_get_iter(layout); |
71 | 904 if (iter is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
905 int i = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
906 do { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
907 int bytePos = OS.pango_layout_iter_get_index(iter); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
908 int pos = bytePos;//OS.g_utf8_pointer_to_offset(ptr, ptr + bytePos); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
909 offsets[i++] = untranslateOffset(pos); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
910 } while (OS.pango_layout_iter_next_line(iter)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
911 OS.pango_layout_iter_free(iter); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
912 offsets[lineCount] = text.length; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
913 return offsets; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
914 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
915 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
916 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
917 * Returns the location for the specified character offset. The |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
918 * <code>trailing</code> argument indicates whether the offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
919 * corresponds to the leading or trailing edge of the cluster. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
920 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
921 * @param offset the character offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
922 * @param trailing the trailing flag |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
923 * @return the location of the character offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
924 * |
71 | 925 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
926 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
927 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
928 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
929 * @see #getOffset(Point, int[]) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
930 * @see #getOffset(int, int, int[]) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
931 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
932 public Point getLocation(int offset, bool trailing) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
933 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
934 computeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
935 int length = text.length; |
71 | 936 if (!(0 <= offset && offset <= length)) DWT.error(DWT.ERROR_INVALID_RANGE); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
937 offset = translateOffset(offset); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
938 auto ptr = OS.pango_layout_get_text(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
939 auto cont = fromStringz(ptr); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
940 offset = cont.utf8AdjustOffset(offset); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
941 // leading ZWS+ZWNBS are 2 codepoints in 6 bytes, so we miss 4 bytes here |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
942 int byteOffset = offset;//(OS.g_utf8_offset_to_pointer(ptr, offset) - ptr); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
943 int slen = cont.length; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
944 byteOffset = Math.min(byteOffset, slen); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
945 PangoRectangle* pos = new PangoRectangle(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
946 OS.pango_layout_index_to_pos(layout, byteOffset, pos); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
947 int x = trailing ? pos.x + pos.width : pos.x; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
948 int y = pos.y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
949 return new Point(OS.PANGO_PIXELS(x), OS.PANGO_PIXELS(y)); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
950 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
951 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
952 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
953 * Returns the next offset for the specified offset and movement |
71 | 954 * type. The movement is one of <code>DWT.MOVEMENT_CHAR</code>, |
955 * <code>DWT.MOVEMENT_CLUSTER</code>, <code>DWT.MOVEMENT_WORD</code>, | |
956 * <code>DWT.MOVEMENT_WORD_END</code> or <code>DWT.MOVEMENT_WORD_START</code>. | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
957 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
958 * @param offset the start offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
959 * @param movement the movement type |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
960 * @return the next offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
961 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
962 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
963 * <li>ERROR_INVALID_ARGUMENT - if the offset is out of range</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
964 * </ul> |
71 | 965 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
966 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
967 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
968 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
969 * @see #getPreviousOffset(int, int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
970 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
971 public int getNextOffset (int offset, int movement) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
972 return _getOffset(offset, movement, true); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
973 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
974 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
975 int _getOffset (int offset, int movement, bool forward) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
976 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
977 computeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
978 int length = text.length; |
71 | 979 if (!(0 <= offset && offset <= length)) DWT.error(DWT.ERROR_INVALID_RANGE); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
980 if (forward) { |
140 | 981 if (offset is length) return length; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
982 } else { |
140 | 983 if (offset is 0) return 0; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
984 } |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
985 auto cont = OS.pango_layout_get_text(layout); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
986 assert( cont ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
987 auto dcont = fromStringz(cont); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
988 int step = forward ? 1 : -1; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
989 if ((movement & DWT.MOVEMENT_CHAR) !is 0){ |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
990 //PORTING take care of utf8 |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
991 int toffset = translateOffset(offset); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
992 toffset = dcont.utf8AdjustOffset( toffset ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
993 int incr = dcont.getRelativeCodePointOffset( toffset, step ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
994 return offset + incr; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
995 } |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
996 PangoLogAttr* attrs; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
997 int nAttrs; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
998 OS.pango_layout_get_log_attrs(layout, &attrs, &nAttrs); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
999 if (attrs is null) return offset + step; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1000 length = OS.g_utf8_strlen(cont, -1); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1001 offset = translateOffset(offset); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1002 offset = dcont.utf8AdjustOffset( offset ); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1003 PangoLogAttr* logAttr = new PangoLogAttr(); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1004 offset = validateOffset( dcont, offset, step); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1005 while (0 < offset && offset < length) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1006 *logAttr = attrs[ offset ]; |
140 | 1007 if (((movement & DWT.MOVEMENT_CLUSTER) !is 0) && ( logAttr.bitfield0 & (1<<4/*is_cursor_position*/))) break; |
1008 if ((movement & DWT.MOVEMENT_WORD) !is 0) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1009 if (forward) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1010 if (logAttr.bitfield0 & (1<<6/*is_word_end*/)) break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1011 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1012 if (logAttr.bitfield0 & (1<<5/*is_word_start*/)) break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1013 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1014 } |
140 | 1015 if ((movement & DWT.MOVEMENT_WORD_START) !is 0) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1016 if (logAttr.bitfield0 & (1<<5/*is_word_start*/)) break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1017 } |
140 | 1018 if ((movement & DWT.MOVEMENT_WORD_END) !is 0) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1019 if (logAttr.bitfield0 & (1<<6/*is_word_end*/)) break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1020 } |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1021 offset = validateOffset( dcont, offset, step); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1022 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1023 OS.g_free(attrs); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1024 return Math.min(Math.max(0, untranslateOffset(offset)), text.length); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1025 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1026 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1027 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1028 * Returns the character offset for the specified point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1029 * For a typical character, the trailing argument will be filled in to |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1030 * indicate whether the point is closer to the leading edge (0) or |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1031 * the trailing edge (1). When the point is over a cluster composed |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1032 * of multiple characters, the trailing argument will be filled with the |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1033 * position of the character in the cluster that is closest to |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1034 * the point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1035 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1036 * @param point the point |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1037 * @param trailing the trailing buffer |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1038 * @return the character offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1039 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1040 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1041 * <li>ERROR_INVALID_ARGUMENT - if the trailing length is less than <code>1</code></li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1042 * <li>ERROR_NULL_ARGUMENT - if the point is null</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1043 * </ul> |
71 | 1044 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1045 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1046 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1047 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1048 * @see #getLocation(int, bool) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1049 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1050 public int getOffset(Point point, int[] trailing) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1051 checkLayout(); |
140 | 1052 if (point is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1053 return getOffset(point.x, point.y, trailing); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1054 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1055 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1056 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1057 * Returns the character offset for the specified point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1058 * For a typical character, the trailing argument will be filled in to |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1059 * indicate whether the point is closer to the leading edge (0) or |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1060 * the trailing edge (1). When the point is over a cluster composed |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1061 * of multiple characters, the trailing argument will be filled with the |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1062 * position of the character in the cluster that is closest to |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1063 * the point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1064 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1065 * @param x the x coordinate of the point |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1066 * @param y the y coordinate of the point |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1067 * @param trailing the trailing buffer |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1068 * @return the character offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1069 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1070 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1071 * <li>ERROR_INVALID_ARGUMENT - if the trailing length is less than <code>1</code></li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1072 * </ul> |
71 | 1073 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1074 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1075 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1076 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1077 * @see #getLocation(int, bool) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1078 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1079 public int getOffset(int x, int y, int[] trailing) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1080 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1081 computeRuns(); |
140 | 1082 if (trailing !is null && trailing.length < 1) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1083 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1084 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1085 * Feature in GTK. pango_layout_xy_to_index() returns the |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1086 * logical end/start offset of a line when the coordinates are outside |
71 | 1087 * the line bounds. In DWT the correct behavior is to return the closest |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1088 * visual offset. The fix is to clamp the coordinates inside the |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1089 * line bounds. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1090 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1091 auto iter = OS.pango_layout_get_iter(layout); |
71 | 1092 if (iter is null) DWT.error(DWT.ERROR_NO_HANDLES); |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
1093 PangoRectangle rect; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1094 do { |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
1095 OS.pango_layout_iter_get_line_extents(iter, null, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1096 rect.y = OS.PANGO_PIXELS(rect.y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1097 rect.height = OS.PANGO_PIXELS(rect.height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1098 if (rect.y <= y && y < rect.y + rect.height) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1099 rect.x = OS.PANGO_PIXELS(rect.x); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1100 rect.width = OS.PANGO_PIXELS(rect.width); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1101 if (x >= rect.x + rect.width) x = rect.x + rect.width - 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1102 if (x < rect.x) x = rect.x; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1103 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1104 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1105 } while (OS.pango_layout_iter_next_line(iter)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1106 OS.pango_layout_iter_free(iter); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1107 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1108 int index; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1109 int piTrailing; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1110 OS.pango_layout_xy_to_index(layout, x * OS.PANGO_SCALE, y * OS.PANGO_SCALE, &index, &piTrailing); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1111 auto ptr = OS.pango_layout_get_text(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1112 int offset = index;//OS.g_utf8_pointer_to_offset(ptr, ptr + index); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1113 if (trailing !is null) trailing[0] = piTrailing; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1114 return untranslateOffset(offset); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1115 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1116 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1117 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1118 * Returns the orientation of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1119 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1120 * @return the orientation style |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1121 * |
71 | 1122 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1123 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1124 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1125 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1126 public int getOrientation() { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1127 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1128 int baseDir = OS.pango_context_get_base_dir(context); |
140 | 1129 return baseDir is OS.PANGO_DIRECTION_RTL ? DWT.RIGHT_TO_LEFT : DWT.LEFT_TO_RIGHT; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1130 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1131 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1132 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1133 * Returns the previous offset for the specified offset and movement |
71 | 1134 * type. The movement is one of <code>DWT.MOVEMENT_CHAR</code>, |
1135 * <code>DWT.MOVEMENT_CLUSTER</code> or <code>DWT.MOVEMENT_WORD</code>, | |
1136 * <code>DWT.MOVEMENT_WORD_END</code> or <code>DWT.MOVEMENT_WORD_START</code>. | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1137 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1138 * @param offset the start offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1139 * @param movement the movement type |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1140 * @return the previous offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1141 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1142 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1143 * <li>ERROR_INVALID_ARGUMENT - if the offset is out of range</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1144 * </ul> |
71 | 1145 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1146 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1147 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1148 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1149 * @see #getNextOffset(int, int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1150 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1151 public int getPreviousOffset (int index, int movement) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1152 return _getOffset(index, movement, false); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1153 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1154 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1155 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1156 * Gets the ranges of text that are associated with a <code>TextStyle</code>. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1157 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1158 * @return the ranges, an array of offsets representing the start and end of each |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1159 * text style. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1160 * |
71 | 1161 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1162 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1163 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1164 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1165 * @see #getStyles() |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1166 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1167 * @since 3.2 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1168 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1169 public int[] getRanges () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1170 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1171 int[] result = new int[styles.length * 2]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1172 int count = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1173 for (int i=0; i<styles.length - 1; i++) { |
140 | 1174 if (styles[i].style !is null) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1175 result[count++] = styles[i].start; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1176 result[count++] = styles[i + 1].start - 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1177 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1178 } |
140 | 1179 if (count !is result.length) { |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1180 int[] newResult = new int[count]; |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1181 System.arraycopy(result, 0, newResult, 0, count); |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1182 result = newResult; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1183 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1184 return result; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1185 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1186 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1187 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1188 * Returns the text segments offsets of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1189 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1190 * @return the text segments offsets |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1191 * |
71 | 1192 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1193 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1194 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1195 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1196 public int[] getSegments() { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1197 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1198 return segments; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1199 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1200 |
238 | 1201 String getSegmentsText() { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1202 if (segments is null) return text; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1203 int nSegments = segments.length; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1204 if (nSegments <= 1) return text; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1205 int len = text.length; |
140 | 1206 if (len is 0) return text; |
1207 if (nSegments is 2) { | |
1208 if (segments[0] is 0 && segments[1] is len) return text; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1209 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1210 char[] oldChars = text[0..len].dup; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1211 char[] newChars = new char[len + nSegments*3]; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1212 int charCount = 0, segmentCount = 0; |
238 | 1213 String separator = getOrientation() is DWT.RIGHT_TO_LEFT ? STR_RTL_MARK : STR_LTR_MARK; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1214 while (charCount < len) { |
140 | 1215 if (segmentCount < nSegments && charCount is segments[segmentCount]) { |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1216 newChars[charCount + segmentCount .. charCount + segmentCount + separator.length ] = separator; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1217 segmentCount+=separator.length; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1218 } else { |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1219 newChars[charCount + segmentCount] = oldChars[charCount]; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1220 charCount++; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1221 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1222 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1223 if (segmentCount < nSegments) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1224 segments[segmentCount] = charCount; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1225 newChars[charCount + segmentCount .. charCount + segmentCount + separator.length ] = separator; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1226 segmentCount+=separator.length; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1227 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1228 return newChars[ 0 .. Math.min(charCount + segmentCount, newChars.length) ]; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1229 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1230 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1231 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1232 * Returns the line spacing of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1233 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1234 * @return the line spacing |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1235 * |
71 | 1236 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1237 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1238 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1239 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1240 public int getSpacing () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1241 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1242 return OS.PANGO_PIXELS(OS.pango_layout_get_spacing(layout)); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1243 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1244 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1245 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1246 * Gets the style of the receiver at the specified character offset. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1247 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1248 * @param offset the text offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1249 * @return the style or <code>null</code> if not set |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1250 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1251 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1252 * <li>ERROR_INVALID_ARGUMENT - if the character offset is out of range</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1253 * </ul> |
71 | 1254 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1255 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1256 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1257 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1258 public TextStyle getStyle (int offset) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1259 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1260 int length = text.length; |
71 | 1261 if (!(0 <= offset && offset < length)) DWT.error(DWT.ERROR_INVALID_RANGE); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1262 for (int i=1; i<styles.length; i++) { |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1263 StyleItem item = styles[i]; |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1264 if (item.start > offset) { |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1265 return styles[i - 1].style; |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1266 } |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1267 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1268 return null; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1269 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1270 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1271 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1272 * Gets all styles of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1273 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1274 * @return the styles |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1275 * |
71 | 1276 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1277 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1278 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1279 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1280 * @see #getRanges() |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1281 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1282 * @since 3.2 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1283 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1284 public TextStyle[] getStyles () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1285 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1286 TextStyle[] result = new TextStyle[styles.length]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1287 int count = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1288 for (int i=0; i<styles.length; i++) { |
140 | 1289 if (styles[i].style !is null) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1290 result[count++] = styles[i].style; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1291 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1292 } |
140 | 1293 if (count !is result.length) { |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1294 TextStyle[] newResult = new TextStyle[count]; |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1295 System.arraycopy(result, 0, newResult, 0, count); |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1296 result = newResult; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1297 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1298 return result; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1299 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1300 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1301 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1302 * Returns the tab list of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1303 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1304 * @return the tab list |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1305 * |
71 | 1306 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1307 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1308 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1309 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1310 public int[] getTabs() { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1311 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1312 return tabs; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1313 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1314 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1315 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1316 * Gets the receiver's text, which will be an empty |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1317 * string if it has never been set. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1318 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1319 * @return the receiver's text |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1320 * |
71 | 1321 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1322 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1323 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1324 */ |
238 | 1325 public String getText () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1326 checkLayout (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1327 return text; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1328 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1329 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1330 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1331 * Returns the width of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1332 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1333 * @return the width |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1334 * |
71 | 1335 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1336 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1337 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1338 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1339 public int getWidth () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1340 checkLayout (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1341 int width = OS.pango_layout_get_width(layout); |
140 | 1342 return width !is -1 ? OS.PANGO_PIXELS(width) : -1; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1343 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1344 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1345 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1346 * Returns <code>true</code> if the text layout has been disposed, |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1347 * and <code>false</code> otherwise. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1348 * <p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1349 * This method gets the dispose state for the text layout. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1350 * When a text layout has been disposed, it is an error to |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1351 * invoke any other method using the text layout. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1352 * </p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1353 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1354 * @return <code>true</code> when the text layout is disposed and <code>false</code> otherwise |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1355 */ |
150
f2e04420fd6c
reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents:
146
diff
changeset
|
1356 public override bool isDisposed () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1357 return layout is null; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1358 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1359 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1360 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1361 * Sets the text alignment for the receiver. The alignment controls |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1362 * how a line of text is positioned horizontally. The argument should |
71 | 1363 * be one of <code>DWT.LEFT</code>, <code>DWT.RIGHT</code> or <code>DWT.CENTER</code>. |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1364 * <p> |
71 | 1365 * The default alignment is <code>DWT.LEFT</code>. Note that the receiver's |
1366 * width must be set in order to use <code>DWT.RIGHT</code> or <code>DWT.CENTER</code> | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1367 * alignment. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1368 * </p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1369 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1370 * @param alignment the new alignment |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1371 * |
71 | 1372 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1373 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1374 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1375 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1376 * @see #setWidth(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1377 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1378 public void setAlignment (int alignment) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1379 checkLayout(); |
71 | 1380 int mask = DWT.LEFT | DWT.CENTER | DWT.RIGHT; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1381 alignment &= mask; |
140 | 1382 if (alignment is 0) return; |
1383 if ((alignment & DWT.LEFT) !is 0) alignment = DWT.LEFT; | |
1384 if ((alignment & DWT.RIGHT) !is 0) alignment = DWT.RIGHT; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1385 int al = OS.PANGO_ALIGN_LEFT; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1386 switch (alignment) { |
71 | 1387 case DWT.CENTER: al = OS.PANGO_ALIGN_CENTER; break; |
1388 case DWT.RIGHT: al = OS.PANGO_ALIGN_RIGHT; break; | |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
1389 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1390 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1391 OS.pango_layout_set_alignment(layout, al); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1392 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1393 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1394 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1395 * Sets the ascent of the receiver. The ascent is distance in pixels |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1396 * from the baseline to the top of the line and it is applied to all |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1397 * lines. The default value is <code>-1</code> which means that the |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1398 * ascent is calculated from the line fonts. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1399 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1400 * @param ascent the new ascent |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1401 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1402 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1403 * <li>ERROR_INVALID_ARGUMENT - if the ascent is less than <code>-1</code></li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1404 * </ul> |
71 | 1405 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1406 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1407 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1408 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1409 * @see #setDescent(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1410 * @see #getLineMetrics(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1411 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1412 public void setAscent (int ascent) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1413 checkLayout(); |
71 | 1414 if (ascent < -1) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
140 | 1415 if (this.ascent is ascent) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1416 freeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1417 this.ascent = ascent; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1418 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1419 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1420 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1421 * Sets the descent of the receiver. The descent is distance in pixels |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1422 * from the baseline to the bottom of the line and it is applied to all |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1423 * lines. The default value is <code>-1</code> which means that the |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1424 * descent is calculated from the line fonts. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1425 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1426 * @param descent the new descent |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1427 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1428 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1429 * <li>ERROR_INVALID_ARGUMENT - if the descent is less than <code>-1</code></li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1430 * </ul> |
71 | 1431 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1432 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1433 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1434 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1435 * @see #setAscent(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1436 * @see #getLineMetrics(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1437 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1438 public void setDescent (int descent) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1439 checkLayout(); |
71 | 1440 if (descent < -1) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
140 | 1441 if (this.descent is descent) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1442 freeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1443 this.descent = descent; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1444 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1445 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1446 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1447 * Sets the default font which will be used by the receiver |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1448 * to draw and measure text. If the |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1449 * argument is null, then a default font appropriate |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1450 * for the platform will be used instead. Note that a text |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1451 * style can override the default font. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1452 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1453 * @param font the new font for the receiver, or null to indicate a default font |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1454 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1455 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1456 * <li>ERROR_INVALID_ARGUMENT - if the font has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1457 * </ul> |
71 | 1458 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1459 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1460 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1461 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1462 public void setFont (Font font) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1463 checkLayout (); |
71 | 1464 if (font !is null && font.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1465 if (this.font is font) return; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1466 if (font !is null && font.opEquals(this.font)) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1467 this.font = font; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1468 OS.pango_layout_set_font_description(layout, font !is null ? font.handle : null); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1469 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1470 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1471 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1472 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1473 * Sets the indent of the receiver. This indent it applied of the first line of |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1474 * each paragraph. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1475 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1476 * @param indent new indent |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1477 * |
71 | 1478 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1479 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1480 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1481 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1482 * @since 3.2 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1483 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1484 public void setIndent (int indent) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1485 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1486 if (indent < 0) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1487 OS.pango_layout_set_indent(layout, indent * OS.PANGO_SCALE); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1488 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1489 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1490 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1491 * Sets the justification of the receiver. Note that the receiver's |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1492 * width must be set in order to use justification. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1493 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1494 * @param justify new justify |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1495 * |
71 | 1496 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1497 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1498 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1499 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1500 * @since 3.2 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1501 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1502 public void setJustify (bool justify) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1503 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1504 OS.pango_layout_set_justify(layout, justify); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1505 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1506 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1507 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1508 * Sets the orientation of the receiver, which must be one |
71 | 1509 * of <code>DWT.LEFT_TO_RIGHT</code> or <code>DWT.RIGHT_TO_LEFT</code>. |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1510 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1511 * @param orientation new orientation style |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1512 * |
71 | 1513 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1514 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1515 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1516 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1517 public void setOrientation(int orientation) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1518 checkLayout(); |
71 | 1519 int mask = DWT.RIGHT_TO_LEFT | DWT.LEFT_TO_RIGHT; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1520 orientation &= mask; |
140 | 1521 if (orientation is 0) return; |
1522 if ((orientation & DWT.LEFT_TO_RIGHT) !is 0) orientation = DWT.LEFT_TO_RIGHT; | |
1523 int baseDir = orientation is DWT.RIGHT_TO_LEFT ? OS.PANGO_DIRECTION_RTL : OS.PANGO_DIRECTION_LTR; | |
1524 if (OS.pango_context_get_base_dir(context) is baseDir) return; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1525 OS.pango_context_set_base_dir(context, baseDir); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1526 OS.pango_layout_context_changed(layout); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1527 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1528 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1529 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1530 * Sets the line spacing of the receiver. The line spacing |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1531 * is the space left between lines. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1532 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1533 * @param spacing the new line spacing |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1534 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1535 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1536 * <li>ERROR_INVALID_ARGUMENT - if the spacing is negative</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1537 * </ul> |
71 | 1538 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1539 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1540 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1541 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1542 public void setSpacing (int spacing) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1543 checkLayout(); |
71 | 1544 if (spacing < 0) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1545 OS.pango_layout_set_spacing(layout, spacing * OS.PANGO_SCALE); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1546 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1547 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1548 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1549 * Sets the offsets of the receiver's text segments. Text segments are used to |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1550 * override the default behaviour of the bidirectional algorithm. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1551 * Bidirectional reordering can happen within a text segment but not |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1552 * between two adjacent segments. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1553 * <p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1554 * Each text segment is determined by two consecutive offsets in the |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1555 * <code>segments</code> arrays. The first element of the array should |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1556 * always be zero and the last one should always be equals to length of |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1557 * the text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1558 * </p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1559 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1560 * @param segments the text segments offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1561 * |
71 | 1562 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1563 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1564 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1565 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1566 public void setSegments(int[] segments) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1567 checkLayout(); |
140 | 1568 if (this.segments is null && segments is null) return; |
1569 if (this.segments !is null && segments !is null) { | |
1570 if (this.segments.length is segments.length) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1571 int i; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1572 for (i = 0; i <segments.length; i++) { |
140 | 1573 if (this.segments[i] !is segments[i]) break; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1574 } |
140 | 1575 if (i is segments.length) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1576 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1577 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1578 freeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1579 this.segments = segments; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1580 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1581 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1582 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1583 * Sets the style of the receiver for the specified range. Styles previously |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1584 * set for that range will be overwritten. The start and end offsets are |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1585 * inclusive and will be clamped if out of range. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1586 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1587 * @param style the style |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1588 * @param start the start offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1589 * @param end the end offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1590 * |
71 | 1591 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1592 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1593 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1594 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1595 public void setStyle (TextStyle style, int start, int end) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1596 checkLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1597 int length = text.length; |
140 | 1598 if (length is 0) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1599 if (start > end) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1600 start = Math.min(Math.max(0, start), length - 1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1601 end = Math.min(Math.max(0, end), length - 1); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1602 start = text.utf8AdjustOffset( start ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1603 end = text.utf8AdjustOffset( end ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1604 |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1605 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1606 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1607 * Bug in Pango. Pango 1.2.2 will cause a segmentation fault if a style |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1608 * is not applied for a whole ligature. The fix is to applied the |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1609 * style for the whole ligature. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1610 * |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1611 * NOTE that fix only LamAlef ligatures. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1612 */ |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1613 int relIndex; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1614 if ((start > 0 ) && isAlef(text[ start .. $ ].firstCodePoint()) && isLam(text.getRelativeCodePoint( start, -1, relIndex ))) { |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1615 start += relIndex; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1616 } |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1617 if ((end < length - 1) && isLam(text[ end .. $ ].firstCodePoint()) && isAlef(text.getRelativeCodePoint(end, 1,relIndex))) { |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1618 end += relIndex; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1619 } |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1620 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1621 int low = -1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1622 int high = styles.length; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1623 while (high - low > 1) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1624 int index = (high + low) / 2; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1625 if (styles[index + 1].start > start) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1626 high = index; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1627 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1628 low = index; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1629 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1630 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1631 if (0 <= high && high < styles.length) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1632 StyleItem item = styles[high]; |
140 | 1633 if (item.start is start && styles[high + 1].start - 1 is end) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1634 if (style is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1635 if (item.style is null) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1636 } else { |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1637 if (style.opEquals(item.style)) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1638 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1639 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1640 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1641 freeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1642 int modifyStart = high; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1643 int modifyEnd = modifyStart; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1644 while (modifyEnd < styles.length) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1645 if (styles[modifyEnd + 1].start > end) break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1646 modifyEnd++; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1647 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1648 if (modifyStart is modifyEnd) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1649 int styleStart = styles[modifyStart].start; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1650 int styleEnd = styles[modifyEnd + 1].start - 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1651 if (styleStart is start && styleEnd is end) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1652 styles[modifyStart].style = style; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1653 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1654 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1655 if (styleStart !is start && styleEnd !is end) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1656 StyleItem[] newStyles = new StyleItem[styles.length + 2]; |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1657 System.arraycopy(styles, 0, newStyles, 0, modifyStart + 1); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1658 StyleItem item = new StyleItem(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1659 item.start = start; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1660 item.style = style; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1661 newStyles[modifyStart + 1] = item; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1662 item = new StyleItem(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1663 item.start = end + 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1664 item.style = styles[modifyStart].style; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1665 newStyles[modifyStart + 2] = item; |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1666 System.arraycopy(styles, modifyEnd + 1, newStyles, modifyEnd + 3, styles.length - modifyEnd - 1); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1667 styles = newStyles; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1668 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1669 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1670 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1671 if (start is styles[modifyStart].start) modifyStart--; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1672 if (end is styles[modifyEnd + 1].start - 1) modifyEnd++; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1673 int newLength = styles.length + 1 - (modifyEnd - modifyStart - 1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1674 StyleItem[] newStyles = new StyleItem[newLength]; |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1675 System.arraycopy(styles, 0, newStyles, 0, modifyStart + 1); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1676 StyleItem item = new StyleItem(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1677 item.start = start; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1678 item.style = style; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1679 newStyles[modifyStart + 1] = item; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1680 styles[modifyEnd].start = end + 1; |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1681 System.arraycopy(styles, modifyEnd, newStyles, modifyStart + 2, styles.length - modifyEnd); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1682 styles = newStyles; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1683 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1684 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1685 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1686 * Sets the receiver's tab list. Each value in the tab list specifies |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1687 * the space in pixels from the origin of the text layout to the respective |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1688 * tab stop. The last tab stop width is repeated continuously. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1689 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1690 * @param tabs the new tab list |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1691 * |
71 | 1692 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1693 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1694 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1695 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1696 public void setTabs(int[] tabs) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1697 checkLayout(); |
140 | 1698 if (this.tabs is null && tabs is null) return; |
1699 if (this.tabs!is null && tabs !is null) { | |
1700 if (this.tabs.length is tabs.length) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1701 int i; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1702 for (i = 0; i <tabs.length; i++) { |
140 | 1703 if (this.tabs[i] !is tabs[i]) break; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1704 } |
140 | 1705 if (i is tabs.length) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1706 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1707 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1708 this.tabs = tabs; |
140 | 1709 if (tabs is null) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1710 OS.pango_layout_set_tabs(layout, device.emptyTab); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1711 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1712 auto tabArray = OS.pango_tab_array_new(tabs.length, true); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1713 if (tabArray !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1714 for (int i = 0; i < tabs.length; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1715 OS.pango_tab_array_set_tab(tabArray, i, OS.PANGO_TAB_LEFT, tabs[i]); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1716 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1717 OS.pango_layout_set_tabs(layout, tabArray); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1718 OS.pango_tab_array_free(tabArray); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1719 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1720 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1721 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1722 * Bug in Pango. A change in the tab stop array is not automatically reflected in the |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1723 * pango layout object because the call pango_layout_set_tabs() does not free the |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1724 * lines cache. The fix to use pango_layout_context_changed() to free the lines cache. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1725 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1726 OS.pango_layout_context_changed(layout); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1727 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1728 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1729 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1730 * Sets the receiver's text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1731 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1732 * @param text the new text |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1733 * |
71 | 1734 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1735 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1736 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1737 */ |
238 | 1738 public void setText (String text) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1739 checkLayout (); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1740 if (text.equals(this.text)) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1741 freeRuns(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1742 this.text = text; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1743 styles = new StyleItem[2]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1744 styles[0] = new StyleItem(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1745 styles[1] = new StyleItem(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1746 styles[styles.length - 1].start = text.length; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1747 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1748 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1749 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1750 * Sets the line width of the receiver, which determines how |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1751 * text should be wrapped and aligned. The default value is |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1752 * <code>-1</code> which means wrapping is disabled. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1753 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1754 * @param width the new width |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1755 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1756 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1757 * <li>ERROR_INVALID_ARGUMENT - if the width is <code>0</code> or less than <code>-1</code></li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1758 * </ul> |
71 | 1759 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1760 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1761 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1762 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1763 * @see #setAlignment(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1764 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1765 public void setWidth (int width) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1766 checkLayout (); |
140 | 1767 if (width < -1 || width is 0) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1768 freeRuns(); |
140 | 1769 OS.pango_layout_set_width(layout, width is -1 ? -1 : width * OS.PANGO_SCALE); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1770 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1771 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1772 static final bool isLam(int ch) { |
140 | 1773 return ch is 0x0644; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1774 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1775 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1776 static final bool isAlef(int ch) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1777 switch (ch) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1778 case 0x0622: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1779 case 0x0623: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1780 case 0x0625: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1781 case 0x0627: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1782 case 0x0649: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1783 case 0x0670: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1784 case 0x0671: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1785 case 0x0672: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1786 case 0x0673: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1787 case 0x0675: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1788 return true; |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
1789 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1790 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1791 return false; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1792 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1793 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1794 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1795 * Returns a string containing a concise, human-readable |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1796 * description of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1797 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1798 * @return a string representation of the receiver |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1799 */ |
238 | 1800 public override String toString () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1801 if (isDisposed()) return "TextLayout {*DISPOSED*}"; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1802 return Format( "TextLayout {{{}}", layout ); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1803 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1804 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1805 /* |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1806 * Translate a client offset to an internal offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1807 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1808 int translateOffset(int offset) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1809 int length = text.length; |
140 | 1810 if (length is 0) return offset; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1811 if (invalidOffsets is null) return offset; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1812 for (int i = 0; i < invalidOffsets.length; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1813 if (offset < invalidOffsets[i]) break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1814 offset++; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1815 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1816 return offset; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1817 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1818 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1819 /* |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1820 * Translate an internal offset to a client offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1821 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1822 int untranslateOffset(int offset) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1823 int length = text.length; |
140 | 1824 if (length is 0) return offset; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1825 if (invalidOffsets is null) return offset; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1826 for (int i = 0; i < invalidOffsets.length; i++) { |
140 | 1827 if (offset is invalidOffsets[i]) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1828 offset++; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1829 continue; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1830 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1831 if (offset < invalidOffsets[i]) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1832 return offset - i; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1833 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1834 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1835 return offset - invalidOffsets.length; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1836 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1837 |
238 | 1838 int validateOffset( String cont, int offset, int step) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1839 if (invalidOffsets is null) return offset + step; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1840 int i = step > 0 ? 0 : invalidOffsets.length - 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1841 do { |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1842 if( offset is 0 && step < 0 ){ |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1843 offset += step; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1844 } |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1845 else{ |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1846 offset += cont.getRelativeCodePointOffset( offset, step ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1847 } |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1848 while (0 <= i && i < invalidOffsets.length) { |
140 | 1849 if (invalidOffsets[i] is offset) break; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1850 i += step; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1851 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1852 } while (0 <= i && i < invalidOffsets.length); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1853 return offset; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1854 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1855 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1856 } |