Mercurial > projects > dwt-linux
annotate dwt/graphics/TextLayout.d @ 261:edcf78db8722
fix compile errors for SWT 3.4
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Thu, 03 Jul 2008 21:20:33 +0200 |
parents | c0d810de7093 |
children | 6956821fe8ed |
rev | line source |
---|---|
72 | 1 /******************************************************************************* |
259 | 2 * Copyright (c) 2000, 2008 IBM Corporation and others. |
24
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 |
261
edcf78db8722
fix compile errors for SWT 3.4
Frank Benoit <benoit@tionex.de>
parents:
259
diff
changeset
|
15 import dwt.dwthelper.utils; |
edcf78db8722
fix compile errors for SWT 3.4
Frank Benoit <benoit@tionex.de>
parents:
259
diff
changeset
|
16 |
240 | 17 import dwt.internal.Compatibility; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
18 import dwt.internal.cairo.Cairo; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
19 import dwt.internal.gtk.OS; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
20 import dwt.internal.Converter; |
71 | 21 import dwt.DWT; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
22 import dwt.graphics.Color; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
23 import dwt.graphics.Device; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 import dwt.graphics.Font; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 import dwt.graphics.FontMetrics; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
26 import dwt.graphics.GC; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
27 import dwt.graphics.GCData; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
28 import dwt.graphics.GlyphMetrics; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 import dwt.graphics.Point; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 import dwt.graphics.Rectangle; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
31 import dwt.graphics.Region; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 import dwt.graphics.Resource; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 import dwt.graphics.TextStyle; |
200
08789b28bdf3
import dwt.dwthelper.utils now explicit
Frank Benoit <benoit@tionex.de>
parents:
183
diff
changeset
|
34 import dwt.dwthelper.utils; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 import tango.text.convert.Format; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 import tango.stdc.string; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 import tango.text.convert.Utf; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 import Math = tango.math.Math; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
42 * <code>TextLayout</code> is a graphic object that represents |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
43 * styled text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
44 * <p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 * Instances of this class provide support for drawing, cursor |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 * navigation, hit testing, text wrapping, alignment, tab expansion |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
47 * 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
|
48 * </p><p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 * Application code must explicitly invoke the <code>TextLayout#dispose()</code> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
50 * 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
|
51 * when those instances are no longer required. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
52 * </p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 * |
259 | 54 * @see <a href="http://www.eclipse.org/swt/snippets/#textlayout">TextLayout, TextStyle snippets</a> |
55 * @see <a href="http://www.eclipse.org/swt/examples.php">DWT Example: CustomControlExample, StyledText tab</a> | |
56 * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a> | |
261
edcf78db8722
fix compile errors for SWT 3.4
Frank Benoit <benoit@tionex.de>
parents:
259
diff
changeset
|
57 * |
259 | 58 * @since 3.0 |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
59 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
60 public final class TextLayout : Resource { |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
61 |
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
|
62 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
|
63 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
|
64 int start; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
65 |
238 | 66 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
|
67 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
|
68 } |
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 } |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
70 |
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
|
71 Font font; |
238 | 72 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
|
73 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
|
74 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
|
75 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
|
76 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
|
77 PangoLayout* layout; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
78 PangoContext* context; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
79 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
|
80 int[] invalidOffsets; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
81 // LTR_MARK LEFT-TO-RIGHT MARK |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
82 // RTL_MARK RIGHT-TO-LEFT MARK |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
83 // ZWS ZERO WIDTH SPACE |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
84 // ZWNBS ZERO WIDTH NO-BREAK SPACE |
246
f08216d53777
Fix merge bug in TextLayout
Frank Benoit <benoit@tionex.de>
parents:
240
diff
changeset
|
85 static const dchar LTR_MARK = '\u200E'; // x"E2 80 8E" LEFT-TO-RIGHT MARK |
f08216d53777
Fix merge bug in TextLayout
Frank Benoit <benoit@tionex.de>
parents:
240
diff
changeset
|
86 static const dchar RTL_MARK = '\u200F'; // x"E2 80 8F" RIGHT-TO-LEFT MARK |
f08216d53777
Fix merge bug in TextLayout
Frank Benoit <benoit@tionex.de>
parents:
240
diff
changeset
|
87 static const dchar ZWS = '\u200B'; // x"E2 80 8B" ZERO WIDTH SPACE |
f08216d53777
Fix merge bug in TextLayout
Frank Benoit <benoit@tionex.de>
parents:
240
diff
changeset
|
88 static const dchar ZWNBS = '\uFEFF'; // x"EF BB BF" ZERO WIDTH NO-BREAK SPACE |
f08216d53777
Fix merge bug in TextLayout
Frank Benoit <benoit@tionex.de>
parents:
240
diff
changeset
|
89 static const String STR_LTR_MARK = "\u200E"; |
f08216d53777
Fix merge bug in TextLayout
Frank Benoit <benoit@tionex.de>
parents:
240
diff
changeset
|
90 static const String STR_RTL_MARK = "\u200F"; |
f08216d53777
Fix merge bug in TextLayout
Frank Benoit <benoit@tionex.de>
parents:
240
diff
changeset
|
91 static const String STR_ZWS = "\u200B"; |
f08216d53777
Fix merge bug in TextLayout
Frank Benoit <benoit@tionex.de>
parents:
240
diff
changeset
|
92 static const String STR_ZWNBS = "\uFEFF"; |
24
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 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
95 * 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
|
96 * <p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
97 * 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
|
98 * </p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
99 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
100 * @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
|
101 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
102 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
103 * <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
|
104 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
105 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
106 * @see #dispose() |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
107 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
108 public this (Device device) { |
240 | 109 super(device); |
259 | 110 device = this.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
|
111 context = OS.gdk_pango_context_get(); |
71 | 112 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
|
113 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
|
114 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
|
115 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
|
116 layout = OS.pango_layout_new(context); |
71 | 117 if (layout is null) DWT.error(DWT.ERROR_NO_HANDLES); |
240 | 118 OS.pango_layout_set_font_description(layout, 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
|
119 OS.pango_layout_set_wrap(layout, OS.PANGO_WRAP_WORD_CHAR); |
259 | 120 OS.pango_layout_set_tabs(layout, device.emptyTab); |
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
|
121 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
|
122 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
|
123 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
124 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
|
125 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
|
126 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
|
127 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
|
128 styles[1] = new StyleItem(); |
240 | 129 init_(); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
130 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
131 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
132 void checkLayout() { |
71 | 133 if (isDisposed()) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
134 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
135 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
136 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
|
137 if (attrList !is null) return; |
238 | 138 String segmentsText = getSegmentsText(); |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
139 OS.pango_layout_set_text (layout, segmentsText.ptr, segmentsText.length); |
140 | 140 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
|
141 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
|
142 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
|
143 //PangoAttribute* attribute = new PangoAttribute(); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
144 char[] chars = null; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
145 int segementsLength = segmentsText.length; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
146 if ((ascent !is -1 || descent !is -1) && segementsLength > 0) { |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
147 PangoRectangle rect; |
140 | 148 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
|
149 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
|
150 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
|
151 chars = new char[segementsLength + lineCount * 6/*2*/]; |
240 | 152 int oldPos = 0, lineIndex = 0; |
153 while (lineIndex < lineCount) { | |
154 auto line = OS.pango_layout_get_line(layout, lineIndex); | |
155 int bytePos = line.start_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
|
156 /* Note: The length in bytes of ZWS and ZWNBS are both equals to 3 */ |
240 | 157 int offset = lineIndex * 6; |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
158 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
|
159 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
|
160 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
|
161 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
|
162 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
|
163 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
|
164 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
|
165 OS.pango_attr_list_insert(attrList, attr); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
166 int pos = bytePos;//OS.g_utf8_pointer_to_offset(ptr, ptr + bytePos); |
240 | 167 chars[pos + lineIndex * 6 +0 .. pos + lineIndex * 6 + 3] = STR_ZWS; |
168 chars[pos + lineIndex * 6 +3 .. pos + lineIndex * 6 + 6] = STR_ZWNBS; | |
169 chars[ oldPos + lineIndex*6 .. oldPos + lineIndex*6 + pos - oldPos ] = | |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
170 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
|
171 oldPos = pos; |
240 | 172 lineIndex++; |
173 } | |
246
f08216d53777
Fix merge bug in TextLayout
Frank Benoit <benoit@tionex.de>
parents:
240
diff
changeset
|
174 segmentsText.getChars(oldPos, segementsLength, chars, oldPos + lineIndex * 6); |
238 | 175 String buffer = chars;// Converter.wcsToMbcs(null, chars, false); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
176 |
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
|
177 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
|
178 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
|
179 } else { |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
180 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
|
181 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
182 int offsetCount = 0; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
183 { |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
184 int i = 0; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
185 while( i < chars.length ){ |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
186 int incr; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
187 dchar c = firstCodePoint( chars[ i .. $ ], incr ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
188 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
|
189 offsetCount+=3; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
190 } |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
191 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
|
192 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
193 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
194 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
|
195 offsetCount = 0; |
182
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 int i = 0; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
198 while( i < chars.length ){ |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
199 int incr; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
200 dchar c = firstCodePoint( chars[ i .. $ ], incr ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
201 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
|
202 invalidOffsets[offsetCount++] = i; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
203 invalidOffsets[offsetCount++] = i+1; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
204 invalidOffsets[offsetCount++] = i+2; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
205 } |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
206 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
|
207 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
208 } |
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 int slen = strlen(ptr); |
259 | 210 Font defaultFont = font !is null ? font : device.systemFont; |
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
|
211 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
|
212 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
|
213 TextStyle style = styleItem.style; |
140 | 214 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
|
215 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
|
216 int end = translateOffset(styles[i+1].start - 1); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
217 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
|
218 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
|
219 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
|
220 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
|
221 Font font = style.font; |
261
edcf78db8722
fix compile errors for SWT 3.4
Frank Benoit <benoit@tionex.de>
parents:
259
diff
changeset
|
222 if (font !is null && !font.isDisposed() && !defaultFont.opEquals(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
|
223 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
|
224 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
|
225 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
|
226 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
|
227 } |
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 if (style.underline) { |
240 | 229 int underlineStyle = OS.PANGO_UNDERLINE_NONE; |
230 switch (style.underlineStyle) { | |
231 case DWT.UNDERLINE_SINGLE: | |
232 underlineStyle = OS.PANGO_UNDERLINE_SINGLE; | |
233 break; | |
234 case DWT.UNDERLINE_DOUBLE: | |
235 underlineStyle = OS.PANGO_UNDERLINE_DOUBLE; | |
236 break; | |
237 case DWT.UNDERLINE_SQUIGGLE: | |
238 case DWT.UNDERLINE_ERROR: | |
239 if (OS.GTK_VERSION >= OS.buildVERSION(2, 4, 0)) { | |
240 underlineStyle = OS.PANGO_UNDERLINE_ERROR; | |
241 } | |
242 break; | |
243 } | |
244 if (underlineStyle !is OS.PANGO_UNDERLINE_NONE && style.underlineColor is null) { | |
245 auto attr = OS.pango_attr_underline_new(underlineStyle); | |
246 attr.start_index = byteStart; | |
247 attr.end_index = byteEnd; | |
248 OS.pango_attr_list_insert(attrList, attr); | |
249 } | |
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
|
250 } |
240 | 251 if (style.strikeout && style.strikeoutColor 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
|
252 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
|
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 Color foreground = style.foreground; |
140 | 258 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
|
259 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
|
260 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
|
261 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
|
262 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
|
263 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
|
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 Color background = style.background; |
140 | 266 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
|
267 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
|
268 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
|
269 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
|
270 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
|
271 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
|
272 } |
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 GlyphMetrics metrics = style.metrics; |
140 | 274 if (metrics !is null) { |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
275 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
|
276 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
|
277 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
|
278 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
|
279 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
|
280 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
|
281 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
|
282 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
|
283 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
284 int rise = style.rise; |
140 | 285 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
|
286 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
|
287 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
|
288 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
|
289 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
|
290 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
291 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
292 OS.pango_layout_set_attributes(layout, attrList); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
293 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
294 |
240 | 295 int[] computePolyline(int left, int top, int right, int bottom) { |
296 int height = bottom - top; // can be any number | |
297 int width = 2 * height; // must be even | |
298 int peaks = Compatibility.ceil(right - left, width); | |
299 if (peaks is 0 && right - left > 2) { | |
300 peaks = 1; | |
301 } | |
302 int length_ = ((2 * peaks) + 1) * 2; | |
303 if (length_ < 0) return new int[0]; | |
304 | |
305 int[] coordinates = new int[length_]; | |
306 for (int i = 0; i < peaks; i++) { | |
307 int index = 4 * i; | |
308 coordinates[index] = left + (width * i); | |
309 coordinates[index+1] = bottom; | |
310 coordinates[index+2] = coordinates[index] + width / 2; | |
311 coordinates[index+3] = top; | |
312 } | |
313 coordinates[length_-2] = left + (width * peaks); | |
314 coordinates[length_-1] = bottom; | |
315 return coordinates; | |
316 } | |
317 | |
318 void destroy() { | |
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
|
319 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
|
320 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
|
321 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
|
322 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
|
323 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
|
324 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
|
325 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
|
326 context = null; |
24
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 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
330 * 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
|
331 * point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
332 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
333 * @param gc the GC to draw |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
334 * @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
|
335 * @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
|
336 * |
71 | 337 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
338 * <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
|
339 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
340 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
341 * <li>ERROR_NULL_ARGUMENT - if the gc is null</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
342 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
343 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
344 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
|
345 draw(gc, x, y, -1, -1, null, null); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
346 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
347 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
348 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
349 * 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
|
350 * point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
351 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
352 * @param gc the GC to draw |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
353 * @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
|
354 * @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
|
355 * @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
|
356 * @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
|
357 * @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
|
358 * @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
|
359 * |
71 | 360 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
361 * <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
|
362 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
363 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
364 * <li>ERROR_NULL_ARGUMENT - if the gc is null</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
365 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
366 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
367 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
|
368 draw(gc, x, y, selectionStart, selectionEnd, selectionForeground, selectionBackground, 0); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
369 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
370 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
371 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
372 * 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
|
373 * point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
374 * <p> |
71 | 375 * The parameter <code>flags</code> can include one of <code>DWT.DELIMITER_SELECTION</code> |
376 * or <code>DWT.FULL_SELECTION</code> to specify the selection behavior on all lines except | |
377 * 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
|
378 * the specified selection behavior to the last line. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
379 * </p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
380 * @param gc the GC to draw |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
381 * @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
|
382 * @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
|
383 * @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
|
384 * @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
|
385 * @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
|
386 * @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
|
387 * @param flags drawing options |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
388 * |
71 | 389 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
390 * <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
|
391 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
392 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
393 * <li>ERROR_NULL_ARGUMENT - if the gc is null</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
394 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
395 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
396 * @since 3.3 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
397 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
398 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
|
399 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
|
400 computeRuns(); |
71 | 401 if (gc is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); |
402 if (gc.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
403 if (selectionForeground !is null && selectionForeground.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
404 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
|
405 gc.checkGC(GC.FOREGROUND); |
240 | 406 int length_ = text.length; |
140 | 407 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
|
408 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
|
409 auto cairo = data.cairo; |
140 | 410 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
|
411 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
|
412 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
|
413 PangoLogAttr* logAttr = new PangoLogAttr(); |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
414 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
|
415 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
|
416 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
|
417 auto iter = OS.pango_layout_get_iter(layout); |
140 | 418 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
|
419 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
|
420 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
|
421 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
|
422 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
|
423 } 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
|
424 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
|
425 } |
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 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
|
427 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
|
428 int lineEnd; |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
429 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
|
430 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
|
431 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
|
432 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
|
433 } 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
|
434 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
|
435 } |
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 bool extent = false; |
140 | 437 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
|
438 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
|
439 } 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
|
440 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
|
441 *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
|
442 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
|
443 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
|
444 } else { |
140 | 445 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
|
446 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
|
447 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
448 } |
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 } |
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 (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
|
451 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
|
452 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
|
453 int height = OS.PANGO_PIXELS(rect.height); |
140 | 454 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
|
455 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
|
456 } |
140 | 457 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
|
458 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
|
459 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
|
460 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
|
461 } 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
|
462 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
|
463 } |
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 } |
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 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
|
466 } 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
|
467 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
|
468 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
|
469 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
|
470 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
|
471 } 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
|
472 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
|
473 } |
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 } |
240 | 475 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
|
476 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
|
477 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { |
240 | 478 if ((data.style & DWT.MIRRORED) !is 0) { |
479 Cairo.cairo_save(cairo); | |
480 Cairo.cairo_scale(cairo, -1, 1); | |
481 Cairo.cairo_translate(cairo, -2 * x - width(), 0); | |
482 } | |
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
|
483 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
|
484 OS.pango_cairo_show_layout(cairo, layout); |
240 | 485 drawBorder(gc, x, y, null); |
486 if ((data.style & DWT.MIRRORED) !is 0) { | |
487 Cairo.cairo_restore(cairo); | |
488 } | |
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
|
489 } 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
|
490 OS.gdk_draw_layout(data.drawable, gc.handle, x, y, layout); |
240 | 491 drawBorder(gc, x, y, 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
|
492 } |
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 } else { |
240 | 494 selectionStart = Math.min(Math.max(0, selectionStart), length_ - 1); |
495 selectionEnd = Math.min(Math.max(0, selectionEnd), length_ - 1); | |
496 length_ = OS.g_utf8_strlen(OS.pango_layout_get_text(layout), -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
|
497 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
|
498 selectionEnd = translateOffset(selectionEnd); |
140 | 499 if (selectionForeground is null) selectionForeground = device.getSystemColor(DWT.COLOR_LIST_SELECTION_TEXT); |
500 if (selectionBackground is null) selectionBackground = device.getSystemColor(DWT.COLOR_LIST_SELECTION); | |
240 | 501 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
|
502 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
|
503 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
|
504 auto ptr = OS.pango_layout_get_text(layout); |
240 | 505 if ((data.style & DWT.MIRRORED) !is 0) { |
506 Cairo.cairo_save(cairo); | |
507 Cairo.cairo_scale(cairo, -1, 1); | |
508 Cairo.cairo_translate(cairo, -2 * x - width(), 0); | |
509 } | |
510 drawWithCairo(gc, x, y, 0, OS.strlen(ptr), fullSelection, selectionForeground.handle, selectionBackground.handle); | |
511 if ((data.style & DWT.MIRRORED) !is 0) { | |
512 Cairo.cairo_restore(cairo); | |
513 } | |
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
|
514 } 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
|
515 OS.gdk_draw_layout_with_colors(data.drawable, gc.handle, x, y, layout, selectionForeground.handle, selectionBackground.handle); |
240 | 516 drawBorder(gc, x, y, selectionForeground.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
|
517 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
518 } 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
|
519 auto ptr = OS.pango_layout_get_text(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
520 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
|
521 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
|
522 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
|
523 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
|
524 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
|
525 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { |
240 | 526 if ((data.style & DWT.MIRRORED) !is 0) { |
527 Cairo.cairo_save(cairo); | |
528 Cairo.cairo_scale(cairo, -1, 1); | |
529 Cairo.cairo_translate(cairo, -2 * x - width(), 0); | |
530 } | |
531 drawWithCairo(gc, x, y, byteSelStart, byteSelEnd, fullSelection, selectionForeground.handle, selectionBackground.handle); | |
532 if ((data.style & DWT.MIRRORED) !is 0) { | |
533 Cairo.cairo_restore(cairo); | |
534 } | |
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
|
535 } 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
|
536 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
|
537 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
|
538 OS.gdk_draw_layout(data.drawable, gc.handle, x, y, layout); |
240 | 539 drawBorder(gc, x, y, 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
|
540 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
|
541 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
|
542 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
|
543 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
|
544 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
|
545 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
546 OS.gdk_draw_layout_with_colors(data.drawable, gc.handle, x, y, layout, selectionForeground.handle, selectionBackground.handle); |
240 | 547 drawBorder(gc, x, y, selectionForeground.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
|
548 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
|
549 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
|
550 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
551 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
552 } |
24
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 |
240 | 555 void drawWithCairo(GC gc, int x, int y, int start, int end, bool fullSelection, GdkColor* fg, GdkColor* bg) { |
556 GCData data = gc.data; | |
557 cairo_t* cairo = data.cairo; | |
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
|
558 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
|
559 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
|
560 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
|
561 OS.pango_cairo_show_layout(cairo, layout); |
240 | 562 drawBorder(gc, x, y, 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
|
563 } |
240 | 564 int[] ranges = [start, 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
|
565 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
|
566 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
|
567 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
|
568 Cairo.cairo_clip(cairo); |
240 | 569 Cairo.cairo_set_source_rgba(cairo, (bg.red & 0xFFFF) / cast(float)0xFFFF, (bg.green & 0xFFFF) / cast(float)0xFFFF, (bg.blue & 0xFFFF) / cast(float)0xFFFF, data.alpha / cast(float)0xFF); |
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
|
570 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
|
571 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
|
572 } |
240 | 573 Cairo.cairo_set_source_rgba(cairo, (fg.red & 0xFFFF) / cast(float)0xFFFF, (fg.green & 0xFFFF) / cast(float)0xFFFF, (fg.blue & 0xFFFF) / cast(float)0xFFFF, data.alpha / cast(float)0xFF); |
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
|
574 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
|
575 OS.pango_cairo_show_layout(cairo, layout); |
240 | 576 drawBorder(gc, x, y, fg); |
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
|
577 Cairo.cairo_restore(cairo); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
578 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
579 |
240 | 580 void drawBorder(GC gc, int x, int y, GdkColor* selectionColor) { |
581 GCData data = gc.data; | |
582 auto cairo = data.cairo; | |
583 auto gdkGC = gc.handle; | |
584 auto ptr = OS.pango_layout_get_text(layout); | |
585 GdkGCValues* gcValues = null; | |
586 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { | |
587 Cairo.cairo_save(cairo); | |
588 } | |
589 for (int i = 0; i < styles.length - 1; i++) { | |
590 TextStyle style = styles[i].style; | |
591 if (style is null) continue; | |
592 | |
593 bool drawBorder = style.borderStyle !is DWT.NONE; | |
594 if (drawBorder && !style.isAdherentBorder(styles[i+1].style)) { | |
595 int start = styles[i].start; | |
596 for (int j = i; j > 0 && style.isAdherentBorder(styles[j-1].style); j--) { | |
597 start = styles[j - 1].start; | |
598 } | |
599 start = translateOffset(start); | |
600 int end = translateOffset(styles[i+1].start - 1); | |
601 int byteStart = cast(int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, start) - ptr); | |
602 int byteEnd = cast(int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, end + 1) - ptr); | |
603 int[] ranges = [byteStart, byteEnd]; | |
604 auto rgn = OS.gdk_pango_layout_get_clip_region(layout, x, y, ranges.ptr, ranges.length / 2); | |
605 if (rgn !is null) { | |
606 int nRects; | |
607 GdkRectangle* rects; | |
608 OS.gdk_region_get_rectangles(rgn, &rects, &nRects); | |
609 GdkRectangle rect; | |
610 GdkColor* color = null; | |
611 if (color is null && style.borderColor !is null) color = style.borderColor.handle; | |
612 if (color is null && selectionColor !is null) color = selectionColor; | |
613 if (color is null && style.foreground !is null) color = style.foreground.handle; | |
614 if (color is null) color = data.foreground; | |
615 int width = 1; | |
616 float[] dashes = null; | |
617 switch (style.borderStyle) { | |
618 case DWT.BORDER_SOLID: break; | |
619 case DWT.BORDER_DASH: dashes = width !is 0 ? GC.LINE_DASH : GC.LINE_DASH_ZERO; break; | |
620 case DWT.BORDER_DOT: dashes = width !is 0 ? GC.LINE_DOT : GC.LINE_DOT_ZERO; break; | |
621 } | |
622 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { | |
623 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); | |
624 Cairo.cairo_set_line_width(cairo, width); | |
625 if (dashes !is null) { | |
626 double[] cairoDashes = new double[dashes.length]; | |
627 for (int j = 0; j < cairoDashes.length; j++) { | |
628 cairoDashes[j] = width is 0 || data.lineStyle is DWT.LINE_CUSTOM ? dashes[j] : dashes[j] * width; | |
629 } | |
630 Cairo.cairo_set_dash(cairo, cairoDashes.ptr, cairoDashes.length, 0); | |
631 } else { | |
632 Cairo.cairo_set_dash(cairo, null, 0, 0); | |
633 } | |
634 for (int j=0; j<nRects; j++) { | |
635 rect = rects[j]; | |
636 Cairo.cairo_rectangle(cairo, rect.x + 0.5, rect.y + 0.5, rect.width - 1, rect.height - 1); | |
637 } | |
638 Cairo.cairo_stroke(cairo); | |
639 } else { | |
640 if (gcValues is null) { | |
641 gcValues = new GdkGCValues(); | |
642 OS.gdk_gc_get_values(gdkGC, gcValues); | |
643 } | |
644 OS.gdk_gc_set_foreground(gdkGC, color); | |
645 int cap_style = OS.GDK_CAP_BUTT; | |
646 int join_style = OS.GDK_JOIN_MITER; | |
647 int line_style = 0; | |
648 if (dashes !is null) { | |
649 byte[] dash_list = new byte[dashes.length]; | |
650 for (int j = 0; j < dash_list.length; j++) { | |
651 dash_list[j] = cast(byte)(width is 0 || data.lineStyle is DWT.LINE_CUSTOM ? dashes[j] : dashes[j] * width); | |
652 } | |
653 OS.gdk_gc_set_dashes(gdkGC, 0, cast(char*)dash_list.ptr, dash_list.length); | |
654 line_style = OS.GDK_LINE_ON_OFF_DASH; | |
655 } else { | |
656 line_style = OS.GDK_LINE_SOLID; | |
657 } | |
658 OS.gdk_gc_set_line_attributes(gdkGC, width, line_style, cap_style, join_style); | |
659 for (int j=0; j<nRects; j++) { | |
660 rect = rects[j]; | |
661 OS.gdk_draw_rectangle(data.drawable, gdkGC, 0, rect.x, rect.y, rect.width - 1, rect.height - 1); | |
662 } | |
663 } | |
664 if (rects !is null) OS.g_free(rects); | |
665 OS.gdk_region_destroy(rgn); | |
666 } | |
667 } | |
668 | |
669 bool drawUnderline = false; | |
670 if (style.underline && style.underlineColor !is null) drawUnderline = true; | |
671 if (style.underline && (style.underlineStyle is DWT.UNDERLINE_ERROR || style.underlineStyle is DWT.UNDERLINE_SQUIGGLE)&& OS.GTK_VERSION < OS.buildVERSION(2, 4, 0)) drawUnderline = true; | |
672 if (drawUnderline && !style.isAdherentUnderline(styles[i+1].style)) { | |
673 int start = styles[i].start; | |
674 for (int j = i; j > 0 && style.isAdherentUnderline(styles[j-1].style); j--) { | |
675 start = styles[j - 1].start; | |
676 } | |
677 start = translateOffset(start); | |
678 int end = translateOffset(styles[i+1].start - 1); | |
679 int byteStart = cast(int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, start) - ptr); | |
680 int byteEnd = cast(int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, end + 1) - ptr); | |
681 int[] ranges = [byteStart, byteEnd]; | |
682 auto rgn = OS.gdk_pango_layout_get_clip_region(layout, x, y, ranges.ptr, ranges.length / 2); | |
683 if (rgn !is null) { | |
684 int nRects; | |
685 GdkRectangle* rects; | |
686 OS.gdk_region_get_rectangles(rgn, &rects, &nRects); | |
687 GdkRectangle rect; | |
688 GdkColor* color = null; | |
689 if (color is null && style.underlineColor !is null) color = style.underlineColor.handle; | |
690 if (color is null && selectionColor !is null) color = selectionColor; | |
691 if (color is null && style.foreground !is null) color = style.foreground.handle; | |
692 if (color is null) color = data.foreground; | |
693 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { | |
694 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); | |
695 } else { | |
696 if (gcValues is null) { | |
697 gcValues = new GdkGCValues(); | |
698 OS.gdk_gc_get_values(gdkGC, gcValues); | |
699 } | |
700 OS.gdk_gc_set_foreground(gdkGC, color); | |
701 } | |
702 int underlinePosition = -1; | |
703 int underlineThickness = 1; | |
704 if (OS.GTK_VERSION >= OS.buildVERSION(2, 6, 0)) { | |
705 Font font = style.font; | |
706 if (font is null) font = this.font; | |
707 if (font is null) font = device.systemFont; | |
708 auto lang = OS.pango_context_get_language(context); | |
709 auto metrics = OS.pango_context_get_metrics(context, font.handle, lang); | |
710 underlinePosition = OS.PANGO_PIXELS(OS.pango_font_metrics_get_underline_position(metrics)); | |
711 underlineThickness = OS.PANGO_PIXELS(OS.pango_font_metrics_get_underline_thickness(metrics)); | |
712 OS.pango_font_metrics_unref(metrics); | |
713 } | |
714 for (int j=0; j<nRects; j++) { | |
715 rect = rects[j]; | |
716 int offset = getOffset(rect.x - x, rect.y - y, null); | |
717 int lineIndex = getLineIndex(offset); | |
718 FontMetrics metrics = getLineMetrics(lineIndex); | |
719 int underlineY = rect.y + metrics.ascent - underlinePosition - style.rise; | |
720 switch (style.underlineStyle) { | |
721 case DWT.UNDERLINE_SQUIGGLE: | |
722 case DWT.UNDERLINE_ERROR: { | |
723 int squigglyThickness = underlineThickness; | |
724 int squigglyHeight = 2 * squigglyThickness; | |
725 int squigglyY = Math.min(underlineY, rect.y + rect.height - squigglyHeight - 1); | |
726 int[] points = computePolyline(rect.x, squigglyY, rect.x + rect.width, squigglyY + squigglyHeight); | |
727 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { | |
728 Cairo.cairo_set_line_width(cairo, squigglyThickness); | |
729 Cairo.cairo_set_line_cap(cairo, Cairo.CAIRO_LINE_CAP_BUTT); | |
730 Cairo.cairo_set_line_join(cairo, Cairo.CAIRO_LINE_JOIN_MITER); | |
731 if (points.length > 0) { | |
732 double xOffset = 0.5, yOffset = 0.5; | |
733 Cairo.cairo_move_to(cairo, points[0] + xOffset, points[1] + yOffset); | |
734 for (int k = 2; k < points.length; k += 2) { | |
735 Cairo.cairo_line_to(cairo, points[k] + xOffset, points[k + 1] + yOffset); | |
736 } | |
737 Cairo.cairo_stroke(cairo); | |
738 } | |
739 } else { | |
740 OS.gdk_gc_set_line_attributes(gdkGC, squigglyThickness, OS.GDK_LINE_SOLID, OS.GDK_CAP_BUTT, OS.GDK_JOIN_MITER); | |
741 OS.gdk_draw_lines(data.drawable, gdkGC, cast(GdkPoint*)points.ptr, points.length / 2); | |
742 } | |
743 break; | |
744 } | |
745 case DWT.UNDERLINE_DOUBLE: | |
746 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { | |
747 Cairo.cairo_rectangle(cairo, rect.x, underlineY + underlineThickness * 2, rect.width, underlineThickness); | |
748 Cairo.cairo_fill(cairo); | |
749 } else { | |
750 OS.gdk_draw_rectangle(data.drawable, gdkGC, 1, rect.x, underlineY + underlineThickness * 2, rect.width, underlineThickness); | |
751 } | |
752 //FALLTHROUGH | |
753 case DWT.UNDERLINE_SINGLE: | |
754 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { | |
755 Cairo.cairo_rectangle(cairo, rect.x, underlineY, rect.width, underlineThickness); | |
756 Cairo.cairo_fill(cairo); | |
757 } else { | |
758 OS.gdk_draw_rectangle(data.drawable, gdkGC, 1, rect.x, underlineY, rect.width, underlineThickness); | |
759 } | |
760 break; | |
761 } | |
762 } | |
763 if (rects !is null) OS.g_free(rects); | |
764 OS.gdk_region_destroy(rgn); | |
765 } | |
766 } | |
767 | |
768 bool drawStrikeout = false; | |
769 if (style.strikeout && style.strikeoutColor !is null) drawStrikeout = true; | |
770 if (drawStrikeout && !style.isAdherentStrikeout(styles[i+1].style)) { | |
771 int start = styles[i].start; | |
772 for (int j = i; j > 0 && style.isAdherentStrikeout(styles[j-1].style); j--) { | |
773 start = styles[j - 1].start; | |
774 } | |
775 start = translateOffset(start); | |
776 int end = translateOffset(styles[i+1].start - 1); | |
777 int byteStart = cast(int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, start) - ptr); | |
778 int byteEnd = cast(int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, end + 1) - ptr); | |
779 int[] ranges = [byteStart, byteEnd]; | |
780 auto rgn = OS.gdk_pango_layout_get_clip_region(layout, x, y, ranges.ptr, ranges.length / 2); | |
781 if (rgn !is null) { | |
782 int nRects; | |
783 GdkRectangle* rects; | |
784 OS.gdk_region_get_rectangles(rgn, &rects, &nRects); | |
785 GdkRectangle rect; | |
786 GdkColor* color = null; | |
787 if (color is null && style.strikeoutColor !is null) color = style.strikeoutColor.handle; | |
788 if (color is null && selectionColor !is null) color = selectionColor; | |
789 if (color is null && style.foreground !is null) color = style.foreground.handle; | |
790 if (color is null) color = data.foreground; | |
791 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { | |
792 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); | |
793 } else { | |
794 if (gcValues is null) { | |
795 gcValues = new GdkGCValues(); | |
796 OS.gdk_gc_get_values(gdkGC, gcValues); | |
797 } | |
798 OS.gdk_gc_set_foreground(gdkGC, color); | |
799 } | |
800 int strikeoutPosition = -1; | |
801 int strikeoutThickness = 1; | |
802 if (OS.GTK_VERSION >= OS.buildVERSION(2, 6, 0)) { | |
803 Font font = style.font; | |
804 if (font is null) font = this.font; | |
805 if (font is null) font = device.systemFont; | |
806 auto lang = OS.pango_context_get_language(context); | |
807 auto metrics = OS.pango_context_get_metrics(context, font.handle, lang); | |
808 strikeoutPosition = OS.PANGO_PIXELS(OS.pango_font_metrics_get_strikethrough_position(metrics)); | |
809 strikeoutThickness = OS.PANGO_PIXELS(OS.pango_font_metrics_get_strikethrough_thickness(metrics)); | |
810 OS.pango_font_metrics_unref(metrics); | |
811 } | |
812 for (int j=0; j<nRects; j++) { | |
813 rect = rects[j]; | |
814 int strikeoutY = rect.y + rect.height / 2 - style.rise; | |
815 if (OS.GTK_VERSION >= OS.buildVERSION(2, 6, 0)) { | |
816 int offset = getOffset(rect.x - x, rect.y - y, null); | |
817 int lineIndex = getLineIndex(offset); | |
818 FontMetrics metrics = getLineMetrics(lineIndex); | |
819 strikeoutY = rect.y + metrics.ascent - strikeoutPosition - style.rise; | |
820 } | |
821 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { | |
822 Cairo.cairo_rectangle(cairo, rect.x, strikeoutY, rect.width, strikeoutThickness); | |
823 Cairo.cairo_fill(cairo); | |
824 } else { | |
825 OS.gdk_draw_rectangle(data.drawable, gdkGC, 1, rect.x, strikeoutY, rect.width, strikeoutThickness); | |
826 } | |
827 } | |
828 if (rects !is null) OS.g_free(rects); | |
829 OS.gdk_region_destroy(rgn); | |
830 } | |
831 } | |
832 } | |
833 if (gcValues !is null) { | |
834 int mask = OS.GDK_GC_FOREGROUND | OS.GDK_GC_LINE_WIDTH | OS.GDK_GC_LINE_STYLE | OS.GDK_GC_CAP_STYLE | OS.GDK_GC_JOIN_STYLE; | |
835 OS.gdk_gc_set_values(gdkGC, gcValues, mask); | |
836 data.state &= ~GC.LINE_STYLE; | |
837 } | |
838 if (cairo !is null && OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { | |
839 Cairo.cairo_restore(cairo); | |
840 } | |
841 } | |
842 | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
843 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
|
844 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
|
845 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
|
846 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
|
847 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
|
848 invalidOffsets = null; |
24
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 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
851 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
852 * Returns the receiver's horizontal text alignment, which will be one |
71 | 853 * of <code>DWT.LEFT</code>, <code>DWT.CENTER</code> or |
854 * <code>DWT.RIGHT</code>. | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
855 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
856 * @return the alignment used to positioned text horizontally |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
857 * |
71 | 858 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
859 * <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
|
860 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
861 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
862 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
|
863 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
|
864 auto alignment = OS.pango_layout_get_alignment(layout); |
240 | 865 bool rtl = OS.pango_context_get_base_dir(context) is OS.PANGO_DIRECTION_RTL; |
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
|
866 switch ( cast(int)alignment) { |
240 | 867 case OS.PANGO_ALIGN_LEFT: return rtl ? DWT.RIGHT : DWT.LEFT; |
868 case OS.PANGO_ALIGN_RIGHT: return rtl ? DWT.LEFT : DWT.RIGHT; | |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
869 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
|
870 } |
240 | 871 return DWT.CENTER; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
872 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
873 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
874 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
875 * Returns the ascent of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
876 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
877 * @return the ascent |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
878 * |
71 | 879 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
880 * <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
|
881 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
882 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
883 * @see #getDescent() |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
884 * @see #setDescent(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
885 * @see #setAscent(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
886 * @see #getLineMetrics(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
887 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
888 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
|
889 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
|
890 return ascent; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
891 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
892 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
893 /** |
259 | 894 * Returns the bounds of the receiver. The width returned is either the |
895 * width of the longest line or the width set using {@link TextLayout#setWidth(int)}. | |
896 * To obtain the text bounds of a line use {@link TextLayout#getLineBounds(int)}. | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
897 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
898 * @return the bounds of the receiver |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
899 * |
71 | 900 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
901 * <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
|
902 * </ul> |
261
edcf78db8722
fix compile errors for SWT 3.4
Frank Benoit <benoit@tionex.de>
parents:
259
diff
changeset
|
903 * |
259 | 904 * @see #setWidth(int) |
905 * @see #getLineBounds(int) | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
906 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
907 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
|
908 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
|
909 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
|
910 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
|
911 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
|
912 int wrapWidth = OS.pango_layout_get_width(layout); |
240 | 913 w = wrapWidth !is -1 ? wrapWidth : w + OS.pango_layout_get_indent(layout); |
914 int width = OS.PANGO_PIXELS(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
|
915 int height = OS.PANGO_PIXELS(h); |
140 | 916 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
|
917 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
|
918 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
919 return new Rectangle(0, 0, width, height); |
24
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 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
922 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
923 * Returns the bounds for the specified range of characters. The |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
924 * bounds is the smallest rectangle that encompasses all characters |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
925 * 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
|
926 * clamped if out of range. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
927 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
928 * @param start the start offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
929 * @param end the end offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
930 * @return the bounds of the character range |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
931 * |
71 | 932 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
933 * <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
|
934 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
935 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
936 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
|
937 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
|
938 computeRuns(); |
240 | 939 int length_ = text.length; |
940 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
|
941 if (start > end) return new Rectangle(0, 0, 0, 0); |
240 | 942 start = Math.min(Math.max(0, start), length_ - 1); |
943 end = Math.min(Math.max(0, end), 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
|
944 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
|
945 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
|
946 auto ptr = OS.pango_layout_get_text(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
947 auto cont = fromStringz(ptr); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
948 start = cont.utf8AdjustOffset( start ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
949 end = cont.utf8AdjustOffset( end ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
950 int incr = 1; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
951 if( end < cont.length ){ |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
952 incr = cont.getRelativeCodePointOffset( end, 1 ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
953 } |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
954 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
|
955 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
|
956 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
|
957 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
|
958 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
|
959 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
|
960 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
|
961 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
|
962 GdkRectangle rect; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
963 |
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
|
964 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
965 * 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
|
966 * 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
|
967 * 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
|
968 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
969 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
|
970 auto iter = OS.pango_layout_get_iter(layout); |
71 | 971 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
|
972 auto linesRegion = OS.gdk_region_new(); |
71 | 973 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
|
974 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
|
975 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
|
976 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
|
977 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
|
978 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
|
979 } 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
|
980 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
|
981 } |
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 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
|
983 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
|
984 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
|
985 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
|
986 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
|
987 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
|
988 } 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
|
989 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
|
990 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
|
991 OS.pango_layout_iter_free(iter); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
992 |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
993 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
|
994 OS.gdk_region_destroy(clipRegion); |
240 | 995 if (OS.pango_context_get_base_dir(context) is OS.PANGO_DIRECTION_RTL) { |
996 rect.x = width() - rect.x - rect.width; | |
997 } | |
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
|
998 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
|
999 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1000 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1001 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1002 * Returns the descent of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1003 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1004 * @return the descent |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1005 * |
71 | 1006 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1007 * <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
|
1008 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1009 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1010 * @see #getAscent() |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1011 * @see #setAscent(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1012 * @see #setDescent(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1013 * @see #getLineMetrics(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1014 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1015 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
|
1016 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
|
1017 return descent; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1018 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1019 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1020 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1021 * Returns the default font currently being used by the receiver |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1022 * to draw and measure text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1023 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1024 * @return the receiver's font |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1025 * |
71 | 1026 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1027 * <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
|
1028 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1029 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1030 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
|
1031 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
|
1032 return font; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1033 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1034 |
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 * Returns the receiver's indent. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1037 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1038 * @return the receiver's indent |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1039 * |
71 | 1040 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1041 * <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
|
1042 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1043 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1044 * @since 3.2 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1045 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1046 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
|
1047 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
|
1048 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
|
1049 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1050 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1051 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1052 * Returns the receiver's justification. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1053 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1054 * @return the receiver's justification |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1055 * |
71 | 1056 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1057 * <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
|
1058 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1059 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1060 * @since 3.2 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1061 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1062 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
|
1063 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
|
1064 return cast(bool) OS.pango_layout_get_justify(layout); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1065 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1066 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1067 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1068 * Returns the embedding level for the specified character offset. The |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1069 * 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
|
1070 * character in bidirectional text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1071 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1072 * @param offset the character offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1073 * @return the embedding level |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1074 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1075 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1076 * <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
|
1077 * </ul> |
71 | 1078 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1079 * <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
|
1080 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1081 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
|
1082 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
|
1083 computeRuns(); |
240 | 1084 int length_ = text.length; |
1085 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
|
1086 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
|
1087 auto iter = OS.pango_layout_get_iter(layout); |
71 | 1088 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
|
1089 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
|
1090 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
|
1091 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
|
1092 auto ptr = OS.pango_layout_get_text(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1093 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
|
1094 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
|
1095 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
|
1096 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
|
1097 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
|
1098 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
|
1099 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
|
1100 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
|
1101 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
|
1102 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
|
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 } |
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 } 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
|
1107 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
|
1108 return level; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1109 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1110 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1111 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1112 * 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
|
1113 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1114 * @param lineIndex the line index |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1115 * @return the line bounds |
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 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1118 * <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
|
1119 * </ul> |
71 | 1120 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1121 * <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
|
1122 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1123 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1124 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
|
1125 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
|
1126 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
|
1127 int lineCount = OS.pango_layout_get_line_count(layout); |
71 | 1128 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
|
1129 auto iter = OS.pango_layout_get_iter(layout); |
71 | 1130 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
|
1131 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
|
1132 PangoRectangle rect; |
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
1133 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
|
1134 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
|
1135 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
|
1136 int y = OS.PANGO_PIXELS(rect.y); |
240 | 1137 int width_ = OS.PANGO_PIXELS(rect.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
|
1138 int height = OS.PANGO_PIXELS(rect.height); |
140 | 1139 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
|
1140 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
|
1141 } |
240 | 1142 if (OS.pango_context_get_base_dir(context) is OS.PANGO_DIRECTION_RTL) { |
1143 x = width() - x - width_; | |
1144 } | |
1145 return new Rectangle(x, y, width_, height); | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1146 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1147 |
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 * Returns the receiver's line count. This includes lines caused |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1150 * by wrapping. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1151 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1152 * @return the line count |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1153 * |
71 | 1154 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1155 * <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
|
1156 * </ul> |
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 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
|
1159 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
|
1160 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
|
1161 return OS.pango_layout_get_line_count(layout); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1162 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1163 |
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 * Returns the index of the line that contains the specified |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1166 * character offset. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1167 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1168 * @param offset the character offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1169 * @return the line index |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1170 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1171 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1172 * <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
|
1173 * </ul> |
71 | 1174 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1175 * <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
|
1176 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1177 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1178 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
|
1179 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
|
1180 computeRuns(); |
240 | 1181 int length_ = text.length; |
1182 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
|
1183 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
|
1184 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
|
1185 auto ptr = OS.pango_layout_get_text(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1186 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
|
1187 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
|
1188 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
|
1189 auto iter = OS.pango_layout_get_iter(layout); |
71 | 1190 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
|
1191 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
|
1192 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
|
1193 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
|
1194 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1195 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
|
1196 return line; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1197 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1198 |
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 * Returns the font metrics for the specified line index. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1201 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1202 * @param lineIndex the line index |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1203 * @return the font metrics |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1204 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1205 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1206 * <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
|
1207 * </ul> |
71 | 1208 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1209 * <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
|
1210 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1211 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1212 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
|
1213 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
|
1214 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
|
1215 int lineCount = OS.pango_layout_get_line_count(layout); |
71 | 1216 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
|
1217 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
|
1218 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
|
1219 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
|
1220 if (line.runs is null) { |
140 | 1221 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
|
1222 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
|
1223 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
|
1224 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
|
1225 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
|
1226 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
|
1227 } else { |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
1228 PangoRectangle rect; |
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
1229 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
|
1230 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
|
1231 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
|
1232 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1233 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
|
1234 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
|
1235 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
|
1236 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1237 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1238 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1239 * 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
|
1240 * 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
|
1241 * value, which contains the length of the text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1242 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1243 * @return the line offsets |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1244 * |
71 | 1245 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1246 * <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
|
1247 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1248 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1249 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
|
1250 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
|
1251 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
|
1252 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
|
1253 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
|
1254 auto ptr = OS.pango_layout_get_text(layout); |
240 | 1255 for (int i = 0; i < lineCount; i++) { |
1256 auto line = OS.pango_layout_get_line(layout, i); | |
1257 int pos = cast(int)/*64*/OS.g_utf8_pointer_to_offset(ptr, ptr + line.start_index); | |
1258 offsets[i] = untranslateOffset(pos); | |
1259 } | |
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
|
1260 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
|
1261 return offsets; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1262 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1263 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1264 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1265 * Returns the location for the specified character offset. The |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1266 * <code>trailing</code> argument indicates whether the offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1267 * corresponds to the leading or trailing edge of the cluster. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1268 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1269 * @param offset the character offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1270 * @param trailing the trailing flag |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1271 * @return the location of the character offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1272 * |
71 | 1273 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1274 * <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
|
1275 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1276 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1277 * @see #getOffset(Point, int[]) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1278 * @see #getOffset(int, int, int[]) |
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 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
|
1281 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
|
1282 computeRuns(); |
240 | 1283 int length_ = text.length; |
1284 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
|
1285 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
|
1286 auto ptr = OS.pango_layout_get_text(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1287 auto cont = fromStringz(ptr); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1288 offset = cont.utf8AdjustOffset(offset); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1289 // 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
|
1290 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
|
1291 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
|
1292 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
|
1293 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
|
1294 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
|
1295 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
|
1296 int y = pos.y; |
240 | 1297 x = OS.PANGO_PIXELS(x); |
1298 if (OS.pango_context_get_base_dir(context) is OS.PANGO_DIRECTION_RTL) { | |
1299 x = width() - x; | |
1300 } | |
1301 return new Point(x, OS.PANGO_PIXELS(y)); | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1302 } |
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 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1305 * Returns the next offset for the specified offset and movement |
71 | 1306 * type. The movement is one of <code>DWT.MOVEMENT_CHAR</code>, |
1307 * <code>DWT.MOVEMENT_CLUSTER</code>, <code>DWT.MOVEMENT_WORD</code>, | |
1308 * <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
|
1309 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1310 * @param offset the start offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1311 * @param movement the movement type |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1312 * @return the next offset |
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 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1315 * <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
|
1316 * </ul> |
71 | 1317 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1318 * <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
|
1319 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1320 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1321 * @see #getPreviousOffset(int, int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1322 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1323 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
|
1324 return _getOffset(offset, movement, true); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1325 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1326 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1327 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
|
1328 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
|
1329 computeRuns(); |
240 | 1330 int length_ = text.length; |
1331 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
|
1332 if (forward) { |
240 | 1333 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
|
1334 } else { |
140 | 1335 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
|
1336 } |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1337 auto cont = OS.pango_layout_get_text(layout); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1338 assert( cont ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1339 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
|
1340 int step = forward ? 1 : -1; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1341 if ((movement & DWT.MOVEMENT_CHAR) !is 0){ |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1342 //PORTING take care of utf8 |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1343 int toffset = translateOffset(offset); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1344 toffset = dcont.utf8AdjustOffset( toffset ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1345 int incr = dcont.getRelativeCodePointOffset( toffset, step ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1346 return offset + incr; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1347 } |
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
|
1348 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
|
1349 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
|
1350 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
|
1351 if (attrs is null) return offset + step; |
240 | 1352 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
|
1353 offset = translateOffset(offset); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1354 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
|
1355 PangoLogAttr* logAttr = new PangoLogAttr(); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1356 offset = validateOffset( dcont, offset, step); |
240 | 1357 while (0 < offset && offset < 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
|
1358 *logAttr = attrs[ offset ]; |
140 | 1359 if (((movement & DWT.MOVEMENT_CLUSTER) !is 0) && ( logAttr.bitfield0 & (1<<4/*is_cursor_position*/))) break; |
1360 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
|
1361 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
|
1362 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
|
1363 } 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
|
1364 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
|
1365 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1366 } |
140 | 1367 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
|
1368 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
|
1369 } |
140 | 1370 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
|
1371 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
|
1372 } |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1373 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
|
1374 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1375 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
|
1376 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
|
1377 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1378 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1379 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1380 * Returns the character offset for the specified point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1381 * 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
|
1382 * 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
|
1383 * 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
|
1384 * 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
|
1385 * 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
|
1386 * the point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1387 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1388 * @param point the point |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1389 * @param trailing the trailing buffer |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1390 * @return the character offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1391 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1392 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1393 * <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
|
1394 * <li>ERROR_NULL_ARGUMENT - if the point is null</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1395 * </ul> |
71 | 1396 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1397 * <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
|
1398 * </ul> |
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 * @see #getLocation(int, bool) |
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 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
|
1403 checkLayout(); |
140 | 1404 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
|
1405 return getOffset(point.x, point.y, trailing); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1406 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1407 |
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 * Returns the character offset for the specified point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1410 * 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
|
1411 * 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
|
1412 * 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
|
1413 * 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
|
1414 * 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
|
1415 * the point. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1416 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1417 * @param x the x coordinate of the point |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1418 * @param y the y coordinate of the point |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1419 * @param trailing the trailing buffer |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1420 * @return the character offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1421 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1422 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1423 * <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
|
1424 * </ul> |
71 | 1425 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1426 * <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
|
1427 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1428 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1429 * @see #getLocation(int, bool) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1430 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1431 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
|
1432 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
|
1433 computeRuns(); |
140 | 1434 if (trailing !is null && trailing.length < 1) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
240 | 1435 if (OS.pango_context_get_base_dir(context) is OS.PANGO_DIRECTION_RTL) { |
1436 x = width() - x; | |
1437 } | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1438 |
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 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1440 * 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
|
1441 * logical end/start offset of a line when the coordinates are outside |
71 | 1442 * 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
|
1443 * 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
|
1444 * 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
|
1445 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1446 auto iter = OS.pango_layout_get_iter(layout); |
71 | 1447 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
|
1448 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
|
1449 do { |
170
dd156298d22f
tango -r3232, dmd 1.027, some reedits in StyledText
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
1450 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
|
1451 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
|
1452 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
|
1453 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
|
1454 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
|
1455 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
|
1456 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
|
1457 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
|
1458 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
|
1459 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1460 } 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
|
1461 OS.pango_layout_iter_free(iter); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1462 |
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 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
|
1464 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
|
1465 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
|
1466 auto ptr = OS.pango_layout_get_text(layout); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1467 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
|
1468 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
|
1469 return untranslateOffset(offset); |
24
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 * Returns the orientation of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1474 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1475 * @return the orientation style |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1476 * |
71 | 1477 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1478 * <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
|
1479 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1480 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1481 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
|
1482 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
|
1483 int baseDir = OS.pango_context_get_base_dir(context); |
140 | 1484 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
|
1485 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1486 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1487 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1488 * Returns the previous offset for the specified offset and movement |
71 | 1489 * type. The movement is one of <code>DWT.MOVEMENT_CHAR</code>, |
1490 * <code>DWT.MOVEMENT_CLUSTER</code> or <code>DWT.MOVEMENT_WORD</code>, | |
1491 * <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
|
1492 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1493 * @param offset the start offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1494 * @param movement the movement type |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1495 * @return the previous offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1496 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1497 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1498 * <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
|
1499 * </ul> |
71 | 1500 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1501 * <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
|
1502 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1503 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1504 * @see #getNextOffset(int, int) |
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 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
|
1507 return _getOffset(index, movement, false); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1508 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1509 |
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 * 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
|
1512 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1513 * @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
|
1514 * text style. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1515 * |
71 | 1516 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1517 * <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
|
1518 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1519 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1520 * @see #getStyles() |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1521 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1522 * @since 3.2 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1523 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1524 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
|
1525 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
|
1526 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
|
1527 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
|
1528 for (int i=0; i<styles.length - 1; i++) { |
140 | 1529 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
|
1530 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
|
1531 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
|
1532 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1533 } |
140 | 1534 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
|
1535 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
|
1536 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
|
1537 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
|
1538 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1539 return result; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1540 } |
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 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1543 * Returns the text segments offsets of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1544 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1545 * @return the text segments offsets |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1546 * |
71 | 1547 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1548 * <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
|
1549 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1550 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1551 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
|
1552 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
|
1553 return segments; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1554 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1555 |
238 | 1556 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
|
1557 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
|
1558 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
|
1559 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
|
1560 int len = text.length; |
140 | 1561 if (len is 0) return text; |
1562 if (nSegments is 2) { | |
1563 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
|
1564 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1565 char[] oldChars = text[0..len].dup; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1566 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
|
1567 int charCount = 0, segmentCount = 0; |
238 | 1568 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
|
1569 while (charCount < len) { |
140 | 1570 if (segmentCount < nSegments && charCount is segments[segmentCount]) { |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1571 newChars[charCount + segmentCount .. charCount + segmentCount + separator.length ] = separator; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1572 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
|
1573 } else { |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1574 newChars[charCount + segmentCount] = oldChars[charCount]; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1575 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
|
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 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
|
1579 segments[segmentCount] = charCount; |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1580 newChars[charCount + segmentCount .. charCount + segmentCount + separator.length ] = separator; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1581 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
|
1582 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1583 return newChars[ 0 .. Math.min(charCount + segmentCount, newChars.length) ]; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1584 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1585 |
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 * Returns the line spacing of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1588 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1589 * @return the line spacing |
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 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
|
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 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
|
1598 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1599 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1600 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1601 * 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
|
1602 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1603 * @param offset the text offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1604 * @return the style or <code>null</code> if not set |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1605 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1606 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1607 * <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
|
1608 * </ul> |
71 | 1609 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1610 * <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
|
1611 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1612 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1613 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
|
1614 checkLayout(); |
240 | 1615 int length_ = text.length; |
1616 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
|
1617 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
|
1618 StyleItem item = styles[i]; |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1619 if (item.start > offset) { |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
1620 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
|
1621 } |
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
|
1622 } |
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 return null; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1624 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1625 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1626 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1627 * Gets all styles of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1628 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1629 * @return the styles |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1630 * |
71 | 1631 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1632 * <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
|
1633 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1634 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1635 * @see #getRanges() |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1636 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1637 * @since 3.2 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1638 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1639 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
|
1640 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
|
1641 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
|
1642 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
|
1643 for (int i=0; i<styles.length; i++) { |
140 | 1644 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
|
1645 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
|
1646 } |
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 } |
140 | 1648 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
|
1649 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
|
1650 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
|
1651 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
|
1652 } |
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 result; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1654 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1655 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1656 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1657 * Returns the tab list of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1658 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1659 * @return the tab list |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1660 * |
71 | 1661 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1662 * <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
|
1663 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1664 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1665 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
|
1666 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
|
1667 return tabs; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1668 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1669 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1670 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1671 * Gets the receiver's text, which will be an empty |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1672 * string if it has never been set. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1673 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1674 * @return the receiver's text |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1675 * |
71 | 1676 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1677 * <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
|
1678 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1679 */ |
238 | 1680 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
|
1681 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
|
1682 return text; |
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 * Returns the width of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1687 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1688 * @return the width |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1689 * |
71 | 1690 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1691 * <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
|
1692 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1693 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1694 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
|
1695 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
|
1696 int width = OS.pango_layout_get_width(layout); |
140 | 1697 return width !is -1 ? OS.PANGO_PIXELS(width) : -1; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1698 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1699 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1700 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1701 * 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
|
1702 * and <code>false</code> otherwise. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1703 * <p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1704 * This method gets the dispose state for the text layout. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1705 * 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
|
1706 * invoke any other method using the text layout. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1707 * </p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1708 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1709 * @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
|
1710 */ |
150
f2e04420fd6c
reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents:
146
diff
changeset
|
1711 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
|
1712 return layout is null; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1713 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1714 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1715 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1716 * Sets the text alignment for the receiver. The alignment controls |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1717 * how a line of text is positioned horizontally. The argument should |
71 | 1718 * 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
|
1719 * <p> |
71 | 1720 * The default alignment is <code>DWT.LEFT</code>. Note that the receiver's |
1721 * 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
|
1722 * alignment. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1723 * </p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1724 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1725 * @param alignment the new alignment |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1726 * |
71 | 1727 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1728 * <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
|
1729 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1730 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1731 * @see #setWidth(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1732 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1733 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
|
1734 checkLayout(); |
71 | 1735 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
|
1736 alignment &= mask; |
140 | 1737 if (alignment is 0) return; |
1738 if ((alignment & DWT.LEFT) !is 0) alignment = DWT.LEFT; | |
1739 if ((alignment & DWT.RIGHT) !is 0) alignment = DWT.RIGHT; | |
240 | 1740 bool rtl = OS.pango_context_get_base_dir(context) is OS.PANGO_DIRECTION_RTL; |
1741 int align_ = OS.PANGO_ALIGN_CENTER; | |
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
|
1742 switch (alignment) { |
240 | 1743 case DWT.LEFT: |
1744 align_ = rtl ? OS.PANGO_ALIGN_RIGHT : OS.PANGO_ALIGN_LEFT; | |
1745 break; | |
1746 case DWT.RIGHT: | |
1747 align_ = rtl ? OS.PANGO_ALIGN_LEFT : OS.PANGO_ALIGN_RIGHT; | |
1748 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
|
1749 } |
240 | 1750 OS.pango_layout_set_alignment(layout, align_); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1751 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1752 |
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 * 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
|
1755 * 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
|
1756 * 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
|
1757 * ascent is calculated from the line fonts. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1758 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1759 * @param ascent the new ascent |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1760 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1761 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1762 * <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
|
1763 * </ul> |
71 | 1764 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1765 * <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
|
1766 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1767 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1768 * @see #setDescent(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1769 * @see #getLineMetrics(int) |
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 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
|
1772 checkLayout(); |
71 | 1773 if (ascent < -1) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
140 | 1774 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
|
1775 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
|
1776 this.ascent = ascent; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1777 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1778 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1779 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1780 * 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
|
1781 * 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
|
1782 * 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
|
1783 * descent is calculated from the line fonts. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1784 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1785 * @param descent the new descent |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1786 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1787 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1788 * <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
|
1789 * </ul> |
71 | 1790 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1791 * <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
|
1792 * </ul> |
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 * @see #setAscent(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1795 * @see #getLineMetrics(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1796 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1797 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
|
1798 checkLayout(); |
71 | 1799 if (descent < -1) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
140 | 1800 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
|
1801 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
|
1802 this.descent = descent; |
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 * 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
|
1807 * to draw and measure text. If the |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1808 * argument is null, then a default font appropriate |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1809 * 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
|
1810 * style can override the default font. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1811 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1812 * @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
|
1813 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1814 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1815 * <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
|
1816 * </ul> |
71 | 1817 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1818 * <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
|
1819 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1820 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1821 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
|
1822 checkLayout (); |
71 | 1823 if (font !is null && font.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
240 | 1824 Font oldFont = this.font; |
1825 if (oldFont is font) return; | |
259 | 1826 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
|
1827 this.font = font; |
240 | 1828 if (oldFont !is null && oldFont.opEquals(font)) return; |
1829 OS.pango_layout_set_font_description(layout, font !is null ? font.handle : device.systemFont.handle); | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1830 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1831 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1832 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1833 * 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
|
1834 * each paragraph. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1835 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1836 * @param indent new indent |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1837 * |
71 | 1838 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1839 * <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
|
1840 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1841 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1842 * @since 3.2 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1843 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1844 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
|
1845 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
|
1846 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
|
1847 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
|
1848 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1849 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1850 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1851 * 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
|
1852 * width must be set in order to use justification. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1853 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1854 * @param justify new justify |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1855 * |
71 | 1856 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1857 * <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
|
1858 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1859 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1860 * @since 3.2 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1861 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1862 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
|
1863 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
|
1864 OS.pango_layout_set_justify(layout, justify); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1865 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1866 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1867 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1868 * Sets the orientation of the receiver, which must be one |
71 | 1869 * 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
|
1870 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1871 * @param orientation new orientation style |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1872 * |
71 | 1873 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1874 * <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
|
1875 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1876 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1877 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
|
1878 checkLayout(); |
71 | 1879 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
|
1880 orientation &= mask; |
140 | 1881 if (orientation is 0) return; |
1882 if ((orientation & DWT.LEFT_TO_RIGHT) !is 0) orientation = DWT.LEFT_TO_RIGHT; | |
1883 int baseDir = orientation is DWT.RIGHT_TO_LEFT ? OS.PANGO_DIRECTION_RTL : OS.PANGO_DIRECTION_LTR; | |
1884 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
|
1885 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
|
1886 OS.pango_layout_context_changed(layout); |
240 | 1887 int align_ = OS.pango_layout_get_alignment(layout); |
1888 if (align_ !is OS.PANGO_ALIGN_CENTER) { | |
1889 align_ = align_ is OS.PANGO_ALIGN_LEFT ? OS.PANGO_ALIGN_RIGHT : OS.PANGO_ALIGN_LEFT; | |
1890 OS.pango_layout_set_alignment(layout, align_); | |
1891 } | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1892 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1893 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1894 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1895 * Sets the line spacing of the receiver. The line spacing |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1896 * is the space left between lines. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1897 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1898 * @param spacing the new line spacing |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1899 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1900 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1901 * <li>ERROR_INVALID_ARGUMENT - if the spacing is negative</li> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1902 * </ul> |
71 | 1903 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1904 * <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
|
1905 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1906 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1907 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
|
1908 checkLayout(); |
71 | 1909 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
|
1910 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
|
1911 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1912 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1913 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1914 * 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
|
1915 * override the default behaviour of the bidirectional algorithm. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1916 * Bidirectional reordering can happen within a text segment but not |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1917 * between two adjacent segments. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1918 * <p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1919 * 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
|
1920 * <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
|
1921 * 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
|
1922 * the text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1923 * </p> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1924 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1925 * @param segments the text segments offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1926 * |
71 | 1927 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1928 * <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
|
1929 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1930 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1931 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
|
1932 checkLayout(); |
140 | 1933 if (this.segments is null && segments is null) return; |
1934 if (this.segments !is null && segments !is null) { | |
1935 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
|
1936 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
|
1937 for (i = 0; i <segments.length; i++) { |
140 | 1938 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
|
1939 } |
140 | 1940 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
|
1941 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1942 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1943 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
|
1944 this.segments = segments; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1945 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1946 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1947 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1948 * 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
|
1949 * 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
|
1950 * inclusive and will be clamped if out of range. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1951 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1952 * @param style the style |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1953 * @param start the start offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1954 * @param end the end offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1955 * |
71 | 1956 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1957 * <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
|
1958 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1959 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1960 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
|
1961 checkLayout(); |
240 | 1962 int length_ = text.length; |
1963 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
|
1964 if (start > end) return; |
240 | 1965 start = Math.min(Math.max(0, start), length_ - 1); |
1966 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
|
1967 start = text.utf8AdjustOffset( start ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1968 end = text.utf8AdjustOffset( end ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1969 |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1970 |
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
|
1971 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1972 * 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
|
1973 * 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
|
1974 * 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
|
1975 * |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1976 * 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
|
1977 */ |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1978 int relIndex; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1979 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
|
1980 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
|
1981 } |
240 | 1982 if ((end < length_ - 1) && isLam(text[ end .. $ ].firstCodePoint()) && isAlef(text.getRelativeCodePoint(end, 1,relIndex))) { |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
1983 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
|
1984 } |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1985 |
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
|
1986 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
|
1987 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
|
1988 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
|
1989 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
|
1990 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
|
1991 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
|
1992 } 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
|
1993 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
|
1994 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1995 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1996 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
|
1997 StyleItem item = styles[high]; |
140 | 1998 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
|
1999 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
|
2000 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
|
2001 } else { |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
2002 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
|
2003 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2004 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2005 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2006 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
|
2007 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
|
2008 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
|
2009 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
|
2010 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
|
2011 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
|
2012 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2013 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
|
2014 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
|
2015 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
|
2016 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
|
2017 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
|
2018 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
|
2019 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2020 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
|
2021 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
|
2022 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
|
2023 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
|
2024 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
|
2025 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
|
2026 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
|
2027 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
|
2028 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
|
2029 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
|
2030 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
|
2031 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
|
2032 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
|
2033 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
|
2034 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2035 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2036 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
|
2037 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
|
2038 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
|
2039 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
|
2040 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
|
2041 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
|
2042 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
|
2043 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
|
2044 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
|
2045 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
|
2046 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
|
2047 styles = newStyles; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2048 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2049 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2050 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2051 * 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
|
2052 * 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
|
2053 * tab stop. The last tab stop width is repeated continuously. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2054 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2055 * @param tabs the new tab list |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2056 * |
71 | 2057 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2058 * <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
|
2059 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2060 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2061 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
|
2062 checkLayout(); |
140 | 2063 if (this.tabs is null && tabs is null) return; |
2064 if (this.tabs!is null && tabs !is null) { | |
2065 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
|
2066 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
|
2067 for (i = 0; i <tabs.length; i++) { |
140 | 2068 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
|
2069 } |
140 | 2070 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
|
2071 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2072 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2073 this.tabs = tabs; |
140 | 2074 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
|
2075 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
|
2076 } 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
|
2077 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
|
2078 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
|
2079 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
|
2080 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
|
2081 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2082 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
|
2083 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
|
2084 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2085 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2086 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2087 * 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
|
2088 * 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
|
2089 * 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
|
2090 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2091 OS.pango_layout_context_changed(layout); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2092 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2093 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2094 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2095 * Sets the receiver's text. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2096 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2097 * @param text the new text |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2098 * |
71 | 2099 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2100 * <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
|
2101 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2102 */ |
238 | 2103 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
|
2104 checkLayout (); |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
2105 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
|
2106 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
|
2107 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
|
2108 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
|
2109 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
|
2110 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
|
2111 styles[styles.length - 1].start = text.length; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2112 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2113 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2114 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2115 * Sets the line width of the receiver, which determines how |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2116 * text should be wrapped and aligned. The default value is |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2117 * <code>-1</code> which means wrapping is disabled. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2118 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2119 * @param width the new width |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2120 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2121 * @exception IllegalArgumentException <ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2122 * <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
|
2123 * </ul> |
71 | 2124 * @exception DWTException <ul> |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2125 * <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
|
2126 * </ul> |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2127 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2128 * @see #setAlignment(int) |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2129 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2130 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
|
2131 checkLayout (); |
140 | 2132 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
|
2133 freeRuns(); |
240 | 2134 if (width is -1) { |
2135 OS.pango_layout_set_width(layout, -1); | |
2136 bool rtl = OS.pango_context_get_base_dir(context) is OS.PANGO_DIRECTION_RTL; | |
2137 OS.pango_layout_set_alignment(layout, rtl ? OS.PANGO_ALIGN_RIGHT : OS.PANGO_ALIGN_LEFT); | |
2138 } else { | |
2139 OS.pango_layout_set_width(layout, width * OS.PANGO_SCALE); | |
2140 } | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2141 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2142 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2143 static final bool isLam(int ch) { |
140 | 2144 return ch is 0x0644; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2145 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2146 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2147 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
|
2148 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
|
2149 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
|
2150 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
|
2151 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
|
2152 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
|
2153 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
|
2154 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
|
2155 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
|
2156 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
|
2157 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
|
2158 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
|
2159 return true; |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
2160 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
|
2161 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2162 return false; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2163 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2164 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2165 /** |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2166 * Returns a string containing a concise, human-readable |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2167 * description of the receiver. |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2168 * |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2169 * @return a string representation of the receiver |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2170 */ |
238 | 2171 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
|
2172 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
|
2173 return Format( "TextLayout {{{}}", layout ); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2174 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2175 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2176 /* |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2177 * Translate a client offset to an internal offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2178 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2179 int translateOffset(int offset) { |
240 | 2180 int length_ = text.length; |
2181 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
|
2182 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
|
2183 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
|
2184 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
|
2185 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
|
2186 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2187 return offset; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2188 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2189 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2190 /* |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2191 * Translate an internal offset to a client offset |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2192 */ |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2193 int untranslateOffset(int offset) { |
240 | 2194 int length_ = text.length; |
2195 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
|
2196 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
|
2197 for (int i = 0; i < invalidOffsets.length; i++) { |
140 | 2198 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
|
2199 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
|
2200 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
|
2201 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2202 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
|
2203 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
|
2204 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2205 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2206 return offset - invalidOffsets.length; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2207 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2208 |
238 | 2209 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
|
2210 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
|
2211 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
|
2212 do { |
182
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
2213 if( offset is 0 && step < 0 ){ |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
2214 offset += step; |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
2215 } |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
2216 else{ |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
2217 offset += cont.getRelativeCodePointOffset( offset, step ); |
721afe91f448
Fix: several utf8 awareness problems
Frank Benoit <benoit@tionex.de>
parents:
170
diff
changeset
|
2218 } |
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
|
2219 while (0 <= i && i < invalidOffsets.length) { |
140 | 2220 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
|
2221 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
|
2222 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2223 } 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
|
2224 return offset; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2225 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2226 |
240 | 2227 int width () { |
2228 int wrapWidth = OS.pango_layout_get_width(layout); | |
2229 if (wrapWidth !is -1) return OS.PANGO_PIXELS(wrapWidth); | |
2230 int w, h; | |
2231 OS.pango_layout_get_size(layout, &w, &h); | |
2232 return OS.PANGO_PIXELS(w + OS.pango_layout_get_indent(layout)); | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2233 } |
240 | 2234 |
2235 } |