- Added and implemented GetFontMetrics() method
authorPeter Dennis Bartok <pbartok@mono-cvs.ximian.com>
Fri, 17 Dec 2004 05:50:21 +0000 (05:50 -0000)
committerPeter Dennis Bartok <pbartok@mono-cvs.ximian.com>
Fri, 17 Dec 2004 05:50:21 +0000 (05:50 -0000)
svn path=/trunk/mcs/; revision=37865

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUI.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUIDriver.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUIOSX.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUIWin32.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUIX11.cs

index 33aad17de776bc8113871bd61e45200608c44f0a..4b46e2c1ea0ddeb6ebb117d93a8fef8af4e35c85 100644 (file)
@@ -1,3 +1,12 @@
+2004-12-16  Peter Bartok  <pbartok@novell.com>
+
+       * XplatUI.cs: Added GetFontMetrics() method
+       * XplatUIDriver.cs: Added GetFontMetrics() abstract
+       * XplatUIX11.cs: Implemented GetFontMetrics() method, now calls
+         into libgdiplus, our private GetFontMetrics function
+       * XplatUIOSX.cs: Implemented GetFontMetrics() method, same as X11
+       * XplatUIWin32.cs: Implemented GetFontMetrics() method
+
 2004-12-16  Jackson Harper  <jackson@ximain.com>
 
        * XplatUIStruct.cs: Add enum for dead keys
index 7fab83f77375fe62805b671798c8258b41f6b897..1a3d0649aafd9956e3876e9dd77bb084e0ff8f7e 100644 (file)
@@ -401,6 +401,10 @@ namespace System.Windows.Forms {
                        driver.CaretVisible(hwnd, visible);
                }
 
