for loops; fix labels

This commit is contained in:
Gwenhael Le Moine 2024-04-17 14:07:01 +02:00
parent 12f74577f6
commit 7c9ab6de42
No known key found for this signature in database
GPG key ID: FDFE3669426707A7
3 changed files with 144 additions and 176 deletions

290
src/gui.c
View file

@ -38,6 +38,8 @@
#define UI_KB_HEIGHT ( config.ui_scale * Y_LINE( 9 ) ) #define UI_KB_HEIGHT ( config.ui_scale * Y_LINE( 9 ) )
#define NB_KEYS 50
/* Button flags: /* Button flags:
* Use BUTTON_B1RELEASE for normal buttons. * Use BUTTON_B1RELEASE for normal buttons.
* Use BUTTON_B1RELEASE | BUTTON_B2TOGGLE for calculator buttons. * Use BUTTON_B1RELEASE | BUTTON_B2TOGGLE for calculator buttons.
@ -91,27 +93,26 @@ static TTF_Font* ttffont2 = NULL;
SDL_Window* window = NULL; SDL_Window* window = NULL;
SDL_Renderer* renderer = NULL; SDL_Renderer* renderer = NULL;
SDL_Texture* texTarget = NULL; SDL_Texture* window_texture = NULL;
SDL_Texture* tex2Target = NULL;
SDL_Surface* surfaces_labels[ 49 ]; SDL_Surface* surfaces_labels[ NB_KEYS ];
SDL_Texture* textures_labels[ 49 ]; SDL_Texture* textures_labels[ NB_KEYS ];
SDL_Surface* surfaces_labels_Lshift[ 49 ]; SDL_Surface* surfaces_labels_Lshift[ NB_KEYS ];
SDL_Texture* textures_labels_Lshift[ 49 ]; SDL_Texture* textures_labels_Lshift[ NB_KEYS ];
SDL_Surface* surfaces_labels_Rshift[ 49 ]; SDL_Surface* surfaces_labels_Rshift[ NB_KEYS ];
SDL_Texture* textures_labels_Rshift[ 49 ]; SDL_Texture* textures_labels_Rshift[ NB_KEYS ];
SDL_Surface* surfaces_labels_below[ 49 ]; SDL_Surface* surfaces_labels_below[ NB_KEYS ];
SDL_Texture* textures_labels_below[ 49 ]; SDL_Texture* textures_labels_below[ NB_KEYS ];
SDL_Surface* surfaces_labels_letter[ 49 ]; SDL_Surface* surfaces_labels_letter[ NB_KEYS ];
SDL_Texture* textures_labels_letter[ 49 ]; SDL_Texture* textures_labels_letter[ NB_KEYS ];
static const int std_flags = BUTTON_B1RELEASE | BUTTON_B2TOGGLE; static const int std_flags = BUTTON_B1RELEASE | BUTTON_B2TOGGLE;
static Button gui_buttons[] = { static Button gui_buttons[ NB_KEYS ] = {
{.index = 0, {.index = 0,
.x = X_COL( 0 ), .x = X_COL( 0 ),
.y = Y_LINE( 0 ), .y = Y_LINE( 0 ),
@ -791,176 +792,146 @@ static colors_t colors = {
.below = {.r = 128, .g = 108, .b = 29, .a = 255}, .below = {.r = 128, .g = 108, .b = 29, .a = 255},
}; };
static inline bool _init_keyboard_textures( Button* calcbuttons ) static inline bool _init_keyboard_textures()
{ {
printf( "init texts\n" ); SDL_Surface* s = NULL;
SDL_Texture* t = NULL;
if ( ttffont == NULL ) { if ( ttffont == NULL ) {
printf( "init texts error Font NULL\n" ); printf( "init texts error Font NULL\n" );
return false; return false;
} }
SDL_Surface* s = NULL;
SDL_Texture* t = NULL;
int i = 0; for ( int i = 0; i < NB_KEYS; ++i ) {
Button* buttons = calcbuttons;
while ( buttons->label ) {
s = NULL; s = NULL;
t = NULL; t = NULL;
if ( buttons->label && strcmp( buttons->label, "" ) != 0 ) { if ( gui_buttons[ i ].label && strcmp( gui_buttons[ i ].label, "" ) != 0 ) {
s = TTF_RenderUTF8_Blended( ttffont, buttons->label, colors.label ); s = TTF_RenderUTF8_Blended( ttffont, gui_buttons[ i ].label, colors.label );
if ( s ) { if ( s )
t = SDL_CreateTextureFromSurface( renderer, s ); t = SDL_CreateTextureFromSurface( renderer, s );
} }
}
surfaces_labels[ i ] = s; surfaces_labels[ i ] = s;
textures_labels[ i ] = t; textures_labels[ i ] = t;
i++;
buttons++;
}
i = 0;
buttons = calcbuttons;
while ( buttons->label_Lshift ) {
s = NULL; s = NULL;
t = NULL; t = NULL;
if ( buttons->label_Lshift && strcmp( buttons->label_Lshift, "" ) != 0 ) { if ( gui_buttons[ i ].label_Lshift && strcmp( gui_buttons[ i ].label_Lshift, "" ) != 0 ) {
s = TTF_RenderUTF8_Blended( ttffont2, buttons->label_Lshift, colors.Lshift ); s = TTF_RenderUTF8_Blended( ttffont2, gui_buttons[ i ].label_Lshift, colors.Lshift );
if ( s ) { if ( s )
t = SDL_CreateTextureFromSurface( renderer, s ); t = SDL_CreateTextureFromSurface( renderer, s );
} }
}
surfaces_labels_Lshift[ i ] = s; surfaces_labels_Lshift[ i ] = s;
textures_labels_Lshift[ i ] = t; textures_labels_Lshift[ i ] = t;
i++;
buttons++;
}
i = 0;
buttons = calcbuttons;
while ( buttons->label_Rshift ) {
s = NULL; s = NULL;
t = NULL; t = NULL;
if ( buttons->label_Rshift && strcmp( buttons->label_Rshift, "" ) != 0 ) { if ( gui_buttons[ i ].label_Rshift && strcmp( gui_buttons[ i ].label_Rshift, "" ) != 0 ) {
s = TTF_RenderUTF8_Blended( ttffont2, buttons->label_Rshift, colors.Rshift ); s = TTF_RenderUTF8_Blended( ttffont2, gui_buttons[ i ].label_Rshift, colors.Rshift );
if ( s ) { if ( s )
t = SDL_CreateTextureFromSurface( renderer, s ); t = SDL_CreateTextureFromSurface( renderer, s );
} }
}
surfaces_labels_Rshift[ i ] = s; surfaces_labels_Rshift[ i ] = s;
textures_labels_Rshift[ i ] = t; textures_labels_Rshift[ i ] = t;
i++;
buttons++;
}
i = 0;
buttons = calcbuttons;
while ( buttons->label_below ) {
s = NULL; s = NULL;
t = NULL; t = NULL;
if ( buttons->label_below && strcmp( buttons->label_below, "" ) != 0 ) { if ( gui_buttons[ i ].label_below && strcmp( gui_buttons[ i ].label_below, "" ) != 0 ) {
s = TTF_RenderUTF8_Blended( ttffont2, buttons->label_below, colors.below ); s = TTF_RenderUTF8_Blended( ttffont2, gui_buttons[ i ].label_below, colors.below );
if ( s ) { if ( s )
t = SDL_CreateTextureFromSurface( renderer, s ); t = SDL_CreateTextureFromSurface( renderer, s );
} }
}
surfaces_labels_below[ i ] = s; surfaces_labels_below[ i ] = s;
textures_labels_below[ i ] = t; textures_labels_below[ i ] = t;
i++;
buttons++;
}
i = 0;
buttons = calcbuttons;
while ( buttons->label_letter ) {
s = NULL; s = NULL;
t = NULL; t = NULL;
if ( buttons->label_letter && strcmp( buttons->label_letter, "" ) != 0 ) { if ( gui_buttons[ i ].label_letter && strcmp( gui_buttons[ i ].label_letter, "" ) != 0 ) {
s = TTF_RenderUTF8_Blended( ttffont2, buttons->label_letter, colors.letter ); s = TTF_RenderUTF8_Blended( ttffont2, gui_buttons[ i ].label_letter, colors.letter );
if ( s ) { if ( s )
t = SDL_CreateTextureFromSurface( renderer, s ); t = SDL_CreateTextureFromSurface( renderer, s );
} }
}
surfaces_labels_letter[ i ] = s; surfaces_labels_letter[ i ] = s;
textures_labels_letter[ i ] = t; textures_labels_letter[ i ] = t;
i++;
buttons++;
} }
return true; return true;
} }
static inline void _draw_button_labels( int index, int x, int y, int btn_w, int btn_h ) static inline void _draw_button_labels( Button b )
{ {
int texW; int texW;
int texH; int texH;
int h_padding = 3; int h_padding = 3;
SDL_Surface* surface_label = surfaces_labels[ index ]; SDL_Surface* surface_label = surfaces_labels[ b.index ];
SDL_Texture* texture_label = textures_labels[ index ]; SDL_Texture* texture_label = textures_labels[ b.index ];
if ( surface_label != NULL && texture_label != NULL ) { if ( surface_label != NULL && texture_label != NULL ) {
texW = surface_label->w; texW = surface_label->w / config.ui_scale;
texH = surface_label->h; texH = surface_label->h / config.ui_scale;
SDL_Rect destRect = { x + ( btn_w - texW ) / 2, y + ( btn_h / 3 ), texW, texH }; SDL_Rect destRect = { config.ui_scale * ( b.x + ( b.w - texW ) / 2 ), config.ui_scale * ( b.y + ( b.h / 3 ) ),
config.ui_scale * texW, config.ui_scale * texH };
SDL_RenderCopy( renderer, texture_label, NULL, &destRect ); SDL_RenderCopy( renderer, texture_label, NULL, &destRect );
} }
SDL_Surface* surface_label_Lshift = surfaces_labels_Lshift[ index ]; SDL_Surface* surface_label_Lshift = surfaces_labels_Lshift[ b.index ];
SDL_Texture* texture_label_Lshift = textures_labels_Lshift[ index ]; SDL_Texture* texture_label_Lshift = textures_labels_Lshift[ b.index ];
if ( surface_label_Lshift != NULL && texture_label_Lshift != NULL ) { if ( surface_label_Lshift != NULL && texture_label_Lshift != NULL ) {
texW = surface_label_Lshift->w; texW = surface_label_Lshift->w / config.ui_scale;
texH = surface_label_Lshift->h; texH = surface_label_Lshift->h / config.ui_scale;
SDL_Rect destRect = { x + h_padding, y, texW, texH }; SDL_Rect destRect = { config.ui_scale * ( b.x + h_padding ), config.ui_scale * b.y, config.ui_scale * texW,
config.ui_scale * texH };
SDL_RenderCopy( renderer, texture_label_Lshift, NULL, &destRect ); SDL_RenderCopy( renderer, texture_label_Lshift, NULL, &destRect );
} }
SDL_Surface* surface_label_Rshift = surfaces_labels_Rshift[ index ]; SDL_Surface* surface_label_Rshift = surfaces_labels_Rshift[ b.index ];
SDL_Texture* texture_label_Rshift = textures_labels_Rshift[ index ]; SDL_Texture* texture_label_Rshift = textures_labels_Rshift[ b.index ];
if ( surface_label_Rshift != NULL && texture_label_Rshift != NULL ) { if ( surface_label_Rshift != NULL && texture_label_Rshift != NULL ) {
texW = surface_label_Rshift->w; texW = surface_label_Rshift->w / config.ui_scale;
texH = surface_label_Rshift->h; texH = surface_label_Rshift->h / config.ui_scale;
SDL_Rect destRect = { ( x + btn_w ) - ( texW + h_padding ), y, texW, texH }; SDL_Rect destRect = { config.ui_scale * ( ( b.x + b.w ) - ( texW + h_padding ) ), config.ui_scale * b.y, config.ui_scale * texW,
config.ui_scale * texH };
if ( surface_label_Lshift == NULL ) if ( surface_label_Lshift == NULL )
destRect.x = x + ( btn_w - texW ) / 2; destRect.x = config.ui_scale * ( b.x + ( ( b.w / 2 ) - ( texW / 2 ) ) );
SDL_RenderCopy( renderer, texture_label_Rshift, NULL, &destRect ); SDL_RenderCopy( renderer, texture_label_Rshift, NULL, &destRect );
} }
SDL_Surface* surface_label_letter = surfaces_labels_letter[ index ]; SDL_Surface* surface_label_letter = surfaces_labels_letter[ b.index ];
SDL_Texture* texture_label_letter = textures_labels_letter[ index ]; SDL_Texture* texture_label_letter = textures_labels_letter[ b.index ];
if ( surface_label_letter != NULL && texture_label_letter != NULL ) { if ( surface_label_letter != NULL && texture_label_letter != NULL ) {
texW = surface_label_letter->w; texW = surface_label_letter->w / config.ui_scale;
texH = surface_label_letter->h; texH = surface_label_letter->h / config.ui_scale;
SDL_Rect destRect = { ( x + btn_w ) - ( texW / 2 ), y + ( btn_h - ( 5 * config.ui_scale ) ), texW, texH }; SDL_Rect destRect = { config.ui_scale * ( ( b.x + b.w ) - ( texW / 2 ) ), config.ui_scale * ( b.y + ( b.h - 5 ) ),
config.ui_scale * texW, config.ui_scale * texH };
SDL_RenderCopy( renderer, texture_label_letter, NULL, &destRect ); SDL_RenderCopy( renderer, texture_label_letter, NULL, &destRect );
} }
SDL_Surface* surface_label_below = surfaces_labels_below[ index ]; SDL_Surface* surface_label_below = surfaces_labels_below[ b.index ];
SDL_Texture* texture_label_below = textures_labels_below[ index ]; SDL_Texture* texture_label_below = textures_labels_below[ b.index ];
if ( surface_label_below != NULL && texture_label_below != NULL ) { if ( surface_label_below != NULL && texture_label_below != NULL ) {
texW = surface_label_below->w; texW = surface_label_below->w / config.ui_scale;
texH = surface_label_below->h; texH = surface_label_below->h / config.ui_scale;
SDL_Rect destRect = { x + ( btn_w - texW ) / 2, y + ( btn_h - ( 3 * config.ui_scale ) ), texW, texH }; SDL_Rect destRect = { config.ui_scale * ( b.x + ( b.w - texW ) / 2 ), config.ui_scale * ( b.y + ( b.h - 3 ) ),
config.ui_scale * texW, config.ui_scale * texH };
SDL_RenderCopy( renderer, texture_label_below, NULL, &destRect ); SDL_RenderCopy( renderer, texture_label_below, NULL, &destRect );
} }
} }
static inline void _button_draw( Button* b ) static inline void _button_draw( Button b )
{ {
SDL_Rect rectToDraw = { ( b->x + ( UI_KEY_PADDING / 2 ) ) * config.ui_scale, ( b->y + ( UI_KEY_PADDING * 1.25 ) ) * config.ui_scale, SDL_Rect rectToDraw = { ( b.x + ( UI_KEY_PADDING / 2 ) ) * config.ui_scale, ( b.y + ( UI_KEY_PADDING * 1.25 ) ) * config.ui_scale,
( b->w - UI_KEY_PADDING ) * config.ui_scale, ( b->h - ( UI_KEY_PADDING * 2 ) ) * config.ui_scale }; ( b.w - UI_KEY_PADDING ) * config.ui_scale, ( b.h - ( UI_KEY_PADDING * 2 ) ) * config.ui_scale };
if ( b->index < 6 ) if ( b.index < 6 )
SDL_SetRenderDrawColor( renderer, colors.label.r, colors.label.g, colors.label.g, colors.label.a ); SDL_SetRenderDrawColor( renderer, colors.label.r, colors.label.g, colors.label.g, colors.label.a );
else if ( b->index == 34 ) else if ( b.index == 34 )
SDL_SetRenderDrawColor( renderer, colors.Lshift.r, colors.Lshift.g, colors.Lshift.g, colors.Lshift.a ); SDL_SetRenderDrawColor( renderer, colors.Lshift.r, colors.Lshift.g, colors.Lshift.g, colors.Lshift.a );
else if ( b->index == 39 ) else if ( b.index == 39 )
SDL_SetRenderDrawColor( renderer, colors.Rshift.r, colors.Rshift.g, colors.Rshift.g, colors.Rshift.a ); SDL_SetRenderDrawColor( renderer, colors.Rshift.r, colors.Rshift.g, colors.Rshift.g, colors.Rshift.a );
else else
SDL_SetRenderDrawColor( renderer, colors.button_bg.r, colors.button_bg.g, colors.button_bg.g, colors.button_bg.a ); SDL_SetRenderDrawColor( renderer, colors.button_bg.r, colors.button_bg.g, colors.button_bg.g, colors.button_bg.a );
SDL_RenderFillRect( renderer, &rectToDraw ); SDL_RenderFillRect( renderer, &rectToDraw );
if ( b->flags & BUTTON_PUSHED ) if ( b.flags & BUTTON_PUSHED )
SDL_SetRenderDrawColor( renderer, colors.button_active.r, colors.button_active.g, colors.button_active.b, colors.button_active.a ); SDL_SetRenderDrawColor( renderer, colors.button_active.r, colors.button_active.g, colors.button_active.b, colors.button_active.a );
else else
SDL_SetRenderDrawColor( renderer, colors.button_inactive.r, colors.button_inactive.g, colors.button_inactive.b, SDL_SetRenderDrawColor( renderer, colors.button_inactive.r, colors.button_inactive.g, colors.button_inactive.b,
@ -968,88 +939,86 @@ static inline void _button_draw( Button* b )
SDL_RenderDrawRect( renderer, &rectToDraw ); SDL_RenderDrawRect( renderer, &rectToDraw );
_draw_button_labels( b->index, b->x * config.ui_scale, b->y * config.ui_scale, b->w * config.ui_scale, b->h * config.ui_scale ); _draw_button_labels( b );
} }
static inline Button* _find_button( Button* b, int x, int y ) static inline int _find_button( int x, int y )
{ {
while ( b->label ) { for ( int i = 0; i < NB_KEYS; ++i )
if ( x >= b->x * config.ui_scale && x < b->x * config.ui_scale + b->w * config.ui_scale && y >= b->y * config.ui_scale && if ( x >= gui_buttons[ i ].x * config.ui_scale && x < gui_buttons[ i ].x * config.ui_scale + gui_buttons[ i ].w * config.ui_scale &&
y < b->y * config.ui_scale + b->h * config.ui_scale ) y >= gui_buttons[ i ].y * config.ui_scale &&
return b; y < gui_buttons[ i ].y * config.ui_scale + gui_buttons[ i ].h * config.ui_scale ) {
if ( gui_buttons[ i ].flags & BUTTON_DISABLED )
b++; return -1;
else
return i;
} }
return NULL; return -1;
} }
static inline int _button_mouse_down( Button* buttons, int mx, int my, int mb ) static inline void _button_mouse_down( int mouse_x, int mouse_y, int mouse_button )
{ {
Button* b = _find_button( buttons, mx, my ); int bindex = _find_button( mouse_x, mouse_y );
if ( !b ) if ( bindex == -1 )
return 0; return;
if ( !( b->flags & BUTTON_DISABLED ) ) { if ( ( mouse_button == 2 && ( gui_buttons[ bindex ].flags & BUTTON_B2TOGGLE ) ) ||
if ( ( mb == 2 && ( b->flags & BUTTON_B2TOGGLE ) ) || ( mb == 1 && ( b->flags & BUTTON_B1TOGGLE ) ) ) { ( mouse_button == 1 && ( gui_buttons[ bindex ].flags & BUTTON_B1TOGGLE ) ) ) {
fprintf( stderr, "Toggle mouse_button %i\n", mouse_button );
if ( b->flags & BUTTON_PUSHED ) { if ( gui_buttons[ bindex ].flags & BUTTON_PUSHED ) {
b->flags &= ~BUTTON_PUSHED; gui_buttons[ bindex ].flags &= ~BUTTON_PUSHED;
if ( b->up ) if ( gui_buttons[ bindex ].up )
b->up(); gui_buttons[ bindex ].up();
} else { } else {
b->flags |= BUTTON_PUSHED; gui_buttons[ bindex ].flags |= BUTTON_PUSHED;
if ( b->down ) if ( gui_buttons[ bindex ].down )
b->down(); gui_buttons[ bindex ].down();
} }
} else if ( mb == 1 && !( b->flags & BUTTON_PUSHED ) ) { } else if ( mouse_button == 1 && !( gui_buttons[ bindex ].flags & BUTTON_PUSHED ) ) {
b->flags |= BUTTON_PUSHED; gui_buttons[ bindex ].flags |= BUTTON_PUSHED;
if ( b->down ) if ( gui_buttons[ bindex ].down )
b->down(); gui_buttons[ bindex ].down();
} }
} }
return 1; static inline void _button_mouse_up( int mouse_x, int mouse_y, int mouse_button )
}
static inline int _button_mouse_up( Button* buttons, int mx, int my, int mb )
{ {
Button* b = _find_button( buttons, mx, my ); int bindex = _find_button( mouse_x, mouse_y );
int ret = ( b != NULL ); if ( bindex == -1 )
return;
if ( b && !( b->flags & BUTTON_DISABLED ) ) { if ( !( gui_buttons[ bindex ].flags & BUTTON_DISABLED ) ) {
if ( mb == 1 && ( b->flags & BUTTON_PUSHED ) && !( b->flags & BUTTON_B1TOGGLE ) ) { if ( mouse_button == 1 && ( gui_buttons[ bindex ].flags & BUTTON_PUSHED ) && !( gui_buttons[ bindex ].flags & BUTTON_B1TOGGLE ) ) {
b->flags &= ~BUTTON_PUSHED; gui_buttons[ bindex ].flags &= ~BUTTON_PUSHED;
if ( b->up ) if ( gui_buttons[ bindex ].up )
b->up(); gui_buttons[ bindex ].up();
} }
} }
if ( mb == 1 ) { if ( mouse_button == 1 ) {
for ( b = buttons; b->label; b++ ) { /* for ( b = buttons; gui_buttons[ bindex ].label; b++ ) { */
if ( ( b->flags & ( BUTTON_B1RELEASE | BUTTON_PUSHED ) ) == ( BUTTON_B1RELEASE | BUTTON_PUSHED ) ) { if ( ( gui_buttons[ bindex ].flags & ( BUTTON_B1RELEASE | BUTTON_PUSHED ) ) == ( BUTTON_B1RELEASE | BUTTON_PUSHED ) ) {
b->flags &= ~BUTTON_PUSHED; gui_buttons[ bindex ].flags &= ~BUTTON_PUSHED;
if ( b->up ) if ( gui_buttons[ bindex ].up )
b->up(); gui_buttons[ bindex ].up();
ret = 1;
} }
/* } */
} }
} }
return ret;
}
static inline void button_draw_all() static inline void button_draw_all()
{ {
for ( int i = 0; i < sizeof( gui_buttons ) / sizeof( gui_buttons[ 0 ] ); ++i ) for ( int i = 0; i < NB_KEYS; ++i )
_button_draw( &( gui_buttons[ i ] ) ); _button_draw( gui_buttons[ i ] );
} }
void SDL__display_show() void gui_refresh()
{ {
SDL_SetRenderDrawColor( renderer, colors.faceplate.r, colors.faceplate.g, colors.faceplate.b, colors.faceplate.a ); SDL_SetRenderDrawColor( renderer, colors.faceplate.r, colors.faceplate.g, colors.faceplate.b, colors.faceplate.a );
SDL_RenderClear( renderer ); SDL_RenderClear( renderer );
@ -1062,10 +1031,10 @@ void SDL__display_show()
int access; int access;
Uint32 format; Uint32 format;
if ( SDL_QueryTexture( texTarget, &format, &access, &w, &h ) != 0 ) if ( SDL_QueryTexture( window_texture, &format, &access, &w, &h ) != 0 )
printf( "error\n" ); printf( "error\n" );
if ( SDL_LockTexture( texTarget, NULL, ( void** )&pixels, &pitch ) != 0 ) if ( SDL_LockTexture( window_texture, NULL, ( void** )&pixels, &pitch ) != 0 )
printf( "SDL_LockTexture: %s.\n", SDL_GetError() ); printf( "SDL_LockTexture: %s.\n", SDL_GetError() );
SDL_PixelFormat* pixelFormat = SDL_AllocFormat( format ); SDL_PixelFormat* pixelFormat = SDL_AllocFormat( format );
@ -1110,13 +1079,13 @@ void SDL__display_show()
} }
} }
SDL_UnlockTexture( texTarget ); SDL_UnlockTexture( window_texture );
} }
// Show rendered to texture // Show rendered to texture
SDL_Rect r1 = { 0, 0, LCD_WIDTH, LCD_HEIGHT }; SDL_Rect r1 = { 0, 0, LCD_WIDTH, LCD_HEIGHT };
SDL_Rect r2 = { LCD_X * config.ui_scale, LCD_Y * config.ui_scale, LCD_WIDTH * config.ui_scale, LCD_HEIGHT * config.ui_scale }; SDL_Rect r2 = { LCD_X * config.ui_scale, LCD_Y * config.ui_scale, LCD_WIDTH * config.ui_scale, LCD_HEIGHT * config.ui_scale };
SDL_RenderCopyEx( renderer, texTarget, &r1, &r2, 0, NULL, SDL_FLIP_NONE ); SDL_RenderCopyEx( renderer, window_texture, &r1, &r2, 0, NULL, SDL_FLIP_NONE );
button_draw_all(); button_draw_all();
@ -1130,11 +1099,11 @@ bool gui_events()
while ( SDL_PollEvent( &event ) ) { while ( SDL_PollEvent( &event ) ) {
switch ( event.type ) { switch ( event.type ) {
case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONUP:
_button_mouse_up( gui_buttons, event.button.x, event.button.y, 1 ); _button_mouse_up( event.button.x, event.button.y, 1 );
break; break;
case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONDOWN:
_button_mouse_down( gui_buttons, event.button.x, event.button.y, 1 ); _button_mouse_down( event.button.x, event.button.y, 1 );
break; break;
case SDL_KEYDOWN: case SDL_KEYDOWN:
@ -1519,12 +1488,11 @@ bool gui_init( void )
return false; return false;
} }
tex2Target = SDL_CreateTexture( renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, window_width, window_height ); window_texture = SDL_CreateTexture( renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING, window_width, window_height );
texTarget = SDL_CreateTexture( renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING, window_width, window_height );
SDL_UpdateWindowSurface( window ); SDL_UpdateWindowSurface( window );
return _init_keyboard_textures( gui_buttons ); return _init_keyboard_textures();
} }
bool gui_exit( void ) bool gui_exit( void )

View file

@ -3,9 +3,9 @@
#include <stdbool.h> #include <stdbool.h>
extern void SDL__display_show( void ); extern void gui_refresh( void );
extern bool gui_events(); extern bool gui_events();
extern bool gui_init( void ); extern bool gui_init( void );
extern bool gui_exit( void ); extern bool gui_exit( void );
#endif #endif

View file

@ -42,7 +42,7 @@ int main( int argc, char* argv[] )
if ( currentTime > lastTime_timer5 + delay_timer5 ) { if ( currentTime > lastTime_timer5 + delay_timer5 ) {
lastTime_timer5 = currentTime; lastTime_timer5 = currentTime;
SDL__display_show(); gui_refresh();
} }
if ( !gui_events() ) if ( !gui_events() )