forked from Miroirs/x49gp
fonts are implicitly tiny_font or opt.font accordingly
This commit is contained in:
parent
f4626d7400
commit
9cb44cceb8
1 changed files with 37 additions and 37 deletions
|
@ -1259,7 +1259,7 @@ static int _regular_font_text_to_ucs4( const char* text, gunichar** ucs4p )
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _regular_font_vtext_path( cairo_t* cr, const char* family, double size, double x, double y, va_list ap )
|
static void _regular_font_vtext_path( cairo_t* cr, double size, double x, double y, va_list ap )
|
||||||
{
|
{
|
||||||
cairo_text_extents_t extents;
|
cairo_text_extents_t extents;
|
||||||
cairo_font_weight_t weight;
|
cairo_font_weight_t weight;
|
||||||
|
@ -1275,7 +1275,7 @@ static void _regular_font_vtext_path( cairo_t* cr, const char* family, double si
|
||||||
weight = va_arg( ap, cairo_font_weight_t );
|
weight = va_arg( ap, cairo_font_weight_t );
|
||||||
text = va_arg( ap, const char* );
|
text = va_arg( ap, const char* );
|
||||||
|
|
||||||
cairo_select_font_face( cr, family, slant, weight );
|
cairo_select_font_face( cr, opt.font, slant, weight );
|
||||||
cairo_set_font_size( cr, size );
|
cairo_set_font_size( cr, size );
|
||||||
|
|
||||||
ucs4 = NULL;
|
ucs4 = NULL;
|
||||||
|
@ -1323,7 +1323,7 @@ static void _regular_font_vtext_path( cairo_t* cr, const char* family, double si
|
||||||
free( ucs4 );
|
free( ucs4 );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void regular_font_measure_text( cairo_t* cr, const char* family, double size, double* x_bearing, double* y_bearing, double* width,
|
static void regular_font_measure_text( cairo_t* cr, double size, double* x_bearing, double* y_bearing, double* width,
|
||||||
double* height, double* ascent, double* descent, ... )
|
double* height, double* ascent, double* descent, ... )
|
||||||
{
|
{
|
||||||
va_list ap0, ap1;
|
va_list ap0, ap1;
|
||||||
|
@ -1336,7 +1336,7 @@ static void regular_font_measure_text( cairo_t* cr, const char* family, double s
|
||||||
va_start( ap0, descent );
|
va_start( ap0, descent );
|
||||||
va_copy( ap1, ap0 );
|
va_copy( ap1, ap0 );
|
||||||
|
|
||||||
_regular_font_vtext_path( cr, family, size, 0.0, 0.0, ap0 );
|
_regular_font_vtext_path( cr, size, 0.0, 0.0, ap0 );
|
||||||
|
|
||||||
va_end( ap0 );
|
va_end( ap0 );
|
||||||
|
|
||||||
|
@ -1353,7 +1353,7 @@ static void regular_font_measure_text( cairo_t* cr, const char* family, double s
|
||||||
text = va_arg( ap1, const char* );
|
text = va_arg( ap1, const char* );
|
||||||
( void )text;
|
( void )text;
|
||||||
|
|
||||||
cairo_select_font_face( cr, family, slant, weight );
|
cairo_select_font_face( cr, opt.font, slant, weight );
|
||||||
cairo_set_font_size( cr, size );
|
cairo_set_font_size( cr, size );
|
||||||
|
|
||||||
cairo_font_extents( cr, &font_extents );
|
cairo_font_extents( cr, &font_extents );
|
||||||
|
@ -1377,7 +1377,7 @@ static void regular_font_measure_text( cairo_t* cr, const char* family, double s
|
||||||
va_end( ap1 );
|
va_end( ap1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void regular_font_draw_text( cairo_t* cr, GdkColor* color, const char* family, double size, double line_width, int xoffset,
|
static void regular_font_draw_text( cairo_t* cr, GdkColor* color, double size, double line_width, int xoffset,
|
||||||
int yoffset, ... )
|
int yoffset, ... )
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
@ -1388,7 +1388,7 @@ static void regular_font_draw_text( cairo_t* cr, GdkColor* color, const char* fa
|
||||||
cairo_set_source_rgb( cr, ( ( double )color->red ) / 65535.0, ( ( double )color->green ) / 65535.0,
|
cairo_set_source_rgb( cr, ( ( double )color->red ) / 65535.0, ( ( double )color->green ) / 65535.0,
|
||||||
( ( double )color->blue ) / 65535.0 );
|
( ( double )color->blue ) / 65535.0 );
|
||||||
|
|
||||||
_regular_font_vtext_path( cr, family, size, xoffset, yoffset, ap );
|
_regular_font_vtext_path( cr, size, xoffset, yoffset, ap );
|
||||||
|
|
||||||
if ( line_width == 0.0 )
|
if ( line_width == 0.0 )
|
||||||
cairo_fill( cr );
|
cairo_fill( cr );
|
||||||
|
@ -1398,16 +1398,16 @@ static void regular_font_draw_text( cairo_t* cr, GdkColor* color, const char* fa
|
||||||
va_end( ap );
|
va_end( ap );
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned char _tiny_font_lookup_glyph( const tiny_font_t* font, const char* name, int namelen )
|
static unsigned char _tiny_font_lookup_glyph( const char* name, int namelen )
|
||||||
{
|
{
|
||||||
for ( int i = 0; font->glyphs[ i ].name; i++ )
|
for ( int i = 0; tiny_font.glyphs[ i ].name; i++ )
|
||||||
if ( ( strlen( font->glyphs[ i ].name ) == namelen ) && !strncmp( font->glyphs[ i ].name, name, namelen ) )
|
if ( ( strlen( tiny_font.glyphs[ i ].name ) == namelen ) && !strncmp( tiny_font.glyphs[ i ].name, name, namelen ) )
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned char _tiny_font_lookup_ascii( const tiny_font_t* font, char c )
|
static unsigned char _tiny_font_lookup_ascii( char c )
|
||||||
{
|
{
|
||||||
int namelen = 0;
|
int namelen = 0;
|
||||||
char* name;
|
char* name;
|
||||||
|
@ -1548,7 +1548,7 @@ static unsigned char _tiny_font_lookup_ascii( const tiny_font_t* font, char c )
|
||||||
if ( 0 == namelen )
|
if ( 0 == namelen )
|
||||||
namelen = strlen( name );
|
namelen = strlen( name );
|
||||||
|
|
||||||
return _tiny_font_lookup_glyph( font, name, namelen );
|
return _tiny_font_lookup_glyph( name, namelen );
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int _tiny_font_strlen( const char* text )
|
static inline int _tiny_font_strlen( const char* text )
|
||||||
|
@ -1585,7 +1585,7 @@ static inline int _tiny_font_strlen( const char* text )
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _tiny_font_text_to_glyphs( const tiny_font_t* font, const char* text, unsigned char** glyphp )
|
static int _tiny_font_text_to_glyphs( const char* text, unsigned char** glyphp )
|
||||||
{
|
{
|
||||||
unsigned char* glyphs;
|
unsigned char* glyphs;
|
||||||
const char *p, *q;
|
const char *p, *q;
|
||||||
|
@ -1609,7 +1609,7 @@ static int _tiny_font_text_to_glyphs( const tiny_font_t* font, const char* text,
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( c != '\\' ) {
|
if ( c != '\\' ) {
|
||||||
glyphs[ i++ ] = _tiny_font_lookup_ascii( font, c );
|
glyphs[ i++ ] = _tiny_font_lookup_ascii( c );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1620,14 +1620,14 @@ static int _tiny_font_text_to_glyphs( const tiny_font_t* font, const char* text,
|
||||||
q++;
|
q++;
|
||||||
}
|
}
|
||||||
if ( q == p ) {
|
if ( q == p ) {
|
||||||
glyphs[ i++ ] = _tiny_font_lookup_ascii( font, *p++ );
|
glyphs[ i++ ] = _tiny_font_lookup_ascii( *p++ );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
namelen = q - p;
|
namelen = q - p;
|
||||||
if ( *q == ' ' )
|
if ( *q == ' ' )
|
||||||
q++;
|
q++;
|
||||||
|
|
||||||
glyphs[ i++ ] = _tiny_font_lookup_glyph( font, p, namelen );
|
glyphs[ i++ ] = _tiny_font_lookup_glyph( p, namelen );
|
||||||
p = q;
|
p = q;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1635,7 +1635,7 @@ static int _tiny_font_text_to_glyphs( const tiny_font_t* font, const char* text,
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tiny_font_measure_text( const tiny_font_t* font, const char* text, int* width, int* height, int* ascent, int* descent )
|
static void tiny_font_measure_text( const char* text, int* width, int* height, int* ascent, int* descent )
|
||||||
{
|
{
|
||||||
const tiny_glyph_t* glyph;
|
const tiny_glyph_t* glyph;
|
||||||
unsigned char* glyphs;
|
unsigned char* glyphs;
|
||||||
|
@ -1645,10 +1645,10 @@ static void tiny_font_measure_text( const tiny_font_t* font, const char* text, i
|
||||||
a = 0;
|
a = 0;
|
||||||
d = 0;
|
d = 0;
|
||||||
|
|
||||||
n = _tiny_font_text_to_glyphs( font, text, &glyphs );
|
n = _tiny_font_text_to_glyphs( text, &glyphs );
|
||||||
|
|
||||||
for ( int i = 0; i < n; i++ ) {
|
for ( int i = 0; i < n; i++ ) {
|
||||||
glyph = &font->glyphs[ glyphs[ i ] ];
|
glyph = &tiny_font.glyphs[ glyphs[ i ] ];
|
||||||
|
|
||||||
w += glyph->width;
|
w += glyph->width;
|
||||||
|
|
||||||
|
@ -1659,7 +1659,7 @@ static void tiny_font_measure_text( const tiny_font_t* font, const char* text, i
|
||||||
}
|
}
|
||||||
|
|
||||||
*width = w - 1;
|
*width = w - 1;
|
||||||
*height = font->ascent - font->descent;
|
*height = tiny_font.ascent - tiny_font.descent;
|
||||||
*ascent = a;
|
*ascent = a;
|
||||||
*descent = d;
|
*descent = d;
|
||||||
|
|
||||||
|
@ -1667,7 +1667,7 @@ static void tiny_font_measure_text( const tiny_font_t* font, const char* text, i
|
||||||
free( glyphs );
|
free( glyphs );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tiny_font_draw_text( GdkDrawable* drawable, GdkColor* color, const tiny_font_t* font, int x, int y, const char* text )
|
static void tiny_font_draw_text( GdkDrawable* drawable, GdkColor* color, int x, int y, const char* text )
|
||||||
{
|
{
|
||||||
const tiny_glyph_t* glyph;
|
const tiny_glyph_t* glyph;
|
||||||
unsigned char* glyphs;
|
unsigned char* glyphs;
|
||||||
|
@ -1678,10 +1678,10 @@ static void tiny_font_draw_text( GdkDrawable* drawable, GdkColor* color, const t
|
||||||
gc = gdk_gc_new( drawable );
|
gc = gdk_gc_new( drawable );
|
||||||
gdk_gc_set_rgb_fg_color( gc, color );
|
gdk_gc_set_rgb_fg_color( gc, color );
|
||||||
|
|
||||||
n = _tiny_font_text_to_glyphs( font, text, &glyphs );
|
n = _tiny_font_text_to_glyphs( text, &glyphs );
|
||||||
|
|
||||||
for ( int i = 0; i < n; i++ ) {
|
for ( int i = 0; i < n; i++ ) {
|
||||||
glyph = &font->glyphs[ glyphs[ i ] ];
|
glyph = &tiny_font.glyphs[ glyphs[ i ] ];
|
||||||
|
|
||||||
w = glyph->width - glyph->kern;
|
w = glyph->width - glyph->kern;
|
||||||
h = glyph->ascent - glyph->descent;
|
h = glyph->ascent - glyph->descent;
|
||||||
|
@ -1693,11 +1693,11 @@ static void tiny_font_draw_text( GdkDrawable* drawable, GdkColor* color, const t
|
||||||
|
|
||||||
bitmap = gdk_bitmap_create_from_data( NULL, ( char* )glyph->bits, w, h );
|
bitmap = gdk_bitmap_create_from_data( NULL, ( char* )glyph->bits, w, h );
|
||||||
|
|
||||||
gdk_gc_set_ts_origin( gc, x + glyph->kern, y + font->ascent - glyph->ascent );
|
gdk_gc_set_ts_origin( gc, x + glyph->kern, y + tiny_font.ascent - glyph->ascent );
|
||||||
gdk_gc_set_stipple( gc, bitmap );
|
gdk_gc_set_stipple( gc, bitmap );
|
||||||
gdk_gc_set_fill( gc, GDK_STIPPLED );
|
gdk_gc_set_fill( gc, GDK_STIPPLED );
|
||||||
|
|
||||||
gdk_draw_rectangle( drawable, gc, true, x + glyph->kern, y + font->ascent - glyph->ascent, w, h );
|
gdk_draw_rectangle( drawable, gc, true, x + glyph->kern, y + tiny_font.ascent - glyph->ascent, w, h );
|
||||||
|
|
||||||
g_object_unref( bitmap );
|
g_object_unref( bitmap );
|
||||||
|
|
||||||
|
@ -2300,7 +2300,7 @@ static void handler_button_realize( GtkWidget* widget, gpointer user_data )
|
||||||
cairo_fill( cr );
|
cairo_fill( cr );
|
||||||
|
|
||||||
if ( key->letter ) {
|
if ( key->letter ) {
|
||||||
regular_font_measure_text( cr, opt.font, key->letter_size, &xoff, &yoff, &width, &height, &ascent, &descent,
|
regular_font_measure_text( cr, key->letter_size, &xoff, &yoff, &width, &height, &ascent, &descent,
|
||||||
CAIRO_FONT_SLANT_NORMAL, key->font_weight, key->letter );
|
CAIRO_FONT_SLANT_NORMAL, key->font_weight, key->letter );
|
||||||
|
|
||||||
switch ( key->layout ) {
|
switch ( key->layout ) {
|
||||||
|
@ -2321,17 +2321,17 @@ static void handler_button_realize( GtkWidget* widget, gpointer user_data )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
regular_font_draw_text( cr, &ui->colors[ UI_COLOR_YELLOW ], opt.font, key->letter_size, 0.0, x + xoffset, y + yoffset,
|
regular_font_draw_text( cr, &ui->colors[ UI_COLOR_YELLOW ], key->letter_size, 0.0, x + xoffset, y + yoffset,
|
||||||
CAIRO_FONT_SLANT_NORMAL, key->font_weight, key->letter );
|
CAIRO_FONT_SLANT_NORMAL, key->font_weight, key->letter );
|
||||||
}
|
}
|
||||||
|
|
||||||
regular_font_measure_text( cr, opt.font, key->font_size, &xoff, &yoff, &width, &height, &ascent, &descent, CAIRO_FONT_SLANT_NORMAL,
|
regular_font_measure_text( cr, key->font_size, &xoff, &yoff, &width, &height, &ascent, &descent, CAIRO_FONT_SLANT_NORMAL,
|
||||||
key->font_weight, key->label );
|
key->font_weight, key->label );
|
||||||
|
|
||||||
x = ( int )floor( ( w - 1.0 - width ) / 2.0 - xoff + 0.5 );
|
x = ( int )floor( ( w - 1.0 - width ) / 2.0 - xoff + 0.5 );
|
||||||
y = ( int )floor( ( h - 1.0 + ascent ) / 2.0 + 0.5 );
|
y = ( int )floor( ( h - 1.0 + ascent ) / 2.0 + 0.5 );
|
||||||
|
|
||||||
regular_font_draw_text( cr, >k_widget_get_style( widget )->text[ 0 ], opt.font, key->font_size, 0.0, x + xoffset, y + yoffset,
|
regular_font_draw_text( cr, >k_widget_get_style( widget )->text[ 0 ], key->font_size, 0.0, x + xoffset, y + yoffset,
|
||||||
CAIRO_FONT_SLANT_NORMAL, key->font_weight, key->label );
|
CAIRO_FONT_SLANT_NORMAL, key->font_weight, key->label );
|
||||||
|
|
||||||
cairo_destroy( cr );
|
cairo_destroy( cr );
|
||||||
|
@ -2462,19 +2462,19 @@ static int handler_faceplate_draw( GtkWidget* widget, GdkEventConfigure* event,
|
||||||
key = ui->buttons[ i ].key;
|
key = ui->buttons[ i ].key;
|
||||||
|
|
||||||
if ( key->left ) {
|
if ( key->left ) {
|
||||||
tiny_font_measure_text( &tiny_font, key->left, &wl, &hl, &a, &dl );
|
tiny_font_measure_text( key->left, &wl, &hl, &a, &dl );
|
||||||
if ( !key->right ) {
|
if ( !key->right ) {
|
||||||
xl = key->x + ( key->width - wl ) / 2;
|
xl = key->x + ( key->width - wl ) / 2;
|
||||||
tiny_font_draw_text( ui->bg_pixmap, &ui->colors[ left_color ], &tiny_font, ui->kb_x_offset + xl,
|
tiny_font_draw_text( ui->bg_pixmap, &ui->colors[ left_color ], ui->kb_x_offset + xl,
|
||||||
ui->kb_y_offset + key->y - hl + dl + 1, key->left );
|
ui->kb_y_offset + key->y - hl + dl + 1, key->left );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( key->right ) {
|
if ( key->right ) {
|
||||||
tiny_font_measure_text( &tiny_font, key->right, &wr, &hr, &a, &dr );
|
tiny_font_measure_text( key->right, &wr, &hr, &a, &dr );
|
||||||
if ( !key->left ) {
|
if ( !key->left ) {
|
||||||
xr = key->x + ( key->width - wr ) / 2;
|
xr = key->x + ( key->width - wr ) / 2;
|
||||||
tiny_font_draw_text( ui->bg_pixmap, &ui->colors[ right_color ], &tiny_font, ui->kb_x_offset + xr,
|
tiny_font_draw_text( ui->bg_pixmap, &ui->colors[ right_color ], ui->kb_x_offset + xr,
|
||||||
ui->kb_y_offset + key->y - hr + dr + 1, key->right );
|
ui->kb_y_offset + key->y - hr + dr + 1, key->right );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2488,18 +2488,18 @@ static int handler_faceplate_draw( GtkWidget* widget, GdkEventConfigure* event,
|
||||||
xr -= ( key->width - 4 - ( wl + wr ) ) / 2;
|
xr -= ( key->width - 4 - ( wl + wr ) ) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
tiny_font_draw_text( ui->bg_pixmap, &ui->colors[ left_color ], &tiny_font, ui->kb_x_offset + xl,
|
tiny_font_draw_text( ui->bg_pixmap, &ui->colors[ left_color ], ui->kb_x_offset + xl,
|
||||||
ui->kb_y_offset + key->y - hl + dl + 1, key->left );
|
ui->kb_y_offset + key->y - hl + dl + 1, key->left );
|
||||||
|
|
||||||
tiny_font_draw_text( ui->bg_pixmap, &ui->colors[ right_color ], &tiny_font, ui->kb_x_offset + xr,
|
tiny_font_draw_text( ui->bg_pixmap, &ui->colors[ right_color ], ui->kb_x_offset + xr,
|
||||||
ui->kb_y_offset + key->y - hr + dr + 1, key->right );
|
ui->kb_y_offset + key->y - hr + dr + 1, key->right );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( key->below ) {
|
if ( key->below ) {
|
||||||
tiny_font_measure_text( &tiny_font, key->below, &wl, &hl, &a, &dl );
|
tiny_font_measure_text( key->below, &wl, &hl, &a, &dl );
|
||||||
xl = key->x + ( key->width - wl ) / 2;
|
xl = key->x + ( key->width - wl ) / 2;
|
||||||
|
|
||||||
tiny_font_draw_text( ui->bg_pixmap, &ui->colors[ below_color ], &tiny_font, ui->kb_x_offset + xl,
|
tiny_font_draw_text( ui->bg_pixmap, &ui->colors[ below_color ], ui->kb_x_offset + xl,
|
||||||
ui->kb_y_offset + key->y + key->height + 2, key->below );
|
ui->kb_y_offset + key->y + key->height + 2, key->below );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue