forked from Miroirs/x49gp
draw faceplate instead of loading png
This commit is contained in:
parent
c3e54608fe
commit
01408a338f
2 changed files with 86 additions and 50 deletions
|
@ -85,7 +85,6 @@ static const cairo_path_data_t symbol_divisionslash_path_data[] = { SYMBOL_MOVE_
|
|||
SYMBOL_CLOSE_PATH() };
|
||||
SYMBOL( divisionslash, 0.575, 0.000, 0.050, 0.000, 0.525, 0.739 );
|
||||
|
||||
|
||||
static const cairo_path_data_t symbol_arrowup_path_data[] = { SYMBOL_MOVE_TO( 0.000, 0.000 ), SYMBOL_LINE_TO( 1.000, 0.000 ),
|
||||
SYMBOL_LINE_TO( -0.500, 1.000 ), SYMBOL_CLOSE_PATH() };
|
||||
SYMBOL( arrowup, 1.0, 0.0, 0.1, 0.0, 0.9, 0.693 );
|
||||
|
@ -102,7 +101,6 @@ static const cairo_path_data_t symbol_arrowright_path_data[] = { SYMBOL_MOVE_TO(
|
|||
SYMBOL_LINE_TO( 1.000, -0.500 ), SYMBOL_CLOSE_PATH() };
|
||||
SYMBOL( arrowright, 1.0, 0.0, 0.1, 0.0, 0.9, 0.693 );
|
||||
|
||||
|
||||
CONTROL( beginsuperscript, 0.0, 0.5, 1.0, 0.8 );
|
||||
CONTROL( endsuperscript, 0.0, 0.5, 1.25, 1.0 );
|
||||
|
||||
|
|
104
src/x49gpng/ui.c
104
src/x49gpng/ui.c
|
@ -2198,18 +2198,19 @@ static int x49gp_ui_button_pixmaps_init( x49gp_t* x49gp, x49gp_ui_button_t* butt
|
|||
GdkPixbuf* src;
|
||||
cairo_t* cr;
|
||||
GtkStyle* style = gtk_style_new();
|
||||
int y;
|
||||
|
||||
x49gp_ui_style_init( style, button->button, &ui->colors[ button->key->color ], &ui->colors[ UI_COLOR_BLACK ] );
|
||||
|
||||
for ( int i = 0; i < 5; i++ ) {
|
||||
style->bg_pixmap[ i ] = gdk_pixmap_new( gtk_widget_get_window( ui->window ), button->key->width, button->key->height, -1 );
|
||||
|
||||
y = ui->kb_y_offset + button->key->y;
|
||||
|
||||
if ( i == GTK_STATE_ACTIVE )
|
||||
src = gdk_pixbuf_new_subpixbuf( ui->bg_pixbuf, ui->kb_x_offset + button->key->x, ui->kb_y_offset + button->key->y + 1,
|
||||
button->key->width, button->key->height );
|
||||
else
|
||||
src = gdk_pixbuf_new_subpixbuf( ui->bg_pixbuf, ui->kb_x_offset + button->key->x, ui->kb_y_offset + button->key->y,
|
||||
button->key->width, button->key->height );
|
||||
y += 1;
|
||||
|
||||
src = gdk_pixbuf_new_subpixbuf( ui->bg_pixbuf, ui->kb_x_offset + button->key->x, y, button->key->width, button->key->height );
|
||||
|
||||
cr = gdk_cairo_create( style->bg_pixmap[ i ] );
|
||||
gdk_cairo_set_source_pixbuf( cr, src, 0, 0 );
|
||||
|
@ -3753,12 +3754,8 @@ static int gui_exit( x49gp_module_t* module ) { return 0; }
|
|||
|
||||
static int gui_reset( x49gp_module_t* module, x49gp_reset_t reset ) { return 0; }
|
||||
|
||||
static int gui_load( x49gp_module_t* module, GKeyFile* keyfile )
|
||||
static void init_colors( x49gp_ui_t* ui )
|
||||
{
|
||||
x49gp_t* x49gp = module->x49gp;
|
||||
x49gp_ui_t* ui = module->user_data;
|
||||
|
||||
/* create all colors */
|
||||
x49gp_ui_color_init( &ui->colors[ UI_COLOR_BLACK ], 0x00, 0x00, 0x00 ); /* #000000 */
|
||||
x49gp_ui_color_init( &ui->colors[ UI_COLOR_WHITE ], 0xff, 0xff, 0xff ); /* #ffffff */
|
||||
x49gp_ui_color_init( &ui->colors[ UI_COLOR_YELLOW ], 0xfa, 0xe8, 0x2c ); /* #fae82c */
|
||||
|
@ -3783,6 +3780,69 @@ static int gui_load( x49gp_module_t* module, GKeyFile* keyfile )
|
|||
x49gp_ui_color_init( &ui->colors[ UI_COLOR_GRAYSCALE_13 ], 0x17, 0x1c, 0x18 ); /* #171c18 */
|
||||
x49gp_ui_color_init( &ui->colors[ UI_COLOR_GRAYSCALE_14 ], 0x0b, 0x03, 0x0c ); /* #0b030c */
|
||||
x49gp_ui_color_init( &ui->colors[ UI_COLOR_GRAYSCALE_15 ], 0x00, 0x00, 0x00 ); /* #000000 */
|
||||
}
|
||||
|
||||
static inline unsigned color2rgba( x49gp_ui_t* ui, int color )
|
||||
{
|
||||
return 0x000000ff | ( ui->colors[ color ].red ) | ( ui->colors[ color ].green << 8 ) | ( ui->colors[ color ].blue << 16 );
|
||||
}
|
||||
|
||||
static void setup_faceplate( x49gp_ui_t* ui )
|
||||
{
|
||||
/* Load faceplate base texture */
|
||||
/* gerror* gerror = NULL; */
|
||||
/* char* faceplate_texture_data; */
|
||||
/* int fd = x49gp_module_open_rodata( module, */
|
||||
/* ui->calculator == UI_CALCULATOR_HP49GP || ui->calculator == UI_CALCULATOR_HP49GP_NEWRPL */
|
||||
/* ? "hp49g+-cropped.png" */
|
||||
/* : "blank.png" /\* "hp50g-cropped.png" *\/, */
|
||||
/* &faceplate_texture_data ); */
|
||||
/* if ( fd < 0 ) */
|
||||
/* return fd; */
|
||||
|
||||
/* ui->bg_pixbuf = gdk_pixbuf_new_from_file( faceplate_texture_data, &gerror ); */
|
||||
|
||||
/* /\* set ui->width and ui->height based on faceplate_texture_data dimensions *\/ */
|
||||
/* gdk_pixbuf_get_file_info( faceplate_texture_data, &ui->width, &ui->height ); */
|
||||
/* close( fd ); */
|
||||
|
||||
ui->width = 302;
|
||||
ui->height = 728;
|
||||
|
||||
/* set coordinates of LCD and keyboard */
|
||||
ui->lcd_width = 131 * LCD_PIXEL_SCALE;
|
||||
ui->lcd_annunciators_height = 16;
|
||||
ui->lcd_height = ( 80 * LCD_PIXEL_SCALE ) + ui->lcd_annunciators_height;
|
||||
ui->lcd_x_offset = ( ui->width - ui->lcd_width ) / 2;
|
||||
ui->lcd_y_offset = 48; // 69;
|
||||
|
||||
ui->bg_pixbuf = gdk_pixbuf_new( GDK_COLORSPACE_RGB, FALSE, 8, ui->width, ui->height );
|
||||
|
||||
gdk_pixbuf_fill( ui->bg_pixbuf, color2rgba( ui, UI_COLOR_GRAYSCALE_12 ) );
|
||||
|
||||
/* cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, ui->width, ui->height); */
|
||||
/* cairo_t* cr = cairo_create( surface ); */
|
||||
/* /\* Draw the pixbuf *\/ */
|
||||
/* gdk_cairo_set_source_pixbuf (cr, ui->bg_pixbuf, 0, 0); */
|
||||
/* cairo_paint (cr); */
|
||||
/* /\* Draw a red rectangle *\/ */
|
||||
|
||||
/* GdkColor color = ui->colors[ UI_COLOR_GRAYSCALE_0 ]; */
|
||||
/* cairo_set_source_rgb( cr, color.red / 65535.0, color.green / 65535.0, color.blue / 65535.0 ); */
|
||||
/* cairo_rectangle (cr, ui->lcd_x_offset - 2, ui->lcd_y_offset - 2, ui->lcd_width + 4, ui->lcd_height + 4 ); */
|
||||
/* cairo_fill (cr); */
|
||||
|
||||
/* cairo_surface_destroy( surface ); */
|
||||
/* cairo_destroy( cr ); */
|
||||
}
|
||||
|
||||
static int gui_load( x49gp_module_t* module, GKeyFile* keyfile )
|
||||
{
|
||||
x49gp_t* x49gp = module->x49gp;
|
||||
x49gp_ui_t* ui = module->user_data;
|
||||
|
||||
/* create all colors */
|
||||
init_colors( ui );
|
||||
|
||||
/* set calculator type and name */
|
||||
switch ( opt.model ) {
|
||||
|
@ -3805,29 +3865,7 @@ static int gui_load( x49gp_module_t* module, GKeyFile* keyfile )
|
|||
break;
|
||||
}
|
||||
|
||||
/* Load faceplate base texture */
|
||||
GError* gerror = NULL;
|
||||
char* faceplate_texture_data;
|
||||
int fd = x49gp_module_open_rodata( module,
|
||||
ui->calculator == UI_CALCULATOR_HP49GP || ui->calculator == UI_CALCULATOR_HP49GP_NEWRPL
|
||||
? "hp49g+-cropped.png"
|
||||
: "blank.png" /* "hp50g-cropped.png" */,
|
||||
&faceplate_texture_data );
|
||||
if ( fd < 0 )
|
||||
return fd;
|
||||
|
||||
ui->bg_pixbuf = gdk_pixbuf_new_from_file( faceplate_texture_data, &gerror );
|
||||
|
||||
/* set ui->width and ui->height based on faceplate_texture_data dimensions */
|
||||
gdk_pixbuf_get_file_info( faceplate_texture_data, &ui->width, &ui->height );
|
||||
close( fd );
|
||||
|
||||
/* set coordinates of LCD and keyboard */
|
||||
ui->lcd_width = 131 * LCD_PIXEL_SCALE;
|
||||
ui->lcd_annunciators_height = 16;
|
||||
ui->lcd_height = ( 80 * LCD_PIXEL_SCALE ) + ui->lcd_annunciators_height;
|
||||
ui->lcd_x_offset = ( ui->width - ui->lcd_width ) / 2;
|
||||
ui->lcd_y_offset = 48; // 69;
|
||||
setup_faceplate( ui );
|
||||
|
||||
ui->kb_x_offset = 10; // 36;
|
||||
ui->kb_y_offset = ui->lcd_y_offset + ui->lcd_height + 56; // 280; // 301;
|
||||
|
|
Loading…
Reference in a new issue