Intermediate commit.
This commit is contained in:
@ -30,7 +30,7 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "gdkfont.h"
|
#include "gdkfont.h"
|
||||||
#include "gdkx.h"
|
#include "gdkwin32.h"
|
||||||
|
|
||||||
static GHashTable *font_name_hash = NULL;
|
static GHashTable *font_name_hash = NULL;
|
||||||
static GHashTable *fontset_name_hash = NULL;
|
static GHashTable *fontset_name_hash = NULL;
|
||||||
@ -40,7 +40,7 @@ gdk_font_hash_insert (GdkFontType type,
|
|||||||
GdkFont *font,
|
GdkFont *font,
|
||||||
const gchar *font_name)
|
const gchar *font_name)
|
||||||
{
|
{
|
||||||
GdkFontPrivate *private = (GdkFontPrivate *) font;
|
GdkFontPrivateWin32 *private = (GdkFontPrivateWin32 *) font;
|
||||||
GHashTable **hashp = (type == GDK_FONT_FONT) ?
|
GHashTable **hashp = (type == GDK_FONT_FONT) ?
|
||||||
&font_name_hash : &fontset_name_hash;
|
&font_name_hash : &fontset_name_hash;
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ static void
|
|||||||
gdk_font_hash_remove (GdkFontType type,
|
gdk_font_hash_remove (GdkFontType type,
|
||||||
GdkFont *font)
|
GdkFont *font)
|
||||||
{
|
{
|
||||||
GdkFontPrivate *private = (GdkFontPrivate *) font;
|
GdkFontPrivateWin32 *private = (GdkFontPrivateWin32 *) font;
|
||||||
GSList *tmp_list;
|
GSList *tmp_list;
|
||||||
GHashTable *hash = (type == GDK_FONT_FONT) ?
|
GHashTable *hash = (type == GDK_FONT_FONT) ?
|
||||||
font_name_hash : fontset_name_hash;
|
font_name_hash : fontset_name_hash;
|
||||||
@ -254,7 +254,7 @@ logfont_to_xlfd (const LOGFONT *lfp,
|
|||||||
gchar *
|
gchar *
|
||||||
gdk_font_xlfd_create (GdkFont *font)
|
gdk_font_xlfd_create (GdkFont *font)
|
||||||
{
|
{
|
||||||
GdkFontPrivate *private;
|
GdkFontPrivateWin32 *private;
|
||||||
GdkWin32SingleFont *singlefont;
|
GdkWin32SingleFont *singlefont;
|
||||||
GSList *list;
|
GSList *list;
|
||||||
GString *string;
|
GString *string;
|
||||||
@ -263,7 +263,7 @@ gdk_font_xlfd_create (GdkFont *font)
|
|||||||
|
|
||||||
g_return_val_if_fail (font != NULL, NULL);
|
g_return_val_if_fail (font != NULL, NULL);
|
||||||
|
|
||||||
private = (GdkFontPrivate *) font;
|
private = (GdkFontPrivateWin32 *) font;
|
||||||
|
|
||||||
list = private->fonts;
|
list = private->fonts;
|
||||||
string = g_string_new ("");
|
string = g_string_new ("");
|
||||||
@ -351,7 +351,7 @@ pattern_match (const gchar *pattern,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CALLBACK
|
static int CALLBACK
|
||||||
InnerEnumFontFamExProc (const LOGFONT *lfp,
|
InnerEnumFontFamExProc (const LOGFONT *lfp,
|
||||||
const TEXTMETRIC *metrics,
|
const TEXTMETRIC *metrics,
|
||||||
DWORD fontType,
|
DWORD fontType,
|
||||||
@ -388,7 +388,7 @@ InnerEnumFontFamExProc (const LOGFONT *lfp,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CALLBACK
|
static int CALLBACK
|
||||||
EnumFontFamExProc (const LOGFONT *lfp,
|
EnumFontFamExProc (const LOGFONT *lfp,
|
||||||
const TEXTMETRIC *metrics,
|
const TEXTMETRIC *metrics,
|
||||||
DWORD fontType,
|
DWORD fontType,
|
||||||
@ -756,7 +756,7 @@ GdkFont*
|
|||||||
gdk_font_load (const gchar *font_name)
|
gdk_font_load (const gchar *font_name)
|
||||||
{
|
{
|
||||||
GdkFont *font;
|
GdkFont *font;
|
||||||
GdkFontPrivate *private;
|
GdkFontPrivateWin32 *private;
|
||||||
GdkWin32SingleFont *singlefont;
|
GdkWin32SingleFont *singlefont;
|
||||||
HGDIOBJ oldfont;
|
HGDIOBJ oldfont;
|
||||||
HANDLE *f;
|
HANDLE *f;
|
||||||
@ -770,10 +770,10 @@ gdk_font_load (const gchar *font_name)
|
|||||||
|
|
||||||
singlefont = gdk_font_load_internal (font_name);
|
singlefont = gdk_font_load_internal (font_name);
|
||||||
|
|
||||||
private = g_new (GdkFontPrivate, 1);
|
private = g_new (GdkFontPrivateWin32, 1);
|
||||||
font = (GdkFont*) private;
|
font = (GdkFont*) private;
|
||||||
|
|
||||||
private->ref_count = 1;
|
private->base.ref_count = 1;
|
||||||
private->names = NULL;
|
private->names = NULL;
|
||||||
private->fonts = g_slist_append (NULL, singlefont);
|
private->fonts = g_slist_append (NULL, singlefont);
|
||||||
|
|
||||||
@ -805,7 +805,7 @@ GdkFont*
|
|||||||
gdk_fontset_load (gchar *fontset_name)
|
gdk_fontset_load (gchar *fontset_name)
|
||||||
{
|
{
|
||||||
GdkFont *font;
|
GdkFont *font;
|
||||||
GdkFontPrivate *private;
|
GdkFontPrivateWin32 *private;
|
||||||
GdkWin32SingleFont *singlefont;
|
GdkWin32SingleFont *singlefont;
|
||||||
HGDIOBJ oldfont;
|
HGDIOBJ oldfont;
|
||||||
HANDLE *f;
|
HANDLE *f;
|
||||||
@ -826,10 +826,10 @@ gdk_fontset_load (gchar *fontset_name)
|
|||||||
|
|
||||||
g_return_val_if_fail (*s, NULL);
|
g_return_val_if_fail (*s, NULL);
|
||||||
|
|
||||||
private = g_new (GdkFontPrivate, 1);
|
private = g_new (GdkFontPrivateWin32, 1);
|
||||||
font = (GdkFont*) private;
|
font = (GdkFont*) private;
|
||||||
|
|
||||||
private->ref_count = 1;
|
private->base.ref_count = 1;
|
||||||
private->names = NULL;
|
private->names = NULL;
|
||||||
private->fonts = NULL;
|
private->fonts = NULL;
|
||||||
|
|
||||||
@ -883,81 +883,51 @@ gdk_fontset_load (gchar *fontset_name)
|
|||||||
return font;
|
return font;
|
||||||
}
|
}
|
||||||
|
|
||||||
GdkFont*
|
|
||||||
gdk_font_ref (GdkFont *font)
|
|
||||||
{
|
|
||||||
GdkFontPrivate *private;
|
|
||||||
|
|
||||||
g_return_val_if_fail (font != NULL, NULL);
|
|
||||||
|
|
||||||
private = (GdkFontPrivate*) font;
|
|
||||||
private->ref_count += 1;
|
|
||||||
|
|
||||||
GDK_NOTE (MISC,
|
|
||||||
g_print ("gdk_font_ref %#x %d\n",
|
|
||||||
((GdkWin32SingleFont *) private->fonts->data)->xfont,
|
|
||||||
private->ref_count));
|
|
||||||
return font;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gdk_font_unref (GdkFont *font)
|
_gdk_font_destroy (GdkFont *font)
|
||||||
{
|
{
|
||||||
GdkFontPrivate *private;
|
GdkFontPrivateWin32 *private = (GdkFontPrivateWin32 *) font;
|
||||||
GdkWin32SingleFont *singlefont;
|
GdkWin32SingleFont *singlefont;
|
||||||
GSList *list;
|
GSList *list;
|
||||||
private = (GdkFontPrivate*) font;
|
|
||||||
|
|
||||||
g_return_if_fail (font != NULL);
|
|
||||||
g_return_if_fail (private->ref_count > 0);
|
|
||||||
|
|
||||||
private->ref_count -= 1;
|
|
||||||
|
|
||||||
singlefont = (GdkWin32SingleFont *) private->fonts->data;
|
singlefont = (GdkWin32SingleFont *) private->fonts->data;
|
||||||
GDK_NOTE (MISC, g_print ("gdk_font_unref %#x %d%s\n",
|
GDK_NOTE (MISC, g_print ("_gdk_font_destroy %#x\n",
|
||||||
singlefont->xfont, private->ref_count,
|
singlefont->xfont));
|
||||||
(private->ref_count == 0 ? " freeing" : "")));
|
|
||||||
|
|
||||||
if (private->ref_count == 0)
|
gdk_font_hash_remove (font->type, font);
|
||||||
|
|
||||||
|
switch (font->type)
|
||||||
{
|
{
|
||||||
gdk_font_hash_remove (font->type, font);
|
case GDK_FONT_FONT:
|
||||||
|
DeleteObject (singlefont->xfont);
|
||||||
|
break;
|
||||||
|
|
||||||
switch (font->type)
|
case GDK_FONT_FONTSET:
|
||||||
|
list = private->fonts;
|
||||||
|
while (list)
|
||||||
{
|
{
|
||||||
case GDK_FONT_FONT:
|
singlefont = (GdkWin32SingleFont *) list->data;
|
||||||
DeleteObject (singlefont->xfont);
|
DeleteObject (singlefont->xfont);
|
||||||
break;
|
|
||||||
|
list = list->next;
|
||||||
case GDK_FONT_FONTSET:
|
|
||||||
list = private->fonts;
|
|
||||||
while (list)
|
|
||||||
{
|
|
||||||
singlefont = (GdkWin32SingleFont *) list->data;
|
|
||||||
DeleteObject (singlefont->xfont);
|
|
||||||
|
|
||||||
list = list->next;
|
|
||||||
}
|
|
||||||
g_slist_free (private->fonts);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
g_assert_not_reached ();
|
|
||||||
}
|
}
|
||||||
g_free (font);
|
g_slist_free (private->fonts);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
g_free (font);
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
gdk_font_id (const GdkFont *font)
|
gdk_font_id (const GdkFont *font)
|
||||||
{
|
{
|
||||||
const GdkFontPrivate *font_private;
|
const GdkFontPrivateWin32 *private;
|
||||||
|
|
||||||
g_return_val_if_fail (font != NULL, 0);
|
g_return_val_if_fail (font != NULL, 0);
|
||||||
|
|
||||||
font_private = (const GdkFontPrivate*) font;
|
private = (const GdkFontPrivateWin32 *) font;
|
||||||
|
|
||||||
if (font->type == GDK_FONT_FONT)
|
if (font->type == GDK_FONT_FONT)
|
||||||
return (gint) ((GdkWin32SingleFont *) font_private->fonts->data)->xfont;
|
return (gint) ((GdkWin32SingleFont *) private->fonts->data)->xfont;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -966,14 +936,14 @@ gint
|
|||||||
gdk_font_equal (const GdkFont *fonta,
|
gdk_font_equal (const GdkFont *fonta,
|
||||||
const GdkFont *fontb)
|
const GdkFont *fontb)
|
||||||
{
|
{
|
||||||
const GdkFontPrivate *privatea;
|
const GdkFontPrivateWin32 *privatea;
|
||||||
const GdkFontPrivate *privateb;
|
const GdkFontPrivateWin32 *privateb;
|
||||||
|
|
||||||
g_return_val_if_fail (fonta != NULL, FALSE);
|
g_return_val_if_fail (fonta != NULL, FALSE);
|
||||||
g_return_val_if_fail (fontb != NULL, FALSE);
|
g_return_val_if_fail (fontb != NULL, FALSE);
|
||||||
|
|
||||||
privatea = (const GdkFontPrivate*) fonta;
|
privatea = (const GdkFontPrivateWin32 *) fonta;
|
||||||
privateb = (const GdkFontPrivate*) fontb;
|
privateb = (const GdkFontPrivateWin32 *) fontb;
|
||||||
|
|
||||||
if (fonta->type == GDK_FONT_FONT && fontb->type == GDK_FONT_FONT)
|
if (fonta->type == GDK_FONT_FONT && fontb->type == GDK_FONT_FONT)
|
||||||
return (((GdkWin32SingleFont *) privatea->fonts->data)->xfont
|
return (((GdkWin32SingleFont *) privatea->fonts->data)->xfont
|
||||||
@ -1000,13 +970,6 @@ gdk_font_equal (const GdkFont *fonta,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_string_width (GdkFont *font,
|
|
||||||
const gchar *string)
|
|
||||||
{
|
|
||||||
return gdk_text_width (font, string, strlen (string));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This table classifies Unicode characters according to the Microsoft
|
/* This table classifies Unicode characters according to the Microsoft
|
||||||
* Unicode subset numbering. This is from the table in "Developing
|
* Unicode subset numbering. This is from the table in "Developing
|
||||||
* International Software for Windows 95 and Windows NT". This is almost,
|
* International Software for Windows 95 and Windows NT". This is almost,
|
||||||
@ -1126,7 +1089,7 @@ gdk_wchar_text_handle (GdkFont *font,
|
|||||||
void *),
|
void *),
|
||||||
void *arg)
|
void *arg)
|
||||||
{
|
{
|
||||||
GdkFontPrivate *private;
|
GdkFontPrivateWin32 *private;
|
||||||
GdkWin32SingleFont *singlefont;
|
GdkWin32SingleFont *singlefont;
|
||||||
GSList *list;
|
GSList *list;
|
||||||
int i, block;
|
int i, block;
|
||||||
@ -1134,9 +1097,9 @@ gdk_wchar_text_handle (GdkFont *font,
|
|||||||
|
|
||||||
wcp = wcstr;
|
wcp = wcstr;
|
||||||
end = wcp + wclen;
|
end = wcp + wclen;
|
||||||
private = (GdkFontPrivate *) font;
|
private = (GdkFontPrivateWin32 *) font;
|
||||||
|
|
||||||
g_assert (private->ref_count > 0);
|
g_assert (private->base.ref_count > 0);
|
||||||
|
|
||||||
while (wcp < end)
|
while (wcp < end)
|
||||||
{
|
{
|
||||||
@ -1282,36 +1245,6 @@ gdk_text_width_wc (GdkFont *font,
|
|||||||
return arg.total.cx;
|
return arg.total.cx;
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_char_width (GdkFont *font,
|
|
||||||
gchar character)
|
|
||||||
{
|
|
||||||
if (((guchar) character) >= 128)
|
|
||||||
{
|
|
||||||
/* gtktext calls us with non-ASCII characters, sigh */
|
|
||||||
GdkWChar wc = (guchar) character;
|
|
||||||
return gdk_text_width_wc (font, &wc, 1);
|
|
||||||
}
|
|
||||||
return gdk_text_width (font, &character, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_char_width_wc (GdkFont *font,
|
|
||||||
GdkWChar character)
|
|
||||||
{
|
|
||||||
return gdk_text_width_wc (font, &character, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_string_measure (GdkFont *font,
|
|
||||||
const gchar *string)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (font != NULL, -1);
|
|
||||||
g_return_val_if_fail (string != NULL, -1);
|
|
||||||
|
|
||||||
return gdk_text_measure (font, string, strlen (string));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gdk_text_extents (GdkFont *font,
|
gdk_text_extents (GdkFont *font,
|
||||||
const gchar *text,
|
const gchar *text,
|
||||||
@ -1434,68 +1367,3 @@ gdk_text_extents_wc (GdkFont *font,
|
|||||||
if (descent)
|
if (descent)
|
||||||
*descent = font->descent + 1;
|
*descent = font->descent + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
gdk_string_extents (GdkFont *font,
|
|
||||||
const gchar *string,
|
|
||||||
gint *lbearing,
|
|
||||||
gint *rbearing,
|
|
||||||
gint *width,
|
|
||||||
gint *ascent,
|
|
||||||
gint *descent)
|
|
||||||
{
|
|
||||||
g_return_if_fail (font != NULL);
|
|
||||||
g_return_if_fail (string != NULL);
|
|
||||||
|
|
||||||
gdk_text_extents (font, string, strlen (string),
|
|
||||||
lbearing, rbearing, width, ascent, descent);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_text_measure (GdkFont *font,
|
|
||||||
const gchar *text,
|
|
||||||
gint text_length)
|
|
||||||
{
|
|
||||||
return gdk_text_width (font, text, text_length); /* ??? */
|
|
||||||
}
|
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_char_measure (GdkFont *font,
|
|
||||||
gchar character)
|
|
||||||
{
|
|
||||||
return gdk_text_measure (font, &character, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_string_height (GdkFont *font,
|
|
||||||
const gchar *string)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (font != NULL, -1);
|
|
||||||
g_return_val_if_fail (string != NULL, -1);
|
|
||||||
|
|
||||||
return gdk_text_height (font, string, strlen (string));
|
|
||||||
}
|
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_text_height (GdkFont *font,
|
|
||||||
const gchar *text,
|
|
||||||
gint text_length)
|
|
||||||
{
|
|
||||||
gdk_text_size_arg arg;
|
|
||||||
|
|
||||||
arg.total.cx = arg.total.cy = 0;
|
|
||||||
arg.max.cx = arg.max.cy = 0;
|
|
||||||
|
|
||||||
if (!gdk_text_size (font, text, text_length, &arg))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return arg.max.cy;
|
|
||||||
}
|
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_char_height (GdkFont *font,
|
|
||||||
gchar character)
|
|
||||||
{
|
|
||||||
return gdk_text_height (font, &character, 1);
|
|
||||||
}
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -35,7 +35,7 @@
|
|||||||
#include "gdkpixmap.h"
|
#include "gdkpixmap.h"
|
||||||
#include "gdkprivate.h"
|
#include "gdkprivate.h"
|
||||||
#include "gdki18n.h"
|
#include "gdki18n.h"
|
||||||
#include "gdkx.h"
|
#include "gdkwin32.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*--------------------------------------------------------------
|
*--------------------------------------------------------------
|
||||||
|
|||||||
@ -144,7 +144,7 @@ struct _GdkGCWin32Data
|
|||||||
* has been selected into it. Thus, we have to release and
|
* has been selected into it. Thus, we have to release and
|
||||||
* reallocate a DC each time the GdkGC is used to paint into a new
|
* reallocate a DC each time the GdkGC is used to paint into a new
|
||||||
* window or pixmap. We thus keep all the necessary values in the
|
* window or pixmap. We thus keep all the necessary values in the
|
||||||
* GdkGCPrivate struct.
|
* GdkGCWin32Data struct.
|
||||||
*/
|
*/
|
||||||
HDC xgc;
|
HDC xgc;
|
||||||
GdkGCValuesMask values_mask;
|
GdkGCValuesMask values_mask;
|
||||||
@ -165,7 +165,8 @@ struct _GdkGCWin32Data
|
|||||||
gint pen_width;
|
gint pen_width;
|
||||||
DWORD pen_style;
|
DWORD pen_style;
|
||||||
HANDLE hwnd; /* If a DC is allocated, for which window
|
HANDLE hwnd; /* If a DC is allocated, for which window
|
||||||
or what bitmap is selected into it */
|
* or what bitmap is selected into it
|
||||||
|
*/
|
||||||
int saved_dc;
|
int saved_dc;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user