From 2f4b9395dcf1af51a251e0dbaa94a25a54575853 Mon Sep 17 00:00:00 2001 From: James Henstridge Date: Wed, 4 Dec 2002 05:40:24 +0000 Subject: [PATCH] start of simple font viewer program. Doesn't correctl display the text yet 2002-12-04 James Henstridge * src/font-view.c (main): start of simple font viewer program. Doesn't correctl display the text yet though :( * src/ftstream-vfs.c (FT_New_Face_From_URI): rename function to match naming scheme used elsewhere. --- vfs-methods/fontilus/ChangeLog | 8 ++ vfs-methods/fontilus/Makefile.am | 9 ++- vfs-methods/fontilus/font-view.c | 111 ++++++++++++++++++++++++++++ vfs-methods/fontilus/ftstream-vfs.c | 8 +- vfs-methods/fontilus/thumbnailer.c | 10 +-- 5 files changed, 134 insertions(+), 12 deletions(-) create mode 100644 vfs-methods/fontilus/font-view.c diff --git a/vfs-methods/fontilus/ChangeLog b/vfs-methods/fontilus/ChangeLog index d074beaad..3d48b0f69 100644 --- a/vfs-methods/fontilus/ChangeLog +++ b/vfs-methods/fontilus/ChangeLog @@ -1,3 +1,11 @@ +2002-12-04 James Henstridge + + * src/font-view.c (main): start of simple font viewer program. + Doesn't correctl display the text yet though :( + + * src/ftstream-vfs.c (FT_New_Face_From_URI): rename function to + match naming scheme used elsewhere. + 2002-12-02 James Henstridge * src/thumbnailer.c (draw_char): split code for drawing character diff --git a/vfs-methods/fontilus/Makefile.am b/vfs-methods/fontilus/Makefile.am index 120c16501..0b8a9a4ab 100644 --- a/vfs-methods/fontilus/Makefile.am +++ b/vfs-methods/fontilus/Makefile.am @@ -1,11 +1,11 @@ -INCLUDES = $(FONT_METHOD_CFLAGS) $(THUMBNAILER_CFLAGS) \ - -DDIRECTORY_DIR=\"$(vfsdirectorydir)\" +INCLUDES = $(FONT_METHOD_CFLAGS) $(THUMBNAILER_CFLAGS) $(FONT_VIEW_CFLAGS) \ + -DDIRECTORY_DIR=\"$(vfsdirectorydir)\" vfsmoduledir = $(libdir)/gnome-vfs-2.0/modules vfsmodule_LTLIBRARIES = libfont-method.la -noinst_PROGRAMS = thumbnailer +noinst_PROGRAMS = thumbnailer font-view libfont_method_la_LDFLAGS = -module -avoid-version libfont_method_la_LIBADD = $(FONT_METHOD_LIBS) @@ -20,6 +20,9 @@ vfsdirectory_DATA = font-method.directory thumbnailer_LDADD = $(THUMBNAILER_LIBS) thumbnailer_SOURCES = ftstream-vfs.c thumbnailer.c +font_view_LDADD = $(FONT_VIEW_LIBS) +font_view_SOURCES = ftstream-vfs.c font-view.c + EXTRA_DIST = \ font-method.conf \ font-method.directory diff --git a/vfs-methods/fontilus/font-view.c b/vfs-methods/fontilus/font-view.c new file mode 100644 index 000000000..d92dc5c82 --- /dev/null +++ b/vfs-methods/fontilus/font-view.c @@ -0,0 +1,111 @@ +/* -*- mode: C; c-basic-offset: 4 -*- */ +#include +#include FT_FREETYPE_H +#include +#include +#include + +static XftFont *font; +static XftDraw *draw = NULL; +static XftColor colour; + +FT_Error FT_New_Face_From_URI(FT_Library library, + const gchar *uri, + FT_Long face_index, + FT_Face *aface); + +static void +realize(GtkWidget *widget) +{ + Display *xdisplay; + Drawable xdrawable; + Visual *xvisual; + Colormap xcolormap; + + xdisplay = GDK_WINDOW_XDISPLAY(widget->window); + xdrawable = GDK_DRAWABLE_XID(widget->window); + xvisual = GDK_VISUAL_XVISUAL(gdk_drawable_get_visual(widget->window)); + xcolormap = GDK_COLORMAP_XCOLORMAP(gdk_drawable_get_colormap(widget->window)); + + draw = XftDrawCreate(xdisplay, xdrawable, xvisual, xcolormap); + if (!draw) { + g_warning("could not create Xft drawable"); + return; + } + XftColorAllocName(xdisplay, xvisual, xcolormap, "black", &colour); +} + +static gboolean +expose_event(GtkWidget *widget, GdkEventExpose *event) +{ + XftDrawString8(draw, &colour, font, 50, 50, "Foo bar", 7); +} + +int +main(int argc, char **argv) +{ + FT_Error error; + FT_Library library; + FT_Face face; + FcPattern *pattern; + GtkWidget *window; + GtkWidget *drawing_area; + GdkColor white = { 0, 0xffff, 0xffff, 0xffff }; + + gtk_init(&argc, &argv); + + if (argc != 2) { + g_printerr("usage: foo fontfile\n"); + return 1; + } + + if (!gnome_vfs_init()) { + g_printerr("could not initialise gnome-vfs\n"); + return 1; + } + + error = FT_Init_FreeType(&library); + if (error) { + g_printerr("could not initialise freetype\n"); + return 1; + } + + error = FT_New_Face_From_URI(library, argv[1], 0, &face); + if (error) { + g_printerr("could not load face '%s'\n", argv[1]); + return 1; + } + + pattern = FcPatternBuild(NULL, + FC_FT_FACE, FcTypeFTFace, face, + FC_PIXEL_SIZE, FcTypeDouble, 48.0, + NULL); + font = XftFontOpenPattern(GDK_DISPLAY(), pattern); + if (!font) { + g_printerr("could not load face\n"); + return 1; + } + + g_message("ascent=%d, descent=%d, height=%d", + font->ascent, font->descent, font->height); + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), "Foo"); + + drawing_area = gtk_drawing_area_new(); + gtk_widget_modify_bg(drawing_area, GTK_STATE_NORMAL, &white); + gtk_widget_set_double_buffered(drawing_area, FALSE); + gtk_widget_set_size_request(drawing_area, 300, 300); + gtk_container_add(GTK_CONTAINER(window), drawing_area); + + g_signal_connect_after(drawing_area, "realize", + G_CALLBACK(realize), NULL); + g_signal_connect(drawing_area, "expose_event", + G_CALLBACK(expose_event), NULL); + g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); + + gtk_widget_show_all(window); + + gtk_main(); + return 0; +} diff --git a/vfs-methods/fontilus/ftstream-vfs.c b/vfs-methods/fontilus/ftstream-vfs.c index f5af8c917..8b49375e8 100644 --- a/vfs-methods/fontilus/ftstream-vfs.c +++ b/vfs-methods/fontilus/ftstream-vfs.c @@ -81,10 +81,10 @@ vfs_stream_open(FT_Stream stream, /* load a typeface from a URI */ FT_Error -FT_New_URI_Face(FT_Library library, - const gchar* uri, - FT_Long face_index, - FT_Face *aface) +FT_New_Face_From_URI(FT_Library library, + const gchar* uri, + FT_Long face_index, + FT_Face *aface) { FT_Open_Args args; FT_Stream stream; diff --git a/vfs-methods/fontilus/thumbnailer.c b/vfs-methods/fontilus/thumbnailer.c index c86ea5e6f..c9d335565 100644 --- a/vfs-methods/fontilus/thumbnailer.c +++ b/vfs-methods/fontilus/thumbnailer.c @@ -11,10 +11,10 @@ #define FONT_SIZE 64 #define PAD_PIXELS 4 -FT_Error FT_New_URI_Face(FT_Library library, - const gchar *uri, - FT_Long face_index, - FT_Face *aface); +FT_Error FT_New_Face_From_URI(FT_Library library, + const gchar *uri, + FT_Long face_index, + FT_Face *aface); static void draw_bitmap(GdkPixbuf *pixbuf, FT_Bitmap *bitmap, gint off_x, gint off_y) @@ -196,7 +196,7 @@ main(int argc, char **argv) return 1; } - error = FT_New_URI_Face(library, argv[1], 0, &face); + error = FT_New_Face_From_URI(library, argv[1], 0, &face); if (error) { g_printerr("could not load face '%s'\n", argv[1]); return 1;