[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Dotgnu-pnet-commits] CVS: pnetlib/Xsharp Color.cs,1.1,1.2 Font.cs,1.2,1
From: |
Rhys Weatherley <address@hidden> |
Subject: |
[Dotgnu-pnet-commits] CVS: pnetlib/Xsharp Color.cs,1.1,1.2 Font.cs,1.2,1.3 Graphics.cs,1.7,1.8 Xlib.cs.in,1.11,1.12 XsharpSupport.c,1.6,1.7 |
Date: |
Mon, 07 Jul 2003 22:09:08 -0400 |
Update of /cvsroot/dotgnu-pnet/pnetlib/Xsharp
In directory subversions:/tmp/cvs-serv801/Xsharp
Modified Files:
Color.cs Font.cs Graphics.cs Xlib.cs.in XsharpSupport.c
Log Message:
Add preliminary support for the Xft extension - currently commented
out because it doesn't work yet.
Index: Color.cs
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/Xsharp/Color.cs,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** Color.cs 28 May 2003 04:17:53 -0000 1.1
--- Color.cs 8 Jul 2003 02:09:06 -0000 1.2
***************
*** 43,47 ****
{
// Internal state.
! private uint value;
/// <summary>
--- 43,47 ----
{
// Internal state.
! internal uint value;
/// <summary>
Index: Font.cs
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/Xsharp/Font.cs,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** Font.cs 7 Jun 2003 07:40:16 -0000 1.2
--- Font.cs 8 Jul 2003 02:09:06 -0000 1.3
***************
*** 359,363 ****
infoList = info.next;
}
! Xlib.XFreeFontSet(dpy.dpy,
info.fontSet);
}
}
--- 359,363 ----
infoList = info.next;
}
! Xlib.XSharpFreeFont(dpy.dpy,
info.fontSet);
}
}
Index: Graphics.cs
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/Xsharp/Graphics.cs,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** Graphics.cs 20 Jun 2003 23:28:28 -0000 1.7
--- Graphics.cs 8 Jul 2003 02:09:06 -0000 1.8
***************
*** 2216,2220 ****
Xlib.XSharpDrawString
(display,
drawableHandle, gc,
! fontSet, x, y, str,
(int)(font.Style));
}
finally
--- 2216,2221 ----
Xlib.XSharpDrawString
(display,
drawableHandle, gc,
! fontSet, x, y, str,
(int)(font.Style),
! IntPtr.Zero,
foreground.value);
}
finally
***************
*** 2311,2316 ****
XRectangle overall_ink;
XRectangle overall_logical;
! Xlib.XSharpTextExtents
! (fontSet, str, out overall_ink, out
overall_logical);
width = overall_logical.width;
ascent = -(overall_logical.y);
--- 2312,2326 ----
XRectangle overall_ink;
XRectangle overall_logical;
! try
! {
! IntPtr display = dpy.Lock();
! Xlib.XSharpTextExtents
! (display, fontSet, str,
! out overall_ink, out
overall_logical);
! }
! finally
! {
! dpy.Unlock();
! }
width = overall_logical.width;
ascent = -(overall_logical.y);
Index: Xlib.cs.in
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/Xsharp/Xlib.cs.in,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -r1.11 -r1.12
*** Xlib.cs.in 24 Jun 2003 02:18:56 -0000 1.11
--- Xlib.cs.in 8 Jul 2003 02:09:06 -0000 1.12
***************
*** 492,500 ****
(IntPtr display, String name, Bool only_if_exists);
- // Declare font-related external functions.
-
- [DllImport("X11")]
- extern public static void XFreeFontSet(IntPtr display, IntPtr fontSet);
-
// Declare property-related external functions.
--- 492,495 ----
***************
*** 526,537 ****
[DllImport("XsharpSupport")]
extern public static void XSharpDrawString
(IntPtr display, Drawable drawable, IntPtr gc,
IntPtr fontSet, @X_int@ x, @X_int@ y,
! String str, @X_int@ style);
[DllImport("XsharpSupport")]
extern public static void XSharpTextExtents
! (IntPtr fontSet, String str,
out XRectangle overall_ink_return,
out XRectangle overall_logical_return);
--- 521,536 ----
[DllImport("XsharpSupport")]
+ extern public static void XSharpFreeFont(IntPtr display, IntPtr
fontSet);
+
+ [DllImport("XsharpSupport")]
extern public static void XSharpDrawString
(IntPtr display, Drawable drawable, IntPtr gc,
IntPtr fontSet, @X_int@ x, @X_int@ y,
! String str, @X_int@ style, IntPtr clipRegion,
! @X_ulong@ colorValue);
[DllImport("XsharpSupport")]
extern public static void XSharpTextExtents
! (IntPtr display, IntPtr fontSet, String str,
out XRectangle overall_ink_return,
out XRectangle overall_logical_return);
Index: XsharpSupport.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/Xsharp/XsharpSupport.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** XsharpSupport.c 24 Jun 2003 18:30:44 -0000 1.6
--- XsharpSupport.c 8 Jul 2003 02:09:06 -0000 1.7
***************
*** 21,29 ****
--- 21,36 ----
#if !defined(X_DISPLAY_MISSING) && HAVE_SELECT
+ /* XFT support doesn't work yet */
+ /*#define USE_XFT_EXTENSION 1*/
+
#include <X11/Xlib.h>
+ #include <X11/Xutil.h>
#include <X11/Xatom.h>
#ifdef WIN32
#include <X11/Xwinsock.h>
#endif
+ #ifdef USE_XFT_EXTENSION
+ #include <X11/Xft/Xft.h>
+ #endif
#if TIME_WITH_SYS_TIME
#include <sys/time.h>
***************
*** 91,94 ****
--- 98,103 ----
#define FontStyle_StrikeOut 8
+ #ifndef USE_XFT_EXTENSION
+
/*
* Try to create a font with specific parameters.
***************
*** 160,169 ****
}
/*
* Create a font from a description.
*/
! XFontSet XSharpCreateFont(Display *dpy, const char *family,
! int pointSize, int style)
{
XFontSet fontSet;
--- 169,237 ----
}
+ #endif /* USE_XFT_EXTENSION */
+
/*
* Create a font from a description.
*/
! void *XSharpCreateFont(Display *dpy, const char *family,
! int pointSize, int style)
{
+ #ifdef USE_XFT_EXTENSION
+
+ XftPattern *pattern;
+ XftPattern *matched;
+ XftFont *font;
+ XftResult result;
+
+ /* Create the font pattern to be used */
+ pattern = XftPatternCreate();
+ if(!pattern)
+ {
+ return 0;
+ }
+ if(!XftPatternAddString(pattern, XFT_FAMILY, family))
+ {
+ XftPatternDestroy(pattern);
+ return 0;
+ }
+ if(!XftPatternAddDouble(pattern, XFT_SIZE, ((double)pointSize) / 10.0))
+ {
+ XftPatternDestroy(pattern);
+ return 0;
+ }
+ if((style & FontStyle_Bold) != 0)
+ {
+ if(!XftPatternAddInteger(pattern, XFT_WEIGHT, XFT_WEIGHT_BOLD))
+ {
+ XftPatternDestroy(pattern);
+ return 0;
+ }
+ }
+ if((style & FontStyle_Italic) != 0)
+ {
+ if(!XftPatternAddInteger(pattern, XFT_SLANT, XFT_SLANT_ITALIC))
+ {
+ XftPatternDestroy(pattern);
+ return 0;
+ }
+ }
+
+ /* Perform font matching to find the closest possible font */
+ matched = XftFontMatch(dpy, DefaultScreen(dpy), pattern, &result);
+ XftPatternDestroy(pattern);
+ if(!matched)
+ {
+ return 0;
+ }
+
+ /* Create an Xft font based on the matched pattern */
+ font = XftFontOpenPattern(dpy, matched);
+ XftPatternDestroy(matched);
+
+ /* Return the font to the caller */
+ return font;
+
+ #else /* !USE_XFT_EXTENSION */
+
XFontSet fontSet;
***************
*** 198,219 ****
/* Remove everything - this will succeed unless X has no fonts at all!
*/
return TryCreateFont(dpy, 0, -1, FontStyle_Normal);
}
/*
* Draw a string using a font set.
*/
void XSharpDrawString(Display *dpy, Drawable drawable, GC gc,
! XFontSet fontSet, int x, int y,
! const char *str, int style)
{
XRectangle overall_ink_return;
XRectangle overall_logical_return;
XFontSetExtents *extents;
int line1, line2;
! /* Draw the string itself */
! XmbDrawString(dpy, drawable, fontSet, gc, x, y,
str, strlen(str));
/* Calculate the positions of the underline and strike-out */
if((style & FontStyle_Underline) != 0)
--- 266,346 ----
/* Remove everything - this will succeed unless X has no fonts at all!
*/
return TryCreateFont(dpy, 0, -1, FontStyle_Normal);
+
+ #endif
}
/*
+ * Free a font set.
+ */
+ void XSharpFreeFont(Display *dpy, void *fontSet)
+ {
+ #ifdef USE_XFT_EXTENSION
+ XftFontClose(dpy, (XftFont *)fontSet);
+ #else
+ XFreeFontSet(dpy, (XFontSet)fontSet);
+ #endif
+ }
+
+ /*
+ * Forward declaration.
+ */
+ void XSharpTextExtents(Display *dpy, void *fontSet, const char *str,
+ XRectangle *overall_ink_return,
+ XRectangle *overall_logical_return);
+
+ /*
* Draw a string using a font set.
*/
void XSharpDrawString(Display *dpy, Drawable drawable, GC gc,
! void *fontSet, int x, int y,
! const char *str, int style, Region
clipRegion,
! unsigned long colorValue)
{
XRectangle overall_ink_return;
XRectangle overall_logical_return;
+ #ifdef USE_XFT_EXTENSION
+ XftDraw *draw;
+ XftColor color;
+ XGCValues values;
+ #else
XFontSetExtents *extents;
+ #endif
int line1, line2;
! #ifdef USE_XFT_EXTENSION
!
! /* TODO: 16-bit fonts */
!
! /* Set up the Xft color value to draw with */
! XGetGCValues(dpy, gc, GCForeground, &values);
! color.pixel = values.foreground;
! color.color.red = (unsigned short)(((colorValue >> 16) & 0xFF) << 8);
! color.color.green = (unsigned short)(((colorValue >> 8) & 0xFF) << 8);
! color.color.blue = (unsigned short)((colorValue & 0xFF) << 8);
! color.color.alpha = (unsigned short)0xFFFF;
!
! /* Draw the string */
! draw = XftDrawCreate(dpy, drawable,
! DefaultVisual(dpy,
DefaultScreen(dpy)),
! DefaultColormap(dpy,
DefaultScreen(dpy)));
! if(draw)
! {
! if(clipRegion)
! {
! XftDrawSetClip(draw, clipRegion);
! }
! XftDrawString8(draw, &color, (XftFont *)fontSet,
! x, y, (XftChar8 *)str, strlen(str));
! XftDrawDestroy(draw);
! }
!
! #else
!
! /* Draw the string using the core API */
! XmbDrawString(dpy, drawable, (XFontSet)fontSet, gc, x, y,
str, strlen(str));
+ #endif
+
/* Calculate the positions of the underline and strike-out */
if((style & FontStyle_Underline) != 0)
***************
*** 227,230 ****
--- 354,360 ----
if((style & FontStyle_StrikeOut) != 0)
{
+ #ifdef USE_XFT_EXTENSION
+ line2 = y + (((XftFont *)fontSet)->height / 2);
+ #else
extents = XExtentsOfFontSet(fontSet);
if(extents)
***************
*** 236,239 ****
--- 366,370 ----
line2 = y;
}
+ #endif
}
else
***************
*** 245,250 ****
if(line1 != y || line2 != y)
{
! XmbTextExtents(fontSet, str, strlen(str),
! &overall_ink_return,
&overall_logical_return);
XSetLineAttributes(dpy, gc, 1, LineSolid, CapNotLast,
JoinMiter);
if(line1 != y)
--- 376,381 ----
if(line1 != y || line2 != y)
{
! XSharpTextExtents(dpy, fontSet, str,
! &overall_ink_return,
&overall_logical_return);
XSetLineAttributes(dpy, gc, 1, LineSolid, CapNotLast,
JoinMiter);
if(line1 != y)
***************
*** 264,273 ****
* Calculate the extent information for a string.
*/
! void XSharpTextExtents(XFontSet fontSet, const char *str,
XRectangle *overall_ink_return,
XRectangle *overall_logical_return)
{
! XmbTextExtents(fontSet, str, strlen(str),
overall_ink_return, overall_logical_return);
}
--- 395,423 ----
* Calculate the extent information for a string.
*/
! void XSharpTextExtents(Display *dpy, void *fontSet, const char *str,
XRectangle *overall_ink_return,
XRectangle *overall_logical_return)
{
! #ifdef USE_XFT_EXTENSION
!
! /* TODO: 16-bit fonts */
!
! XGlyphInfo extents;
! XftTextExtents8(dpy, fontSet, (XftChar8 *)str, strlen(str), &extents);
!
! overall_ink_return->x = -(extents.x);
! overall_ink_return->y = -(extents.y);
! overall_ink_return->width = extents.width;
! overall_ink_return->height = extents.height;
!
! overall_logical_return->x = -(extents.x);
! overall_logical_return->y = -(extents.y);
! overall_logical_return->width = extents.x + extents.xOff;
! overall_logical_return->height = extents.y + extents.yOff;
!
! #else
! XmbTextExtents((XFontSet)fontSet, str, strlen(str),
overall_ink_return, overall_logical_return);
+ #endif
}
***************
*** 275,284 ****
* Calculate the extent information for a font.
*/
! void XSharpFontExtents(XFontSet fontSet,
XRectangle *max_ink_return,
XRectangle *max_logical_return)
{
XFontSetExtents *extents;
! extents = XExtentsOfFontSet(fontSet);
if(extents)
{
--- 425,446 ----
* Calculate the extent information for a font.
*/
! void XSharpFontExtents(void *fontSet,
XRectangle *max_ink_return,
XRectangle *max_logical_return)
{
+ #ifdef USE_XFT_EXTENSION
+
+ /* Synthesize enough information to keep "Xsharp.FontExtents" happy */
+ max_logical_return->x = 0;
+ max_logical_return->y = -(((XftFont *)fontSet)->ascent);
+ max_logical_return->width = ((XftFont *)fontSet)->max_advance_width;
+ max_logical_return->height = ((XftFont *)fontSet)->ascent +
+ ((XftFont
*)fontSet)->descent;
+ *max_ink_return = *max_logical_return;
+
+ #else
+
XFontSetExtents *extents;
! extents = XExtentsOfFontSet((XFontSet)fontSet);
if(extents)
{
***************
*** 286,289 ****
--- 448,453 ----
*max_logical_return = extents->max_logical_extent;
}
+
+ #endif
}
***************
*** 351,362 ****
}
void XSharpDrawString(void *dpy, unsigned long drawable, void *gc,
void *fontSet, int x, int y,
! const char *str, int style)
{
/* Nothing to do here */
}
! void XSharpTextExtents(void *fontSet, const char *str,
void *overall_ink_return,
void *overall_logical_return)
--- 515,532 ----
}
+ void XSharpFreeFont(void *dpy, void *fontSet)
+ {
+ /* Nothing to do here */
+ }
+
void XSharpDrawString(void *dpy, unsigned long drawable, void *gc,
void *fontSet, int x, int y,
! const char *str, int style, void
*clipRegion,
! unsigned long colorValue)
{
/* Nothing to do here */
}
! void XSharpTextExtents(void *dpy, void *fontSet, const char *str,
void *overall_ink_return,
void *overall_logical_return)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] CVS: pnetlib/Xsharp Color.cs,1.1,1.2 Font.cs,1.2,1.3 Graphics.cs,1.7,1.8 Xlib.cs.in,1.11,1.12 XsharpSupport.c,1.6,1.7,
Rhys Weatherley <address@hidden> <=