#ifndef __GDKFONT_H__
#define __GDKFONT_H__
#include "gtkpeer.h"
#include <pango/pango.h>
#include <pango/pango-context.h>
#include <pango/pango-fontmap.h>
#include <pango/pangoft2.h>
extern struct state_table *native_font_state_table;
extern struct state_table *native_glyphvector_state_table;
extern struct state_table *native_text_layout_state_table;
#define NSA_FONT_INIT(env, clazz) \
native_font_state_table = init_state_table (env, clazz)
#define NSA_GET_FONT_PTR(env, obj) \
get_state (env, obj, native_font_state_table)
#define NSA_SET_FONT_PTR(env, obj, ptr) \
set_state (env, obj, native_font_state_table, (void *)ptr)
#define NSA_DEL_FONT_PTR(env, obj) \
remove_state_slot (env, obj, native_font_state_table)
#define NSA_GV_INIT(env, clazz) \
native_glyphvector_state_table = init_state_table (env, clazz)
#define NSA_GET_GV_PTR(env, obj) \
get_state (env, obj, native_glyphvector_state_table)
#define NSA_SET_GV_PTR(env, obj, ptr) \
set_state (env, obj, native_glyphvector_state_table, (void *)ptr)
#define NSA_DEL_GV_PTR(env, obj) \
remove_state_slot (env, obj, native_glyphvector_state_table)
#define NSA_TEXT_LAYOUT_INIT(env, clazz) \
native_text_layout_state_table = init_state_table (env, clazz)
#define NSA_GET_TEXT_LAYOUT_PTR(env, obj) \
get_state (env, obj, native_text_layout_state_table)
#define NSA_SET_TEXT_LAYOUT_PTR(env, obj, ptr) \
set_state (env, obj, native_text_layout_state_table, (void *)ptr)
#define NSA_DEL_TEXT_LAYOUT_PTR(env, obj) \
remove_state_slot (env, obj, native_text_layout_state_table)
#define FONT_METRICS_ASCENT 0
#define FONT_METRICS_MAX_ASCENT 1
#define FONT_METRICS_DESCENT 2
#define FONT_METRICS_MAX_DESCENT 3
#define FONT_METRICS_MAX_ADVANCE 4
#define NUM_FONT_METRICS 5
#define TEXT_METRICS_X_BEARING 0
#define TEXT_METRICS_Y_BEARING 1
#define TEXT_METRICS_WIDTH 2
#define TEXT_METRICS_HEIGHT 3
#define TEXT_METRICS_X_ADVANCE 4
#define TEXT_METRICS_Y_ADVANCE 5
#define NUM_TEXT_METRICS 6
#define NUM_GLYPH_METRICS 10
#define GLYPH_LOG_X(i) (NUM_GLYPH_METRICS * (i) )
#define GLYPH_LOG_Y(i) (NUM_GLYPH_METRICS * (i) + 1)
#define GLYPH_LOG_WIDTH(i) (NUM_GLYPH_METRICS * (i) + 2)
#define GLYPH_LOG_HEIGHT(i) (NUM_GLYPH_METRICS * (i) + 3)
#define GLYPH_INK_X(i) (NUM_GLYPH_METRICS * (i) + 4)
#define GLYPH_INK_Y(i) (NUM_GLYPH_METRICS * (i) + 5)
#define GLYPH_INK_WIDTH(i) (NUM_GLYPH_METRICS * (i) + 6)
#define GLYPH_INK_HEIGHT(i) (NUM_GLYPH_METRICS * (i) + 7)
#define GLYPH_POS_X(i) (NUM_GLYPH_METRICS * (i) + 8)
#define GLYPH_POS_Y(i) (NUM_GLYPH_METRICS * (i) + 9)
struct peerfont
{
PangoFont *font;
PangoFontDescription *desc;
PangoContext *ctx;
PangoLayout *layout;
void *graphics_resource;
};
struct textlayout
{
PangoLayout *pango_layout;
};
#endif