same treatment to ui_sdl
This commit is contained in:
parent
465761bc87
commit
7ea781c428
1 changed files with 299 additions and 385 deletions
684
src/ui_sdl.c
684
src/ui_sdl.c
|
@ -305,8 +305,7 @@ static inline unsigned bgra2argb( unsigned color )
|
||||||
/*
|
/*
|
||||||
Create a surface from binary bitmap data
|
Create a surface from binary bitmap data
|
||||||
*/
|
*/
|
||||||
static SDL_Surface* SDLCreateSurfFromData( unsigned int w, unsigned int h, unsigned char* data, unsigned int coloron,
|
static SDL_Surface* bitmap_to_surface( unsigned int w, unsigned int h, unsigned char* data, unsigned int coloron, unsigned int coloroff )
|
||||||
unsigned int coloroff )
|
|
||||||
{
|
{
|
||||||
unsigned int x, y;
|
unsigned int x, y;
|
||||||
SDL_Surface* surf;
|
SDL_Surface* surf;
|
||||||
|
@ -339,14 +338,14 @@ static SDL_Surface* SDLCreateSurfFromData( unsigned int w, unsigned int h, unsig
|
||||||
return surf;
|
return surf;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SDLDrawSmallString( int x, int y, const char* string, unsigned int length, unsigned int coloron, unsigned int coloroff )
|
static void write_text( int x, int y, const char* string, unsigned int length, unsigned int coloron, unsigned int coloroff )
|
||||||
{
|
{
|
||||||
for ( unsigned int i = 0; i < length; i++ ) {
|
for ( unsigned int i = 0; i < length; i++ ) {
|
||||||
if ( small_font[ ( int )string[ i ] ].h != 0 ) {
|
if ( small_font[ ( int )string[ i ] ].h != 0 ) {
|
||||||
int w = small_font[ ( int )string[ i ] ].w;
|
int w = small_font[ ( int )string[ i ] ].w;
|
||||||
int h = small_font[ ( int )string[ i ] ].h;
|
int h = small_font[ ( int )string[ i ] ].h;
|
||||||
|
|
||||||
SDL_Surface* surf = SDLCreateSurfFromData( w, h, small_font[ ( int )string[ i ] ].bits, coloron, coloroff );
|
SDL_Surface* surf = bitmap_to_surface( w, h, small_font[ ( int )string[ i ] ].bits, coloron, coloroff );
|
||||||
|
|
||||||
SDL_Rect srect;
|
SDL_Rect srect;
|
||||||
SDL_Rect drect;
|
SDL_Rect drect;
|
||||||
|
@ -365,58 +364,7 @@ static void SDLDrawSmallString( int x, int y, const char* string, unsigned int l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SDLInit( void )
|
static void colors_setup( void )
|
||||||
{
|
|
||||||
unsigned int width, height;
|
|
||||||
|
|
||||||
// Initialize SDL
|
|
||||||
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) {
|
|
||||||
printf( "Couldn't initialize SDL: %s\n", SDL_GetError() );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
// On exit: clean SDL
|
|
||||||
atexit( SDL_Quit );
|
|
||||||
|
|
||||||
// Initialize the geometric values
|
|
||||||
KEYBOARD_HEIGHT = _KEYBOARD_HEIGHT;
|
|
||||||
KEYBOARD_WIDTH = _KEYBOARD_WIDTH;
|
|
||||||
TOP_SKIP = _TOP_SKIP;
|
|
||||||
SIDE_SKIP = _SIDE_SKIP;
|
|
||||||
BOTTOM_SKIP = _BOTTOM_SKIP;
|
|
||||||
DISP_KBD_SKIP = _DISP_KBD_SKIP;
|
|
||||||
DISPLAY_WIDTH = _DISPLAY_WIDTH;
|
|
||||||
DISPLAY_HEIGHT = _DISPLAY_HEIGHT;
|
|
||||||
DISPLAY_OFFSET_X = _DISPLAY_OFFSET_X;
|
|
||||||
DISPLAY_OFFSET_Y = _DISPLAY_OFFSET_Y;
|
|
||||||
DISP_FRAME = _DISP_FRAME;
|
|
||||||
KEYBOARD_OFFSET_X = _KEYBOARD_OFFSET_X;
|
|
||||||
KEYBOARD_OFFSET_Y = _KEYBOARD_OFFSET_Y;
|
|
||||||
KBD_UPLINE = _KBD_UPLINE;
|
|
||||||
|
|
||||||
if ( config.hide_chrome ) {
|
|
||||||
width = DISPLAY_WIDTH;
|
|
||||||
height = DISPLAY_HEIGHT;
|
|
||||||
DISPLAY_OFFSET_X = 0;
|
|
||||||
DISPLAY_OFFSET_Y = 0;
|
|
||||||
} else {
|
|
||||||
width = ( buttons_gx[ LAST_HPKEY ].x + buttons_gx[ LAST_HPKEY ].w ) + 2 * SIDE_SKIP;
|
|
||||||
height = DISPLAY_OFFSET_Y + DISPLAY_HEIGHT + DISP_KBD_SKIP + buttons_gx[ LAST_HPKEY ].y + buttons_gx[ LAST_HPKEY ].h + BOTTOM_SKIP;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t sdl_window_flags = SDL_SWSURFACE | SDL_RESIZABLE;
|
|
||||||
if ( config.show_ui_fullscreen )
|
|
||||||
sdl_window_flags |= SDL_FULLSCREEN;
|
|
||||||
|
|
||||||
sdlwindow = SDL_SetVideoMode( width, height, 32, sdl_window_flags );
|
|
||||||
|
|
||||||
if ( sdlwindow == NULL ) {
|
|
||||||
printf( "Couldn't set video mode: %s\n", SDL_GetError() );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void SDLCreateColors( void )
|
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
|
@ -440,7 +388,7 @@ static void SDLCreateColors( void )
|
||||||
|
|
||||||
// This should be called once to setup the surfaces. Calling it multiple
|
// This should be called once to setup the surfaces. Calling it multiple
|
||||||
// times is fine, it won't do anything on subsequent calls.
|
// times is fine, it won't do anything on subsequent calls.
|
||||||
static void SDLCreateAnnunc( void )
|
static void create_annunc( void )
|
||||||
{
|
{
|
||||||
for ( int i = 0; i < NB_ANNUNCIATORS; i++ ) {
|
for ( int i = 0; i < NB_ANNUNCIATORS; i++ ) {
|
||||||
// If the SDL surface does not exist yet, we create it on the fly
|
// If the SDL surface does not exist yet, we create it on the fly
|
||||||
|
@ -450,7 +398,7 @@ static void SDLCreateAnnunc( void )
|
||||||
}
|
}
|
||||||
|
|
||||||
ann_tbl[ i ].surfaceon =
|
ann_tbl[ i ].surfaceon =
|
||||||
SDLCreateSurfFromData( ann_tbl[ i ].width, ann_tbl[ i ].height, ann_tbl[ i ].bits, ARGBColors[ PIXEL ], ARGBColors[ LCD ] );
|
bitmap_to_surface( ann_tbl[ i ].width, ann_tbl[ i ].height, ann_tbl[ i ].bits, ARGBColors[ PIXEL ], ARGBColors[ LCD ] );
|
||||||
|
|
||||||
if ( ann_tbl[ i ].surfaceoff ) {
|
if ( ann_tbl[ i ].surfaceoff ) {
|
||||||
SDL_FreeSurface( ann_tbl[ i ].surfaceoff );
|
SDL_FreeSurface( ann_tbl[ i ].surfaceoff );
|
||||||
|
@ -458,13 +406,13 @@ static void SDLCreateAnnunc( void )
|
||||||
}
|
}
|
||||||
|
|
||||||
ann_tbl[ i ].surfaceoff =
|
ann_tbl[ i ].surfaceoff =
|
||||||
SDLCreateSurfFromData( ann_tbl[ i ].width, ann_tbl[ i ].height, ann_tbl[ i ].bits, ARGBColors[ LCD ], ARGBColors[ LCD ] );
|
bitmap_to_surface( ann_tbl[ i ].width, ann_tbl[ i ].height, ann_tbl[ i ].bits, ARGBColors[ LCD ], ARGBColors[ LCD ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find which key is pressed, if any.
|
// Find which key is pressed, if any.
|
||||||
// Returns -1 is no key is pressed
|
// Returns -1 is no key is pressed
|
||||||
static int SDLCoordinateToKey( unsigned int x, unsigned int y )
|
static int mouse_click_to_hpkey( unsigned int x, unsigned int y )
|
||||||
{
|
{
|
||||||
/* return immediatly if the click isn't even in the keyboard area */
|
/* return immediatly if the click isn't even in the keyboard area */
|
||||||
if ( y < KEYBOARD_OFFSET_Y )
|
if ( y < KEYBOARD_OFFSET_Y )
|
||||||
|
@ -500,7 +448,7 @@ static int SDLCoordinateToKey( unsigned int x, unsigned int y )
|
||||||
|
|
||||||
// Map the keyboard keys to the HP keys
|
// Map the keyboard keys to the HP keys
|
||||||
// Returns -1 if there is no mapping
|
// Returns -1 if there is no mapping
|
||||||
static int SDLKeyToKey( SDLKey k )
|
static int sdlkey_to_hpkey( SDLKey k )
|
||||||
{
|
{
|
||||||
switch ( k ) {
|
switch ( k ) {
|
||||||
case SDLK_0:
|
case SDLK_0:
|
||||||
|
@ -733,7 +681,7 @@ static int SDLKeyToKey( SDLKey k )
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SDLDrawMore( unsigned int cut, unsigned int offset_y, int keypad_width, int keypad_height )
|
static void draw_bezel( unsigned int cut, unsigned int offset_y, int keypad_width, int keypad_height )
|
||||||
{
|
{
|
||||||
// bottom lines
|
// bottom lines
|
||||||
lineColor( sdlwindow, 1, keypad_height - 1, keypad_width - 1, keypad_height - 1, bgra2argb( ARGBColors[ PAD_TOP ] ) );
|
lineColor( sdlwindow, 1, keypad_height - 1, keypad_width - 1, keypad_height - 1, bgra2argb( ARGBColors[ PAD_TOP ] ) );
|
||||||
|
@ -822,7 +770,7 @@ static void SDLDrawMore( unsigned int cut, unsigned int offset_y, int keypad_wid
|
||||||
lineColor( sdlwindow, 7, keypad_height - 9, 7, keypad_height - 11, bgra2argb( ARGBColors[ PAD_BOT ] ) );
|
lineColor( sdlwindow, 7, keypad_height - 9, 7, keypad_height - 11, bgra2argb( ARGBColors[ PAD_BOT ] ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SDLDrawLogo( void )
|
static void draw_header( void )
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
SDL_Surface* surf;
|
SDL_Surface* surf;
|
||||||
|
@ -830,7 +778,7 @@ static void SDLDrawLogo( void )
|
||||||
int display_width = DISPLAY_WIDTH;
|
int display_width = DISPLAY_WIDTH;
|
||||||
|
|
||||||
// insert the HP Logo
|
// insert the HP Logo
|
||||||
surf = SDLCreateSurfFromData( hp_width, hp_height, hp_bitmap, ARGBColors[ LOGO ], ARGBColors[ LOGO_BACK ] );
|
surf = bitmap_to_surface( hp_width, hp_height, hp_bitmap, ARGBColors[ LOGO ], ARGBColors[ LOGO_BACK ] );
|
||||||
if ( opt_gx )
|
if ( opt_gx )
|
||||||
x = DISPLAY_OFFSET_X - 6;
|
x = DISPLAY_OFFSET_X - 6;
|
||||||
else
|
else
|
||||||
|
@ -864,8 +812,7 @@ static void SDLDrawLogo( void )
|
||||||
x = DISPLAY_OFFSET_X + display_width - gx_128K_ram_width + gx_128K_ram_x_hot + 2;
|
x = DISPLAY_OFFSET_X + display_width - gx_128K_ram_width + gx_128K_ram_x_hot + 2;
|
||||||
y = 10 + gx_128K_ram_y_hot;
|
y = 10 + gx_128K_ram_y_hot;
|
||||||
|
|
||||||
surf =
|
surf = bitmap_to_surface( gx_128K_ram_width, gx_128K_ram_height, gx_128K_ram_bitmap, ARGBColors[ LABEL ], ARGBColors[ DISP_PAD ] );
|
||||||
SDLCreateSurfFromData( gx_128K_ram_width, gx_128K_ram_height, gx_128K_ram_bitmap, ARGBColors[ LABEL ], ARGBColors[ DISP_PAD ] );
|
|
||||||
srect.x = 0;
|
srect.x = 0;
|
||||||
srect.y = 0;
|
srect.y = 0;
|
||||||
srect.w = gx_128K_ram_width;
|
srect.w = gx_128K_ram_width;
|
||||||
|
@ -879,7 +826,7 @@ static void SDLDrawLogo( void )
|
||||||
|
|
||||||
x = DISPLAY_OFFSET_X + hp_width;
|
x = DISPLAY_OFFSET_X + hp_width;
|
||||||
y = hp_height + 8 - hp48gx_height;
|
y = hp_height + 8 - hp48gx_height;
|
||||||
surf = SDLCreateSurfFromData( hp48gx_width, hp48gx_height, hp48gx_bitmap, ARGBColors[ LOGO ], ARGBColors[ DISP_PAD ] );
|
surf = bitmap_to_surface( hp48gx_width, hp48gx_height, hp48gx_bitmap, ARGBColors[ LOGO ], ARGBColors[ DISP_PAD ] );
|
||||||
srect.x = 0;
|
srect.x = 0;
|
||||||
srect.y = 0;
|
srect.y = 0;
|
||||||
srect.w = hp48gx_width;
|
srect.w = hp48gx_width;
|
||||||
|
@ -893,8 +840,8 @@ static void SDLDrawLogo( void )
|
||||||
|
|
||||||
x = DISPLAY_OFFSET_X + DISPLAY_WIDTH - gx_128K_ram_width + gx_silver_x_hot + 2;
|
x = DISPLAY_OFFSET_X + DISPLAY_WIDTH - gx_128K_ram_width + gx_silver_x_hot + 2;
|
||||||
y = 10 + gx_silver_y_hot;
|
y = 10 + gx_silver_y_hot;
|
||||||
surf = SDLCreateSurfFromData( gx_silver_width, gx_silver_height, gx_silver_bitmap, ARGBColors[ LOGO ],
|
surf = bitmap_to_surface( gx_silver_width, gx_silver_height, gx_silver_bitmap, ARGBColors[ LOGO ],
|
||||||
0 ); // Background transparent: draw only silver line
|
0 ); // Background transparent: draw only silver line
|
||||||
srect.x = 0;
|
srect.x = 0;
|
||||||
srect.y = 0;
|
srect.y = 0;
|
||||||
srect.w = gx_silver_width;
|
srect.w = gx_silver_width;
|
||||||
|
@ -908,8 +855,8 @@ static void SDLDrawLogo( void )
|
||||||
|
|
||||||
x = DISPLAY_OFFSET_X + display_width - gx_128K_ram_width + gx_green_x_hot + 2;
|
x = DISPLAY_OFFSET_X + display_width - gx_128K_ram_width + gx_green_x_hot + 2;
|
||||||
y = 10 + gx_green_y_hot;
|
y = 10 + gx_green_y_hot;
|
||||||
surf = SDLCreateSurfFromData( gx_green_width, gx_green_height, gx_green_bitmap, ARGBColors[ RIGHT ],
|
surf = bitmap_to_surface( gx_green_width, gx_green_height, gx_green_bitmap, ARGBColors[ RIGHT ],
|
||||||
0 ); // Background transparent: draw only green menu
|
0 ); // Background transparent: draw only green menu
|
||||||
srect.x = 0;
|
srect.x = 0;
|
||||||
srect.y = 0;
|
srect.y = 0;
|
||||||
srect.w = gx_green_width;
|
srect.w = gx_green_width;
|
||||||
|
@ -923,8 +870,8 @@ static void SDLDrawLogo( void )
|
||||||
} else {
|
} else {
|
||||||
x = DISPLAY_OFFSET_X;
|
x = DISPLAY_OFFSET_X;
|
||||||
y = TOP_SKIP - DISP_FRAME - hp48sx_height - 3;
|
y = TOP_SKIP - DISP_FRAME - hp48sx_height - 3;
|
||||||
surf = SDLCreateSurfFromData( hp48sx_width, hp48sx_height, hp48sx_bitmap, ARGBColors[ RIGHT ],
|
surf = bitmap_to_surface( hp48sx_width, hp48sx_height, hp48sx_bitmap, ARGBColors[ RIGHT ],
|
||||||
0 ); // Background transparent: draw only green menu
|
0 ); // Background transparent: draw only green menu
|
||||||
srect.x = 0;
|
srect.x = 0;
|
||||||
srect.y = 0;
|
srect.y = 0;
|
||||||
srect.w = hp48sx_width;
|
srect.w = hp48sx_width;
|
||||||
|
@ -938,8 +885,8 @@ static void SDLDrawLogo( void )
|
||||||
|
|
||||||
x = DISPLAY_OFFSET_X + display_width - 1 - science_width;
|
x = DISPLAY_OFFSET_X + display_width - 1 - science_width;
|
||||||
y = TOP_SKIP - DISP_FRAME - science_height - 4;
|
y = TOP_SKIP - DISP_FRAME - science_height - 4;
|
||||||
surf = SDLCreateSurfFromData( science_width, science_height, science_bitmap, ARGBColors[ RIGHT ],
|
surf = bitmap_to_surface( science_width, science_height, science_bitmap, ARGBColors[ RIGHT ],
|
||||||
0 ); // Background transparent: draw only green menu
|
0 ); // Background transparent: draw only green menu
|
||||||
srect.x = 0;
|
srect.x = 0;
|
||||||
srect.y = 0;
|
srect.y = 0;
|
||||||
srect.w = science_width;
|
srect.w = science_width;
|
||||||
|
@ -953,7 +900,7 @@ static void SDLDrawLogo( void )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SDLCreateKeys( void )
|
static void _create_buttons( void )
|
||||||
{
|
{
|
||||||
unsigned i, x, y;
|
unsigned i, x, y;
|
||||||
unsigned pixel;
|
unsigned pixel;
|
||||||
|
@ -1097,7 +1044,7 @@ static void SDLCreateKeys( void )
|
||||||
|
|
||||||
// Blit the label surface to the button
|
// Blit the label surface to the button
|
||||||
SDL_Surface* surf;
|
SDL_Surface* surf;
|
||||||
surf = SDLCreateSurfFromData( buttons[ i ].lw, buttons[ i ].lh, buttons[ i ].lb, colorfg, colorbg );
|
surf = bitmap_to_surface( buttons[ i ].lw, buttons[ i ].lh, buttons[ i ].lb, colorfg, colorbg );
|
||||||
// Draw the surface on the center of the button
|
// Draw the surface on the center of the button
|
||||||
x = ( 1 + buttons[ i ].w - buttons[ i ].lw ) / 2;
|
x = ( 1 + buttons[ i ].w - buttons[ i ].lw ) / 2;
|
||||||
y = ( 1 + buttons[ i ].h - buttons[ i ].lh ) / 2 + 1;
|
y = ( 1 + buttons[ i ].h - buttons[ i ].lh ) / 2 + 1;
|
||||||
|
@ -1118,243 +1065,7 @@ static void SDLCreateKeys( void )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw the left labels (violet on GX)
|
static void draw_buttons( void )
|
||||||
static void SDLDrawKeysLabelsLeft( void )
|
|
||||||
{
|
|
||||||
int i, x, y;
|
|
||||||
unsigned int pw /* , ph */;
|
|
||||||
int wl, wr, ws;
|
|
||||||
int offset_y = KEYBOARD_OFFSET_Y;
|
|
||||||
int offset_x = KEYBOARD_OFFSET_X;
|
|
||||||
|
|
||||||
unsigned colorbg, colorfg;
|
|
||||||
|
|
||||||
// Draw the left labels
|
|
||||||
for ( i = FIRST_HPKEY; i <= LAST_HPKEY; i++ ) {
|
|
||||||
// No label -> skip
|
|
||||||
if ( buttons[ i ].left == ( char* )0 )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if ( buttons[ i ].is_menu ) {
|
|
||||||
// draw the dark shade under the label
|
|
||||||
|
|
||||||
if ( opt_gx ) {
|
|
||||||
pw = 58;
|
|
||||||
} else {
|
|
||||||
pw = 46;
|
|
||||||
}
|
|
||||||
|
|
||||||
colorbg = ARGBColors[ UNDERLAY ];
|
|
||||||
colorfg = ARGBColors[ LEFT ];
|
|
||||||
|
|
||||||
x = ( pw + 1 - SmallTextWidth( buttons[ i ].left, strlen( buttons[ i ].left ) ) ) / 2;
|
|
||||||
if ( opt_gx )
|
|
||||||
y = 14;
|
|
||||||
else
|
|
||||||
y = 9;
|
|
||||||
|
|
||||||
// Set the coordinates to absolute
|
|
||||||
if ( opt_gx ) {
|
|
||||||
x += offset_x + buttons[ i ].x - 6;
|
|
||||||
y += offset_y + buttons[ i ].y - small_ascent - small_descent - 6;
|
|
||||||
} else {
|
|
||||||
x += offset_x + buttons[ i ].x + ( buttons[ i ].w - pw ) / 2;
|
|
||||||
y += offset_y + buttons[ i ].y - small_ascent - small_descent;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDLDrawSmallString( x, y, buttons[ i ].left, strlen( buttons[ i ].left ), colorfg, colorbg );
|
|
||||||
} else // is_menu
|
|
||||||
{
|
|
||||||
colorbg = ARGBColors[ BLACK ];
|
|
||||||
colorfg = ARGBColors[ LEFT ];
|
|
||||||
|
|
||||||
if ( buttons[ i ].right == ( char* )0 ) {
|
|
||||||
// centered label
|
|
||||||
x = offset_x + buttons[ i ].x +
|
|
||||||
( 1 + buttons[ i ].w - SmallTextWidth( buttons[ i ].left, strlen( buttons[ i ].left ) ) ) / 2;
|
|
||||||
} else {
|
|
||||||
// label to the left
|
|
||||||
wl = SmallTextWidth( buttons[ i ].left, strlen( buttons[ i ].left ) );
|
|
||||||
wr = SmallTextWidth( buttons[ i ].right, strlen( buttons[ i ].right ) );
|
|
||||||
ws = SmallTextWidth( " ", 1 );
|
|
||||||
|
|
||||||
x = offset_x + buttons[ i ].x + ( 1 + buttons[ i ].w - ( wl + wr + ws ) ) / 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
y = offset_y + buttons[ i ].y - small_descent;
|
|
||||||
|
|
||||||
SDLDrawSmallString( x, y, buttons[ i ].left, strlen( buttons[ i ].left ), colorfg, colorbg );
|
|
||||||
} // is_menu
|
|
||||||
|
|
||||||
} // for
|
|
||||||
}
|
|
||||||
|
|
||||||
// Draw the right labels (green on GX)
|
|
||||||
static void SDLDrawKeysLabelsRight( void )
|
|
||||||
{
|
|
||||||
int i, x, y;
|
|
||||||
unsigned int pw /* , ph */;
|
|
||||||
int wl, wr, ws;
|
|
||||||
int offset_y = KEYBOARD_OFFSET_Y;
|
|
||||||
int offset_x = KEYBOARD_OFFSET_X;
|
|
||||||
unsigned colorbg, colorfg;
|
|
||||||
|
|
||||||
// draw the right labels
|
|
||||||
for ( i = FIRST_HPKEY; i <= LAST_HPKEY; i++ ) {
|
|
||||||
if ( buttons[ i ].right == ( char* )0 )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if ( buttons[ i ].is_menu ) {
|
|
||||||
// draw the dark shade under the label
|
|
||||||
if ( opt_gx ) {
|
|
||||||
pw = 58;
|
|
||||||
} else {
|
|
||||||
pw = 44;
|
|
||||||
}
|
|
||||||
|
|
||||||
colorbg = ARGBColors[ UNDERLAY ];
|
|
||||||
colorfg = ARGBColors[ RIGHT ];
|
|
||||||
|
|
||||||
x = ( pw + 1 - SmallTextWidth( buttons[ i ].right, strlen( buttons[ i ].right ) ) ) / 2;
|
|
||||||
if ( opt_gx )
|
|
||||||
y = 14;
|
|
||||||
else
|
|
||||||
y = 8;
|
|
||||||
|
|
||||||
// Set the coordinates to absolute
|
|
||||||
if ( opt_gx ) {
|
|
||||||
x += offset_x + buttons[ i ].x - 6;
|
|
||||||
y += offset_y + buttons[ i ].y - small_ascent - small_descent - 6;
|
|
||||||
} else {
|
|
||||||
x += offset_x + buttons[ i ].x + ( buttons[ i ].w - pw ) / 2;
|
|
||||||
y += offset_y + buttons[ i ].y - small_ascent - small_descent;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDLDrawSmallString( x, y, buttons[ i ].right, strlen( buttons[ i ].right ), colorfg, colorbg );
|
|
||||||
} // buttons[i].is_menu
|
|
||||||
else {
|
|
||||||
colorbg = ARGBColors[ BLACK ];
|
|
||||||
colorfg = ARGBColors[ RIGHT ];
|
|
||||||
|
|
||||||
if ( buttons[ i ].left == ( char* )0 ) {
|
|
||||||
// centered label
|
|
||||||
x = offset_x + buttons[ i ].x +
|
|
||||||
( 1 + buttons[ i ].w - SmallTextWidth( buttons[ i ].right, strlen( buttons[ i ].right ) ) ) / 2;
|
|
||||||
} else {
|
|
||||||
// label to the right
|
|
||||||
wl = SmallTextWidth( buttons[ i ].left, strlen( buttons[ i ].left ) );
|
|
||||||
wr = SmallTextWidth( buttons[ i ].right, strlen( buttons[ i ].right ) );
|
|
||||||
ws = SmallTextWidth( " ", 1 );
|
|
||||||
|
|
||||||
x = offset_x + buttons[ i ].x + ( 1 + buttons[ i ].w - ( wl + wr + ws ) ) / 2 + wl + ws;
|
|
||||||
}
|
|
||||||
|
|
||||||
y = offset_y + buttons[ i ].y - small_descent;
|
|
||||||
|
|
||||||
SDLDrawSmallString( x, y, buttons[ i ].right, strlen( buttons[ i ].right ), colorfg, colorbg );
|
|
||||||
}
|
|
||||||
|
|
||||||
} // for
|
|
||||||
}
|
|
||||||
|
|
||||||
// Draw the letter bottom right of the keys
|
|
||||||
static void SDLDrawKeysLetters( void )
|
|
||||||
{
|
|
||||||
int i, x, y;
|
|
||||||
int offset_y = KEYBOARD_OFFSET_Y;
|
|
||||||
int offset_x = KEYBOARD_OFFSET_X;
|
|
||||||
unsigned colorbg;
|
|
||||||
|
|
||||||
for ( i = FIRST_HPKEY; i <= LAST_HPKEY; i++ ) {
|
|
||||||
|
|
||||||
if ( i < HPKEY_MTH )
|
|
||||||
colorbg = ARGBColors[ DISP_PAD ];
|
|
||||||
else
|
|
||||||
colorbg = ARGBColors[ PAD ];
|
|
||||||
|
|
||||||
// Letter ( small character bottom right of key)
|
|
||||||
if ( buttons[ i ].letter != ( char* )0 ) {
|
|
||||||
if ( opt_gx ) {
|
|
||||||
x = offset_x + buttons[ i ].x + buttons[ i ].w + 3;
|
|
||||||
y = offset_y + buttons[ i ].y + buttons[ i ].h + 1;
|
|
||||||
} else {
|
|
||||||
x = offset_x + buttons[ i ].x + buttons[ i ].w - SmallTextWidth( buttons[ i ].letter, 1 ) / 2 + 5;
|
|
||||||
y = offset_y + buttons[ i ].y + buttons[ i ].h - 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDLDrawSmallString( x, y, buttons[ i ].letter, 1, 0xffffffff, colorbg );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bottom label: the only one is the cancel button
|
|
||||||
static void SDLDrawKeysLabelsBottom( void )
|
|
||||||
{
|
|
||||||
int i, x, y;
|
|
||||||
int offset_y = KEYBOARD_OFFSET_Y;
|
|
||||||
int offset_x = KEYBOARD_OFFSET_X;
|
|
||||||
unsigned colorbg, colorfg;
|
|
||||||
|
|
||||||
// Bottom label: the only one is the cancel button
|
|
||||||
for ( i = FIRST_HPKEY; i <= LAST_HPKEY; i++ ) {
|
|
||||||
if ( buttons[ i ].sub == ( char* )0 )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if ( i < HPKEY_MTH )
|
|
||||||
colorbg = ARGBColors[ DISP_PAD ];
|
|
||||||
else
|
|
||||||
colorbg = ARGBColors[ PAD ];
|
|
||||||
|
|
||||||
colorfg = ARGBColors[ WHITE ];
|
|
||||||
|
|
||||||
x = offset_x + buttons[ i ].x + ( 1 + buttons[ i ].w - SmallTextWidth( buttons[ i ].sub, strlen( buttons[ i ].sub ) ) ) / 2;
|
|
||||||
y = offset_y + buttons[ i ].y + buttons[ i ].h + small_ascent + 2;
|
|
||||||
SDLDrawSmallString( x, y, buttons[ i ].sub, strlen( buttons[ i ].sub ), colorfg, colorbg );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Draws the greyish area around keys that trigger menus
|
|
||||||
static void SDLDrawKeyMenu( void )
|
|
||||||
{
|
|
||||||
int i, x, y;
|
|
||||||
int offset_y = KEYBOARD_OFFSET_Y;
|
|
||||||
int offset_x = KEYBOARD_OFFSET_X;
|
|
||||||
SDL_Rect rect;
|
|
||||||
unsigned color;
|
|
||||||
unsigned pw, ph;
|
|
||||||
|
|
||||||
for ( i = FIRST_HPKEY; i <= LAST_HPKEY; i++ ) {
|
|
||||||
if ( !buttons[ i ].is_menu )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// draw the dark shade under the label
|
|
||||||
if ( opt_gx ) {
|
|
||||||
pw = 58;
|
|
||||||
ph = 48;
|
|
||||||
} else {
|
|
||||||
pw = 44;
|
|
||||||
ph = 9;
|
|
||||||
}
|
|
||||||
color = ARGBColors[ UNDERLAY ];
|
|
||||||
|
|
||||||
// Set the coordinates to absolute
|
|
||||||
if ( opt_gx ) {
|
|
||||||
x = offset_x + buttons[ i ].x - 6;
|
|
||||||
y = offset_y + buttons[ i ].y - small_ascent - small_descent - 6;
|
|
||||||
} else {
|
|
||||||
x = offset_x + buttons[ i ].x + ( buttons[ i ].w - pw ) / 2;
|
|
||||||
y = offset_y + buttons[ i ].y - small_ascent - small_descent;
|
|
||||||
}
|
|
||||||
|
|
||||||
rect.x = x;
|
|
||||||
rect.y = y;
|
|
||||||
rect.w = pw;
|
|
||||||
rect.h = ph;
|
|
||||||
SDL_FillRect( sdlwindow, &rect, color );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void SDLDrawButtons( void )
|
|
||||||
{
|
{
|
||||||
SDL_Rect srect, drect;
|
SDL_Rect srect, drect;
|
||||||
|
|
||||||
|
@ -1380,18 +1091,191 @@ static void SDLDrawButtons( void )
|
||||||
buttons[ LAST_HPKEY ].y + buttons[ LAST_HPKEY ].h - buttons[ 0 ].y );
|
buttons[ LAST_HPKEY ].y + buttons[ LAST_HPKEY ].h - buttons[ 0 ].y );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SDLDrawKeypad( void )
|
static void draw_keypad( void )
|
||||||
{
|
{
|
||||||
SDLDrawKeyMenu();
|
int i, x, y;
|
||||||
SDLDrawKeysLetters();
|
int offset_y = KEYBOARD_OFFSET_Y;
|
||||||
SDLDrawKeysLabelsBottom();
|
int offset_x = KEYBOARD_OFFSET_X;
|
||||||
SDLDrawKeysLabelsLeft();
|
SDL_Rect rect;
|
||||||
SDLDrawKeysLabelsRight();
|
unsigned color;
|
||||||
SDLCreateKeys();
|
unsigned pw, ph;
|
||||||
SDLDrawButtons();
|
unsigned colorbg, colorfg;
|
||||||
|
int wl, wr, ws;
|
||||||
|
|
||||||
|
_create_buttons();
|
||||||
|
|
||||||
|
// SDLDrawKeyMenu();
|
||||||
|
for ( i = FIRST_HPKEY; i <= LAST_HPKEY; i++ ) {
|
||||||
|
if ( buttons[ i ].is_menu ) {
|
||||||
|
// draw the dark shade under the label
|
||||||
|
if ( opt_gx ) {
|
||||||
|
pw = 58;
|
||||||
|
ph = 48;
|
||||||
|
} else {
|
||||||
|
pw = 44;
|
||||||
|
ph = 9;
|
||||||
|
}
|
||||||
|
color = ARGBColors[ UNDERLAY ];
|
||||||
|
|
||||||
|
// Set the coordinates to absolute
|
||||||
|
if ( opt_gx ) {
|
||||||
|
x = offset_x + buttons[ i ].x - 6;
|
||||||
|
y = offset_y + buttons[ i ].y - small_ascent - small_descent - 6;
|
||||||
|
} else {
|
||||||
|
x = offset_x + buttons[ i ].x + ( buttons[ i ].w - pw ) / 2;
|
||||||
|
y = offset_y + buttons[ i ].y - small_ascent - small_descent;
|
||||||
|
}
|
||||||
|
|
||||||
|
rect.x = x;
|
||||||
|
rect.y = y;
|
||||||
|
rect.w = pw;
|
||||||
|
rect.h = ph;
|
||||||
|
SDL_FillRect( sdlwindow, &rect, color );
|
||||||
|
}
|
||||||
|
|
||||||
|
// SDLDrawKeysLetters();
|
||||||
|
if ( i < HPKEY_MTH )
|
||||||
|
colorbg = ARGBColors[ DISP_PAD ];
|
||||||
|
else
|
||||||
|
colorbg = ARGBColors[ PAD ];
|
||||||
|
|
||||||
|
// Letter ( small character bottom right of key)
|
||||||
|
if ( buttons[ i ].letter != ( char* )0 ) {
|
||||||
|
if ( opt_gx ) {
|
||||||
|
x = offset_x + buttons[ i ].x + buttons[ i ].w + 3;
|
||||||
|
y = offset_y + buttons[ i ].y + buttons[ i ].h + 1;
|
||||||
|
} else {
|
||||||
|
x = offset_x + buttons[ i ].x + buttons[ i ].w - SmallTextWidth( buttons[ i ].letter, 1 ) / 2 + 5;
|
||||||
|
y = offset_y + buttons[ i ].y + buttons[ i ].h - 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
write_text( x, y, buttons[ i ].letter, 1, 0xffffffff, colorbg );
|
||||||
|
}
|
||||||
|
|
||||||
|
// SDLDrawKeysLabelsBottom();
|
||||||
|
// Bottom label: the only one is the cancel button
|
||||||
|
if ( buttons[ i ].sub != ( char* )0 ) {
|
||||||
|
colorfg = ARGBColors[ WHITE ];
|
||||||
|
|
||||||
|
x = offset_x + buttons[ i ].x + ( 1 + buttons[ i ].w - SmallTextWidth( buttons[ i ].sub, strlen( buttons[ i ].sub ) ) ) / 2;
|
||||||
|
y = offset_y + buttons[ i ].y + buttons[ i ].h + small_ascent + 2;
|
||||||
|
write_text( x, y, buttons[ i ].sub, strlen( buttons[ i ].sub ), colorfg, colorbg );
|
||||||
|
}
|
||||||
|
|
||||||
|
// SDLDrawKeysLabelsLeft();
|
||||||
|
// Draw the left labels
|
||||||
|
if ( buttons[ i ].left != ( char* )0 ) {
|
||||||
|
if ( buttons[ i ].is_menu ) {
|
||||||
|
// draw the dark shade under the label
|
||||||
|
|
||||||
|
if ( opt_gx ) {
|
||||||
|
pw = 58;
|
||||||
|
} else {
|
||||||
|
pw = 46;
|
||||||
|
}
|
||||||
|
|
||||||
|
colorbg = ARGBColors[ UNDERLAY ];
|
||||||
|
colorfg = ARGBColors[ LEFT ];
|
||||||
|
|
||||||
|
x = ( pw + 1 - SmallTextWidth( buttons[ i ].left, strlen( buttons[ i ].left ) ) ) / 2;
|
||||||
|
if ( opt_gx )
|
||||||
|
y = 14;
|
||||||
|
else
|
||||||
|
y = 9;
|
||||||
|
|
||||||
|
// Set the coordinates to absolute
|
||||||
|
if ( opt_gx ) {
|
||||||
|
x += offset_x + buttons[ i ].x - 6;
|
||||||
|
y += offset_y + buttons[ i ].y - small_ascent - small_descent - 6;
|
||||||
|
} else {
|
||||||
|
x += offset_x + buttons[ i ].x + ( buttons[ i ].w - pw ) / 2;
|
||||||
|
y += offset_y + buttons[ i ].y - small_ascent - small_descent;
|
||||||
|
}
|
||||||
|
|
||||||
|
write_text( x, y, buttons[ i ].left, strlen( buttons[ i ].left ), colorfg, colorbg );
|
||||||
|
} else // is_menu
|
||||||
|
{
|
||||||
|
colorbg = ARGBColors[ BLACK ];
|
||||||
|
colorfg = ARGBColors[ LEFT ];
|
||||||
|
|
||||||
|
if ( buttons[ i ].right == ( char* )0 ) {
|
||||||
|
// centered label
|
||||||
|
x = offset_x + buttons[ i ].x +
|
||||||
|
( 1 + buttons[ i ].w - SmallTextWidth( buttons[ i ].left, strlen( buttons[ i ].left ) ) ) / 2;
|
||||||
|
} else {
|
||||||
|
// label to the left
|
||||||
|
wl = SmallTextWidth( buttons[ i ].left, strlen( buttons[ i ].left ) );
|
||||||
|
wr = SmallTextWidth( buttons[ i ].right, strlen( buttons[ i ].right ) );
|
||||||
|
ws = SmallTextWidth( " ", 1 );
|
||||||
|
|
||||||
|
x = offset_x + buttons[ i ].x + ( 1 + buttons[ i ].w - ( wl + wr + ws ) ) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
y = offset_y + buttons[ i ].y - small_descent;
|
||||||
|
|
||||||
|
write_text( x, y, buttons[ i ].left, strlen( buttons[ i ].left ), colorfg, colorbg );
|
||||||
|
} // is_menu
|
||||||
|
}
|
||||||
|
|
||||||
|
// SDLDrawKeysLabelsRight();
|
||||||
|
// draw the right labels
|
||||||
|
if ( buttons[ i ].right != ( char* )0 ) {
|
||||||
|
if ( buttons[ i ].is_menu ) {
|
||||||
|
// draw the dark shade under the label
|
||||||
|
if ( opt_gx ) {
|
||||||
|
pw = 58;
|
||||||
|
} else {
|
||||||
|
pw = 44;
|
||||||
|
}
|
||||||
|
|
||||||
|
colorbg = ARGBColors[ UNDERLAY ];
|
||||||
|
colorfg = ARGBColors[ RIGHT ];
|
||||||
|
|
||||||
|
x = ( pw + 1 - SmallTextWidth( buttons[ i ].right, strlen( buttons[ i ].right ) ) ) / 2;
|
||||||
|
if ( opt_gx )
|
||||||
|
y = 14;
|
||||||
|
else
|
||||||
|
y = 8;
|
||||||
|
|
||||||
|
// Set the coordinates to absolute
|
||||||
|
if ( opt_gx ) {
|
||||||
|
x += offset_x + buttons[ i ].x - 6;
|
||||||
|
y += offset_y + buttons[ i ].y - small_ascent - small_descent - 6;
|
||||||
|
} else {
|
||||||
|
x += offset_x + buttons[ i ].x + ( buttons[ i ].w - pw ) / 2;
|
||||||
|
y += offset_y + buttons[ i ].y - small_ascent - small_descent;
|
||||||
|
}
|
||||||
|
|
||||||
|
write_text( x, y, buttons[ i ].right, strlen( buttons[ i ].right ), colorfg, colorbg );
|
||||||
|
} // buttons[i].is_menu
|
||||||
|
else {
|
||||||
|
colorbg = ARGBColors[ BLACK ];
|
||||||
|
colorfg = ARGBColors[ RIGHT ];
|
||||||
|
|
||||||
|
if ( buttons[ i ].left == ( char* )0 ) {
|
||||||
|
// centered label
|
||||||
|
x = offset_x + buttons[ i ].x +
|
||||||
|
( 1 + buttons[ i ].w - SmallTextWidth( buttons[ i ].right, strlen( buttons[ i ].right ) ) ) / 2;
|
||||||
|
} else {
|
||||||
|
// label to the right
|
||||||
|
wl = SmallTextWidth( buttons[ i ].left, strlen( buttons[ i ].left ) );
|
||||||
|
wr = SmallTextWidth( buttons[ i ].right, strlen( buttons[ i ].right ) );
|
||||||
|
ws = SmallTextWidth( " ", 1 );
|
||||||
|
|
||||||
|
x = offset_x + buttons[ i ].x + ( 1 + buttons[ i ].w - ( wl + wr + ws ) ) / 2 + wl + ws;
|
||||||
|
}
|
||||||
|
|
||||||
|
y = offset_y + buttons[ i ].y - small_descent;
|
||||||
|
|
||||||
|
write_text( x, y, buttons[ i ].right, strlen( buttons[ i ].right ), colorfg, colorbg );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_buttons();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SDLDrawBezel( void )
|
static void draw_bezel_LCD( void )
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int display_height = DISPLAY_HEIGHT;
|
int display_height = DISPLAY_HEIGHT;
|
||||||
|
@ -1457,7 +1341,7 @@ static void SDLDrawBezel( void )
|
||||||
DISPLAY_OFFSET_Y + display_height - 2, bgra2argb( ARGBColors[ LCD ] ) );
|
DISPLAY_OFFSET_Y + display_height - 2, bgra2argb( ARGBColors[ LCD ] ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SDLDrawBackground( int width, int height, int w_top, int h_top )
|
static void draw_background( int width, int height, int w_top, int h_top )
|
||||||
{
|
{
|
||||||
SDL_Rect rect;
|
SDL_Rect rect;
|
||||||
|
|
||||||
|
@ -1472,7 +1356,7 @@ static void SDLDrawBackground( int width, int height, int w_top, int h_top )
|
||||||
SDL_FillRect( sdlwindow, &rect, ARGBColors[ DISP_PAD ] );
|
SDL_FillRect( sdlwindow, &rect, ARGBColors[ DISP_PAD ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SDLDrawBackgroundLCD( void )
|
static void draw_background_LCD( void )
|
||||||
{
|
{
|
||||||
SDL_Rect rect;
|
SDL_Rect rect;
|
||||||
|
|
||||||
|
@ -1485,7 +1369,7 @@ static void SDLDrawBackgroundLCD( void )
|
||||||
|
|
||||||
static void SDLDrawAnnunc( char* annunc )
|
static void SDLDrawAnnunc( char* annunc )
|
||||||
{
|
{
|
||||||
SDLCreateAnnunc();
|
create_annunc();
|
||||||
|
|
||||||
// Print the annunciator
|
// Print the annunciator
|
||||||
for ( int i = 0; i < 6; i++ ) {
|
for ( int i = 0; i < 6; i++ ) {
|
||||||
|
@ -1681,56 +1565,6 @@ static inline void draw_row( long addr, int row )
|
||||||
draw_nibble( i, row, read_nibble( addr + i ) );
|
draw_nibble( i, row, read_nibble( addr + i ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SDLCreateHP( void )
|
|
||||||
{
|
|
||||||
unsigned int width, height;
|
|
||||||
|
|
||||||
if ( config.hide_chrome ) {
|
|
||||||
width = KEYBOARD_WIDTH;
|
|
||||||
height = DISPLAY_HEIGHT;
|
|
||||||
} else {
|
|
||||||
width = KEYBOARD_WIDTH + 2 * SIDE_SKIP;
|
|
||||||
height = DISPLAY_OFFSET_Y + DISPLAY_HEIGHT + DISP_KBD_SKIP + KEYBOARD_HEIGHT + BOTTOM_SKIP;
|
|
||||||
}
|
|
||||||
|
|
||||||
keypad.width = width;
|
|
||||||
keypad.height = height;
|
|
||||||
|
|
||||||
sdl_colors = opt_gx ? sdl_colors_gx : sdl_colors_sx;
|
|
||||||
|
|
||||||
// we allocate memory for the buttons because we need to modify
|
|
||||||
// their coordinates, and we don't want to change the original buttons_gx or
|
|
||||||
// buttons_sx
|
|
||||||
if ( buttons ) {
|
|
||||||
free( buttons );
|
|
||||||
buttons = 0;
|
|
||||||
}
|
|
||||||
buttons = ( sdl_button_t* )malloc( sizeof( buttons_gx ) );
|
|
||||||
|
|
||||||
if ( opt_gx )
|
|
||||||
memcpy( buttons, buttons_gx, sizeof( buttons_gx ) );
|
|
||||||
else
|
|
||||||
memcpy( buttons, buttons_sx, sizeof( buttons_sx ) );
|
|
||||||
|
|
||||||
SDLCreateColors();
|
|
||||||
|
|
||||||
if ( !config.hide_chrome ) {
|
|
||||||
int cut = buttons[ HPKEY_MTH ].y + KEYBOARD_OFFSET_Y - 19;
|
|
||||||
|
|
||||||
SDLDrawBackground( width, cut, width, height );
|
|
||||||
SDLDrawMore( cut, KEYBOARD_OFFSET_Y, keypad.width, keypad.height );
|
|
||||||
SDLDrawLogo();
|
|
||||||
SDLDrawBezel();
|
|
||||||
SDLDrawKeypad();
|
|
||||||
|
|
||||||
SDLDrawSerialDevices();
|
|
||||||
}
|
|
||||||
|
|
||||||
SDLDrawBackgroundLCD();
|
|
||||||
|
|
||||||
SDL_UpdateRect( sdlwindow, 0, 0, 0, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********/
|
/**********/
|
||||||
/* public */
|
/* public */
|
||||||
/**********/
|
/**********/
|
||||||
|
@ -1757,7 +1591,7 @@ void sdl_get_event( void )
|
||||||
int x, y, state;
|
int x, y, state;
|
||||||
state = SDL_GetMouseState( &x, &y );
|
state = SDL_GetMouseState( &x, &y );
|
||||||
|
|
||||||
if ( state & SDL_BUTTON( 1 ) && SDLCoordinateToKey( x, y ) == lasthpkey ) {
|
if ( state & SDL_BUTTON( 1 ) && mouse_click_to_hpkey( x, y ) == lasthpkey ) {
|
||||||
lastislongpress = 1;
|
lastislongpress = 1;
|
||||||
SDLUIFeedback();
|
SDLUIFeedback();
|
||||||
}
|
}
|
||||||
|
@ -1775,7 +1609,7 @@ void sdl_get_event( void )
|
||||||
*/
|
*/
|
||||||
/* // pressed */
|
/* // pressed */
|
||||||
/* case SDL_MOUSEMOTION: */
|
/* case SDL_MOUSEMOTION: */
|
||||||
/* hpkey = SDLCoordinateToKey( event.motion.x,
|
/* hpkey = mouse_click_to_hpkey( event.motion.x,
|
||||||
* event.motion.y ); */
|
* event.motion.y ); */
|
||||||
/* if ( event.motion.state & SDL_BUTTON( 1 ) ) { */
|
/* if ( event.motion.state & SDL_BUTTON( 1 ) ) { */
|
||||||
/* // Mouse moves on a key different from the last key
|
/* // Mouse moves on a key different from the last key
|
||||||
|
@ -1823,7 +1657,7 @@ void sdl_get_event( void )
|
||||||
|
|
||||||
case SDL_MOUSEBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
case SDL_MOUSEBUTTONUP:
|
case SDL_MOUSEBUTTONUP:
|
||||||
hpkey = SDLCoordinateToKey( event.button.x, event.button.y );
|
hpkey = mouse_click_to_hpkey( event.button.x, event.button.y );
|
||||||
|
|
||||||
// React to mouse up/down when click over a button
|
// React to mouse up/down when click over a button
|
||||||
if ( hpkey == -1 )
|
if ( hpkey == -1 )
|
||||||
|
@ -1859,7 +1693,7 @@ void sdl_get_event( void )
|
||||||
|
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
hpkey = SDLKeyToKey( event.key.keysym.sym );
|
hpkey = sdlkey_to_hpkey( event.key.keysym.sym );
|
||||||
|
|
||||||
if ( hpkey == -1 )
|
if ( hpkey == -1 )
|
||||||
break;
|
break;
|
||||||
|
@ -1897,7 +1731,7 @@ void sdl_get_event( void )
|
||||||
// button is pressed (otherwise it overwrites the zoomed button)
|
// button is pressed (otherwise it overwrites the zoomed button)
|
||||||
if ( keyneedshow && keyispressed == -1 ) {
|
if ( keyneedshow && keyispressed == -1 ) {
|
||||||
keyneedshow = 0;
|
keyneedshow = 0;
|
||||||
SDLDrawButtons();
|
draw_buttons();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DELAYEDDISPUPDATE
|
#ifdef DELAYEDDISPUPDATE
|
||||||
|
@ -1997,8 +1831,8 @@ void sdl_draw_annunc( void )
|
||||||
|
|
||||||
void sdl_adjust_contrast( void )
|
void sdl_adjust_contrast( void )
|
||||||
{
|
{
|
||||||
SDLCreateColors();
|
colors_setup();
|
||||||
SDLCreateAnnunc();
|
create_annunc();
|
||||||
|
|
||||||
// redraw LCD
|
// redraw LCD
|
||||||
ui_init_LCD();
|
ui_init_LCD();
|
||||||
|
@ -2029,6 +1863,86 @@ void init_sdl_ui( int argc, char** argv )
|
||||||
ui_adjust_contrast = sdl_adjust_contrast;
|
ui_adjust_contrast = sdl_adjust_contrast;
|
||||||
ui_draw_annunc = sdl_draw_annunc;
|
ui_draw_annunc = sdl_draw_annunc;
|
||||||
|
|
||||||
SDLInit();
|
// SDLInit();
|
||||||
SDLCreateHP();
|
unsigned int width, height;
|
||||||
|
|
||||||
|
// Initialize SDL
|
||||||
|
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) {
|
||||||
|
printf( "Couldn't initialize SDL: %s\n", SDL_GetError() );
|
||||||
|
exit( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
// On exit: clean SDL
|
||||||
|
atexit( SDL_Quit );
|
||||||
|
|
||||||
|
// Initialize the geometric values
|
||||||
|
KEYBOARD_HEIGHT = _KEYBOARD_HEIGHT;
|
||||||
|
KEYBOARD_WIDTH = _KEYBOARD_WIDTH;
|
||||||
|
TOP_SKIP = _TOP_SKIP;
|
||||||
|
SIDE_SKIP = _SIDE_SKIP;
|
||||||
|
BOTTOM_SKIP = _BOTTOM_SKIP;
|
||||||
|
DISP_KBD_SKIP = _DISP_KBD_SKIP;
|
||||||
|
DISPLAY_WIDTH = _DISPLAY_WIDTH;
|
||||||
|
DISPLAY_HEIGHT = _DISPLAY_HEIGHT;
|
||||||
|
DISPLAY_OFFSET_X = _DISPLAY_OFFSET_X;
|
||||||
|
DISPLAY_OFFSET_Y = _DISPLAY_OFFSET_Y;
|
||||||
|
DISP_FRAME = _DISP_FRAME;
|
||||||
|
KEYBOARD_OFFSET_X = _KEYBOARD_OFFSET_X;
|
||||||
|
KEYBOARD_OFFSET_Y = _KEYBOARD_OFFSET_Y;
|
||||||
|
KBD_UPLINE = _KBD_UPLINE;
|
||||||
|
|
||||||
|
if ( config.hide_chrome ) {
|
||||||
|
width = DISPLAY_WIDTH;
|
||||||
|
height = DISPLAY_HEIGHT;
|
||||||
|
DISPLAY_OFFSET_X = 0;
|
||||||
|
DISPLAY_OFFSET_Y = 0;
|
||||||
|
} else {
|
||||||
|
width = ( buttons_gx[ LAST_HPKEY ].x + buttons_gx[ LAST_HPKEY ].w ) + 2 * SIDE_SKIP;
|
||||||
|
height = DISPLAY_OFFSET_Y + DISPLAY_HEIGHT + DISP_KBD_SKIP + buttons_gx[ LAST_HPKEY ].y + buttons_gx[ LAST_HPKEY ].h + BOTTOM_SKIP;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t sdl_window_flags = SDL_SWSURFACE | SDL_RESIZABLE;
|
||||||
|
if ( config.show_ui_fullscreen )
|
||||||
|
sdl_window_flags |= SDL_FULLSCREEN;
|
||||||
|
|
||||||
|
sdlwindow = SDL_SetVideoMode( width, height, 32, sdl_window_flags );
|
||||||
|
|
||||||
|
if ( sdlwindow == NULL ) {
|
||||||
|
printf( "Couldn't set video mode: %s\n", SDL_GetError() );
|
||||||
|
exit( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
// SDLCreateHP();
|
||||||
|
keypad.width = width;
|
||||||
|
keypad.height = height;
|
||||||
|
|
||||||
|
sdl_colors = opt_gx ? sdl_colors_gx : sdl_colors_sx;
|
||||||
|
|
||||||
|
// we allocate memory for the buttons because we need to modify
|
||||||
|
// their coordinates, and we don't want to change the original buttons_gx or
|
||||||
|
// buttons_sx
|
||||||
|
buttons = ( sdl_button_t* )malloc( sizeof( buttons_gx ) );
|
||||||
|
|
||||||
|
if ( opt_gx )
|
||||||
|
memcpy( buttons, buttons_gx, sizeof( buttons_gx ) );
|
||||||
|
else
|
||||||
|
memcpy( buttons, buttons_sx, sizeof( buttons_sx ) );
|
||||||
|
|
||||||
|
colors_setup();
|
||||||
|
|
||||||
|
if ( !config.hide_chrome ) {
|
||||||
|
int cut = buttons[ HPKEY_MTH ].y + KEYBOARD_OFFSET_Y - 19;
|
||||||
|
|
||||||
|
draw_background( width, cut, width, height );
|
||||||
|
draw_bezel( cut, KEYBOARD_OFFSET_Y, keypad.width, keypad.height );
|
||||||
|
draw_header();
|
||||||
|
draw_bezel_LCD();
|
||||||
|
draw_keypad();
|
||||||
|
|
||||||
|
SDLDrawSerialDevices();
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_background_LCD();
|
||||||
|
|
||||||
|
SDL_UpdateRect( sdlwindow, 0, 0, 0, 0 );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue