gtk/gdk/directfb/gdkfont-directfb.c
2006-02-05 04:04:29 +00:00

279 lines
6.0 KiB
C

/* GDK - The GIMP Drawing Kit
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/*
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GTK+ Team.
*/
/*
* GTK+ DirectFB backend
* Copyright (C) 2001-2002 convergence integrated media GmbH
* Copyright (C) 2002-2004 convergence GmbH
* Written by Denis Oliver Kropp <dok@convergence.de> and
* Sven Neumann <sven@convergence.de>
*/
#undef GDK_DISABLE_DEPRECATED
#include <config.h>
#include "gdk.h"
#include <string.h>
#include "gdkdirectfb.h"
#include "gdkprivate-directfb.h"
#include "gdkinternals.h"
#include "gdkfont.h"
#include "gdkalias.h"
typedef struct _GdkFontDirectFB GdkFontDirectFB;
struct _GdkFontDirectFB
{
GdkFontPrivate base;
gint size;
IDirectFBFont *dfbfont;
};
static GdkFont *
gdk_directfb_bogus_font (gint height)
{
GdkFont *font;
GdkFontDirectFB *private;
private = g_new0 (GdkFontDirectFB, 1);
font = (GdkFont *)private;
font->type = GDK_FONT_FONT;
font->ascent = height*3/4;
font->descent = height/4;
private->size = height;
private->base.ref_count = 1;
return font;
}
GdkFont*
gdk_font_from_description_for_display (GdkDisplay * display,PangoFontDescription *font_desc)
{
gint size;
g_return_val_if_fail (font_desc, NULL);
size = pango_font_description_get_size (font_desc);
return gdk_directfb_bogus_font (PANGO_PIXELS (size));
}
/* ********************* */
GdkFont*
gdk_fontset_load (const gchar *fontset_name)
{
return gdk_directfb_bogus_font (10);
}
GdkFont *
gdk_fontset_load_for_display (GdkDisplay *display,const gchar *font_name) {
return gdk_directfb_bogus_font (10);
}
GdkFont *
gdk_font_load_for_display (GdkDisplay *display,const gchar *font_name)
{
return gdk_directfb_bogus_font (10);
}
void
_gdk_font_destroy (GdkFont *font)
{
switch (font->type)
{
case GDK_FONT_FONT:
break;
case GDK_FONT_FONTSET:
break;
default:
g_error ("unknown font type.");
break;
}
g_free (font);
}
gint
_gdk_font_strlen (GdkFont *font,
const gchar *str)
{
GdkFontDirectFB *font_private;
gint length = 0;
g_return_val_if_fail (font != NULL, -1);
g_return_val_if_fail (str != NULL, -1);
font_private = (GdkFontDirectFB*) font;
if (font->type == GDK_FONT_FONT)
{
guint16 *string_2b = (guint16 *)str;
while (*(string_2b++))
length++;
}
else if (font->type == GDK_FONT_FONTSET)
{
length = strlen (str);
}
else
g_error("undefined font type\n");
return length;
}
gint
gdk_font_id (const GdkFont *font)
{
const GdkFontDirectFB *font_private;
g_return_val_if_fail (font != NULL, 0);
font_private = (const GdkFontDirectFB*) font;
if (font->type == GDK_FONT_FONT)
{
return -1;
}
else
{
return 0;
}
}
gint
gdk_font_equal (const GdkFont *fonta,
const GdkFont *fontb)
{
const GdkFontDirectFB *privatea;
const GdkFontDirectFB *privateb;
g_return_val_if_fail (fonta != NULL, FALSE);
g_return_val_if_fail (fontb != NULL, FALSE);
privatea = (const GdkFontDirectFB*) fonta;
privateb = (const GdkFontDirectFB*) fontb;
if(fonta == fontb)
return TRUE;
return FALSE;
}
gint
gdk_text_width (GdkFont *font,
const gchar *text,
gint text_length)
{
GdkFontDirectFB *private;
private = (GdkFontDirectFB*) font;
return (text_length * private->size) / 2;
}
gint
gdk_text_width_wc (GdkFont *font,
const GdkWChar *text,
gint text_length)
{
return 0;
}
void
gdk_text_extents (GdkFont *font,
const gchar *text,
gint text_length,
gint *lbearing,
gint *rbearing,
gint *width,
gint *ascent,
gint *descent)
{
if(ascent)
*ascent = font->ascent;
if(descent)
*descent = font->descent;
if(width)
*width = gdk_text_width(font, text, text_length);
if(lbearing)
*lbearing = 0;
if(rbearing)
*rbearing = 0;
}
void
gdk_text_extents_wc (GdkFont *font,
const GdkWChar *text,
gint text_length,
gint *lbearing,
gint *rbearing,
gint *width,
gint *ascent,
gint *descent)
{
char *realstr;
int i;
realstr = alloca (text_length + 1);
for(i = 0; i < text_length; i++)
realstr[i] = text[i];
realstr[i] = '\0';
return gdk_text_extents (font,
realstr,
text_length,
lbearing,
rbearing,
width,
ascent,
descent);
}
GdkFont *
gdk_font_lookup (GdkNativeWindow xid)
{
g_warning(" gdk_font_lookup unimplemented \n");
return NULL;
}
GdkDisplay*
gdk_font_get_display (GdkFont* font)
{
g_warning(" gdk_font_get_display unimplemented \n");
return NULL;
}
#define __GDK_FONT_X11_C__
#include "gdkaliasdef.c"