2 // System.Drawing.StringFormat.cs
5 // Dennis Hayes (dennish@Raytek.com)
6 // Miguel de Icaza (miguel@ximian.com)
7 // Jordi Mas i Hernandez (jordi@ximian.com)
9 // (C) 2002 Ximian, Inc
10 // (C) 2003 Novell, Inc.
14 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
16 // Permission is hereby granted, free of charge, to any person obtaining
17 // a copy of this software and associated documentation files (the
18 // "Software"), to deal in the Software without restriction, including
19 // without limitation the rights to use, copy, modify, merge, publish,
20 // distribute, sublicense, and/or sell copies of the Software, and to
21 // permit persons to whom the Software is furnished to do so, subject to
22 // the following conditions:
24 // The above copyright notice and this permission notice shall be
25 // included in all copies or substantial portions of the Software.
27 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
28 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
30 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
31 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
32 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
33 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
36 using System.Drawing.Text;
38 namespace System.Drawing
41 /// Summary description for StringFormat.
43 public sealed class StringFormat : MarshalByRefObject, IDisposable, ICloneable
45 private static StringFormat genericDefault;
46 private IntPtr nativeStrFmt = IntPtr.Zero;
47 private int language = GDIPlus.LANG_NEUTRAL;
48 internal CharacterRange [] CharRanges;
50 public StringFormat() : this (0, GDIPlus.LANG_NEUTRAL)
55 public StringFormat(StringFormatFlags options, int lang)
59 Status status = GDIPlus.GdipCreateStringFormat (options, lang, out nativeStrFmt);
60 GDIPlus.CheckStatus (status);
62 LineAlignment = StringAlignment.Near;
63 Alignment = StringAlignment.Near;
68 internal StringFormat(IntPtr native)
70 nativeStrFmt = native;
81 System.GC.SuppressFinalize (this);
84 void Dispose (bool disposing)
89 Status status = GDIPlus.GdipDeleteStringFormat (nativeStrFmt);
90 GDIPlus.CheckStatus (status);
95 public StringFormat (StringFormat source)
99 Status status = GDIPlus.GdipCloneStringFormat (source.NativeObject, out nativeStrFmt);
100 GDIPlus.CheckStatus (status);
104 public StringFormat (StringFormatFlags flags)
108 Status status = GDIPlus.GdipCreateStringFormat (flags, GDIPlus.LANG_NEUTRAL, out nativeStrFmt);
109 GDIPlus.CheckStatus (status);
113 public StringAlignment Alignment {
115 StringAlignment align;
116 Status status = GDIPlus.GdipGetStringFormatAlign (nativeStrFmt, out align);
117 GDIPlus.CheckStatus (status);
123 Status status = GDIPlus.GdipSetStringFormatAlign (nativeStrFmt, value);
124 GDIPlus.CheckStatus (status);
128 public StringAlignment LineAlignment {
130 StringAlignment align;
131 Status status = GDIPlus.GdipGetStringFormatLineAlign (nativeStrFmt, out align);
132 GDIPlus.CheckStatus (status);
138 Status status = GDIPlus.GdipSetStringFormatLineAlign (nativeStrFmt, value);
139 GDIPlus.CheckStatus (status);
143 public StringFormatFlags FormatFlags {
145 StringFormatFlags flags;
146 Status status = GDIPlus.GdipGetStringFormatFlags (nativeStrFmt, out flags);
147 GDIPlus.CheckStatus (status);
153 Status status = GDIPlus.GdipSetStringFormatFlags (nativeStrFmt, value);
154 GDIPlus.CheckStatus (status);
158 public HotkeyPrefix HotkeyPrefix {
160 HotkeyPrefix hotkeyPrefix;
161 Status status = GDIPlus.GdipGetStringFormatHotkeyPrefix (nativeStrFmt, out hotkeyPrefix);
162 GDIPlus.CheckStatus (status);
168 Status status = GDIPlus.GdipSetStringFormatHotkeyPrefix (nativeStrFmt, value);
169 GDIPlus.CheckStatus (status);
174 public StringTrimming Trimming {
176 StringTrimming trimming;
177 Status status = GDIPlus.GdipGetStringFormatTrimming (nativeStrFmt, out trimming);
178 GDIPlus.CheckStatus (status);
183 Status status = GDIPlus.GdipSetStringFormatTrimming (nativeStrFmt, value);
184 GDIPlus.CheckStatus (status);
188 public static StringFormat GenericDefault {
190 lock (typeof (StringFormat))
194 Status status = GDIPlus.GdipStringFormatGetGenericDefault (out ptr);
195 GDIPlus.CheckStatus (status);
197 return new StringFormat (ptr);
203 public int DigitSubstitutionLanguage {
210 public static StringFormat GenericTypographic {
213 lock (typeof (StringFormat))
217 Status status = GDIPlus.GdipStringFormatGetGenericTypographic (out ptr);
218 GDIPlus.CheckStatus (status);
220 return new StringFormat (ptr);
225 public StringDigitSubstitute DigitSubstitutionMethod {
227 StringDigitSubstitute substitute;
229 Status status = GDIPlus.GdipGetStringFormatDigitSubstitution(nativeStrFmt, language, out substitute);
230 GDIPlus.CheckStatus (status);
237 public void SetMeasurableCharacterRanges (CharacterRange [] range)
239 CharRanges=(CharacterRange [])range.Clone();
242 internal CharacterRange [] GetCharRanges
249 public object Clone()
255 Status status = GDIPlus.GdipCloneStringFormat (nativeStrFmt, out native);
256 GDIPlus.CheckStatus (status);
258 return new StringFormat (native);
262 public override string ToString()
264 return "[StringFormat, FormatFlags=" + this.FormatFlags.ToString() + "]";
267 internal IntPtr NativeObject
273 nativeStrFmt = value;
277 public void SetTabStops(float firstTabOffset, float[] tabStops)
279 Status status = GDIPlus.GdipSetStringFormatTabStops(nativeStrFmt, firstTabOffset, tabStops.Length, tabStops);
280 GDIPlus.CheckStatus (status);
283 public void SetDigitSubstitution(int language, StringDigitSubstitute substitute)
285 Status status = GDIPlus.GdipSetStringFormatDigitSubstitution(nativeStrFmt, this.language, substitute);
286 GDIPlus.CheckStatus (status);
289 public float[] GetTabStops(out float firstTabOffset)
294 Status status = GDIPlus.GdipGetStringFormatTabStopCount(nativeStrFmt, out count);
295 GDIPlus.CheckStatus (status);
297 float[] tabStops = new float[count];
300 status = GDIPlus.GdipGetStringFormatTabStops(nativeStrFmt, count, out firstTabOffset, tabStops);
301 GDIPlus.CheckStatus (status);