// Jordi Mas i Hernandez (jordi@ximian.com)
//
// Copyright (C) 2002 Ximian, Inc (http://www.ximian.com)
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004,2006 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-using System;
+
+using System.ComponentModel;
using System.Drawing.Text;
-namespace System.Drawing
-{
- /// <summary>
- /// Summary description for StringFormat.
- /// </summary>
+namespace System.Drawing {
+
public sealed class StringFormat : MarshalByRefObject, IDisposable, ICloneable
{
- private static StringFormat genericDefault;
+// private static StringFormat genericDefault;
private IntPtr nativeStrFmt = IntPtr.Zero;
private int language = GDIPlus.LANG_NEUTRAL;
- internal CharacterRange [] CharRanges;
-
+
public StringFormat() : this (0, GDIPlus.LANG_NEUTRAL)
{
-
}
- public StringFormat(StringFormatFlags options, int lang)
+ public StringFormat(StringFormatFlags options, int language)
{
- lock (this)
- {
- Status status = GDIPlus.GdipCreateStringFormat (options, lang, out nativeStrFmt);
- GDIPlus.CheckStatus (status);
-
- LineAlignment = StringAlignment.Near;
- Alignment = StringAlignment.Near;
- language = lang;
- }
+ Status status = GDIPlus.GdipCreateStringFormat (options, language, out nativeStrFmt);
+ GDIPlus.CheckStatus (status);
}
internal StringFormat(IntPtr native)
nativeStrFmt = native;
}
- ~StringFormat()
+ ~StringFormat ()
{
- Dispose ();
+ Dispose (false);
}
- public void Dispose()
+ public void Dispose ()
{
Dispose (true);
System.GC.SuppressFinalize (this);
void Dispose (bool disposing)
{
- if (disposing) {
- lock (this)
- {
- Status status = GDIPlus.GdipDeleteStringFormat (nativeStrFmt);
- GDIPlus.CheckStatus (status);
- }
+ if (nativeStrFmt != IntPtr.Zero) {
+ Status status = GDIPlus.GdipDeleteStringFormat (nativeStrFmt);
+ nativeStrFmt = IntPtr.Zero;
+ GDIPlus.CheckStatus (status);
}
}
- public StringFormat (StringFormat source)
- {
- lock (this)
- {
- Status status = GDIPlus.GdipCloneStringFormat (source.NativeObject, out nativeStrFmt);
- GDIPlus.CheckStatus (status);
- }
+ public StringFormat (StringFormat format)
+ {
+ if (format == null)
+ throw new ArgumentNullException ("format");
+
+ Status status = GDIPlus.GdipCloneStringFormat (format.NativeObject, out nativeStrFmt);
+ GDIPlus.CheckStatus (status);
}
- public StringFormat (StringFormatFlags flags)
+ public StringFormat (StringFormatFlags options)
{
- lock (this)
- {
- Status status = GDIPlus.GdipCreateStringFormat (flags, GDIPlus.LANG_NEUTRAL, out nativeStrFmt);
- GDIPlus.CheckStatus (status);
- }
+ Status status = GDIPlus.GdipCreateStringFormat (options, GDIPlus.LANG_NEUTRAL, out nativeStrFmt);
+ GDIPlus.CheckStatus (status);
}
public StringAlignment Alignment {
return align;
}
- set {
+ set {
+ if ((value < StringAlignment.Near) || (value > StringAlignment.Far))
+ throw new InvalidEnumArgumentException ("Alignment");
+
Status status = GDIPlus.GdipSetStringFormatAlign (nativeStrFmt, value);
GDIPlus.CheckStatus (status);
}
return align;
}
- set {
+ set {
+ if ((value < StringAlignment.Near) || (value > StringAlignment.Far))
+ throw new InvalidEnumArgumentException ("Alignment");
+
Status status = GDIPlus.GdipSetStringFormatLineAlign (nativeStrFmt, value);
GDIPlus.CheckStatus (status);
}
}
set {
+ if ((value < HotkeyPrefix.None) || (value > HotkeyPrefix.Hide))
+ throw new InvalidEnumArgumentException ("HotkeyPrefix");
+
Status status = GDIPlus.GdipSetStringFormatHotkeyPrefix (nativeStrFmt, value);
GDIPlus.CheckStatus (status);
}
}
set {
+ if ((value < StringTrimming.None) || (value > StringTrimming.EllipsisPath))
+ throw new InvalidEnumArgumentException ("Trimming");
+
Status status = GDIPlus.GdipSetStringFormatTrimming (nativeStrFmt, value);
GDIPlus.CheckStatus (status);
}
public static StringFormat GenericDefault {
get {
- lock (typeof (StringFormat))
- {
- IntPtr ptr;
+ IntPtr ptr;
- Status status = GDIPlus.GdipStringFormatGetGenericDefault (out ptr);
- GDIPlus.CheckStatus (status);
+ Status status = GDIPlus.GdipStringFormatGetGenericDefault (out ptr);
+ GDIPlus.CheckStatus (status);
- return new StringFormat (ptr);
- }
+ return new StringFormat (ptr);
}
}
public static StringFormat GenericTypographic {
get {
-
- lock (typeof (StringFormat))
- {
- IntPtr ptr;
+ IntPtr ptr;
- Status status = GDIPlus.GdipStringFormatGetGenericTypographic (out ptr);
- GDIPlus.CheckStatus (status);
+ Status status = GDIPlus.GdipStringFormatGetGenericTypographic (out ptr);
+ GDIPlus.CheckStatus (status);
- return new StringFormat (ptr);
- }
+ return new StringFormat (ptr);
}
}
}
- public void SetMeasurableCharacterRanges (CharacterRange [] range)
- {
- CharRanges=(CharacterRange [])range.Clone();
+ public void SetMeasurableCharacterRanges (CharacterRange [] ranges)
+ {
+ Status status = GDIPlus.GdipSetStringFormatMeasurableCharacterRanges (nativeStrFmt,
+ ranges.Length, ranges);
+
+ GDIPlus.CheckStatus (status);
}
-
- internal CharacterRange [] GetCharRanges
+
+ internal int GetMeasurableCharacterRangeCount ()
{
- get {
- return(CharRanges);
- }
- }
-
+ int cnt;
+ Status status = GDIPlus.GdipGetStringFormatMeasurableCharacterRangeCount (nativeStrFmt, out cnt);
+
+ GDIPlus.CheckStatus (status);
+ return cnt;
+ }
+
public object Clone()
{
- lock (this)
- {
- IntPtr native;
+ IntPtr native;
- Status status = GDIPlus.GdipCloneStringFormat (nativeStrFmt, out native);
- GDIPlus.CheckStatus (status);
+ Status status = GDIPlus.GdipCloneStringFormat (nativeStrFmt, out native);
+ GDIPlus.CheckStatus (status);
- return new StringFormat (native);
- }
+ return new StringFormat (native);
}
public override string ToString()