+               internal static bool GetFontMetrics(Graphics g, Font font, out int ascent, out int descent) {
+                       return driver.GetFontMetrics(g, font, out ascent, out descent);
+               }
+                       
                internal static void SetTimer (Timer timer)
                {
                        driver.SetTimer (timer);
index 07f63f7d930824c5a067e6d67608a3a115b43956..f7c3b0587220f347f0bc4d11465c4de641978059 100644 (file)
@@ -233,6 +233,8 @@ namespace System.Windows.Forms {
                internal abstract void SetCaretPos(IntPtr hwnd, int x, int y);
                internal abstract void CaretVisible(IntPtr hwnd, bool visible);
 
+               internal abstract bool GetFontMetrics(Graphics g, Font font, out int ascent, out int descent);
+
                // System information
 
                internal abstract int KeyboardSpeed { get; } 
index c7729d2452d0de2b6c2108856d15ad25f24350d0..09c6e3532198550828a0014d9d51d91a39d596eb 100644 (file)
@@ -794,6 +794,9 @@ namespace System.Windows.Forms {
                internal override void CaretVisible(IntPtr hwnd, bool visible) {
                }
 
+               internal override bool GetFontMetrics(Graphics g, Font font, out int ascent, out int descent) {\r
+                       return GetFontMetrics(g.GetHdc(), font.ToHfont(), out ascent, out descent);\r
+               }\r
 
                [MonoTODO]
                internal override int KeyboardSpeed {
@@ -919,6 +922,9 @@ namespace System.Windows.Forms {
 
                [DllImport ("/System/Library/Frameworks/Carbon.framework/Versions/Current/Carbon")]
                static extern int SetWindowContentColor (IntPtr hWnd, ref RGBColor backColor);
+
+               [DllImport ("gdiplus", EntryPoint="GetFontMetrics")]
+               internal extern static bool GetFontMetrics(IntPtr graphicsObject, IntPtr nativeObject, out int ascent, out int descent);
        }
 
        internal struct CGSize {
index 75cdd1bafa97ddb0ef0637d7d150ee8e0c23573d..f44dc26c15cf1920aa95feb3b10c68a5da23750a 100644 (file)
@@ -447,6 +447,31 @@ namespace System.Windows.Forms {
                        internal COLORREF               lbColor;\r
                        internal LogBrushHatch          lbHatch;\r
                }\r
+
+               [StructLayout(LayoutKind.Sequential)]\r
+               internal struct TEXTMETRIC { \r
+                       internal int                    tmHeight;\r
+                       internal int                    tmAscent;\r
+                       internal int                    tmDescent;\r
+                       internal int                    tmInternalLeading;\r
+                       internal int                    tmExternalLeading;\r
+                       internal int                    tmAveCharWidth;\r
+                       internal int                    tmMaxCharWidth;\r
+                       internal int                    tmWeight;\r
+                       internal int                    tmOverhang;\r
+                       internal int                    tmDigitizedAspectX;\r
+                       internal int                    tmDigitizedAspectY;\r
+                       internal byte                   tmFirstChar; \r
+                       internal byte                   tmLastChar; \r
+                       internal byte                   tmDefaultChar; \r
+                       internal byte                   tmBreakChar; \r
+                       internal byte                   tmItalic; \r
+                       internal byte                   tmUnderlined; \r
+                       internal byte                   tmStruckOut; \r
+                       internal byte                   tmPitchAndFamily; \r
+                       internal byte                   tmCharSet; \r
+               } \r
+
                #endregion
 
                #region Constructor & Destructor
@@ -1114,6 +1139,28 @@ namespace System.Windows.Forms {
                        }
                }
 
+               internal override bool GetFontMetrics(Graphics g, Font font, out int ascent, out int descent) {
+                       IntPtr          dc;
+                       TEXTMETRIC      tm;
+
+                       tm = new TEXTMETRIC();
+
+                       dc = Win32GetDC(IntPtr.Zero);
+                       Win32SelectObject(dc, font.ToHfont());
+                       if (Win32GetTextMetrics(dc, ref tm) == false) {
+                               Win32ReleaseDC(IntPtr.Zero, dc);
+                               ascent = 0;
+                               descent = 0;
+                               return false;
+                       }
+                       Win32ReleaseDC(IntPtr.Zero, dc);
+
+                       ascent = tm.tmAscent;
+                       descent = tm.tmDescent;
+
+                       return true;
+               }
+
                internal override int KeyboardSpeed {
                        get {
                                Console.WriteLine ("KeyboardSpeed: need to query Windows");
@@ -1325,6 +1372,12 @@ namespace System.Windows.Forms {
 
                [DllImport ("user32.dll", EntryPoint="GetCaretBlinkTime", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.StdCall)]
                internal extern static uint Win32GetCaretBlinkTime();
+\r
+               [DllImport ("gdi32.dll", EntryPoint="GetTextMetricsA", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.StdCall)]
+               internal extern static bool Win32GetTextMetrics(IntPtr hdc, ref TEXTMETRIC tm);
+\r
+               [DllImport ("gdi32.dll", EntryPoint="SelectObject", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.StdCall)]
+               internal extern static bool Win32SelectObject(IntPtr hdc, IntPtr hgdiobject);
                #endregion\r
        }
 }
index 7953cbcfc5678259cc9bb5f96a36fcc29b89bff6..fb2eee9a58391f2ab15c5c3bf0c4d47db3f3d47b 100644 (file)
@@ -85,9 +85,7 @@ namespace System.Windows.Forms {
                private static int              atom;                   // X Atom
                private static int              net_wm_state;           // X Atom
                private static int              async_method;
-
                private static int              post_message;
-
                private static uint             default_colormap;       // X Colormap ID
                internal static Keys            key_state;
                internal static MouseButtons    mouse_state;
@@ -1611,6 +1609,11 @@ namespace System.Windows.Forms {
                        }
                }
 
+               internal override bool GetFontMetrics(Graphics g, Font font, out int ascent, out int descent) {\r
+                       return GetFontMetrics(g.GetHdc(), font.ToHfont(), out ascent, out descent);\r
+               }\r
+
+
                // Santa's little helper
                static void Where() 
                {
@@ -1809,6 +1812,9 @@ namespace System.Windows.Forms {
                [DllImport ("libX11", EntryPoint="XGetKeyboardControl")]
                internal extern static int XGetKeyboardControl (IntPtr display, out XKeyBoardState state);
 
+               [DllImport ("gdiplus", EntryPoint="GetFontMetrics")]
+               internal extern static bool GetFontMetrics(IntPtr graphicsObject, IntPtr nativeObject, out int ascent, out int descent);
+
                // Drawing
                [DllImport ("libX11", EntryPoint="XCreateGC")]
                internal extern static IntPtr XCreateGC(IntPtr display, IntPtr window, GCFunction valuemask, ref XGCValues values);