+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
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);
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; }
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 {
[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 {
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
}
}
+ 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");
[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
}
}
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;
}
}
+ 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()
{
[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);