simplifiy UI scaling

This commit is contained in:
Gwenhael Le Moine 2024-04-12 22:27:32 +02:00
parent d6c7d17271
commit 071a6b8f69
No known key found for this signature in database
GPG key ID: FDFE3669426707A7
5 changed files with 31 additions and 35 deletions

View file

@ -184,7 +184,7 @@ void display_show()
// Show rendered to texture
SDL_Rect r1 = { 0, 0, LCD_WIDTH, LCD_HEIGHT };
SDL_Rect r2 = { LCD_X, LCD_Y, LCD_WIDTH * LCD_SCALE, LCD_HEIGHT * LCD_SCALE };
SDL_Rect r2 = { LCD_X * UI_SCALE, LCD_Y * UI_SCALE, LCD_WIDTH * UI_SCALE, LCD_HEIGHT * UI_SCALE };
SDL_RenderCopyEx( renderer, texTarget, &r1, &r2, 0, NULL, SDL_FLIP_NONE );
button_draw_all( calc_buttons );

View file

@ -161,12 +161,12 @@ void gui_initKeyboard( Button* calcbuttons )
static inline void button_draw( Button* b )
{
SDL_Rect rectToDraw = { b->x * KB_UI_SCALE, b->y * KB_UI_SCALE, b->w * KB_UI_SCALE, b->h * KB_UI_SCALE };
SDL_Rect rectToDraw = { b->x * UI_SCALE, b->y * UI_SCALE, b->w * UI_SCALE, b->h * UI_SCALE };
SDL_SetRenderDrawColor( renderer, 0x00, 0x00, 0x00, 0x33 );
SDL_RenderFillRect( renderer, &rectToDraw );
drawText( b->index, b->x * KB_UI_SCALE, 10 + b->y * KB_UI_SCALE, b->w * KB_UI_SCALE, b->h * KB_UI_SCALE );
drawText( b->index, b->x * UI_SCALE, 10 + b->y * UI_SCALE, b->w * UI_SCALE, b->h * UI_SCALE );
if ( b->flags & BUTTON_PUSHED ) {
SDL_SetRenderDrawColor( renderer, 0xFF, 0x00, 0x00, 0xFF );
@ -189,8 +189,8 @@ void button_draw_all( Button* buttons )
static inline Button* find_button( Button* b, int x, int y )
{
while ( b->label ) {
if ( x >= b->x * KB_UI_SCALE && x < b->x * KB_UI_SCALE + b->w * KB_UI_SCALE && y >= b->y * KB_UI_SCALE &&
y < b->y * KB_UI_SCALE + b->h * KB_UI_SCALE )
if ( x >= b->x * UI_SCALE && x < b->x * UI_SCALE + b->w * UI_SCALE && y >= b->y * UI_SCALE &&
y < b->y * UI_SCALE + b->h * UI_SCALE )
return b;
b++;

View file

@ -1,45 +1,41 @@
#ifndef __GUI_H
#define __GUI_H
#define FONT_FILENAME "/usr/share/fonts/TTF/unifont.ttf"
#include "types.h"
#define UI_PADDING 16
#define FONT_FILENAME "/usr/share/fonts/TTF/unifont.ttf"
#define UI_SCALE 4
#define UI_PADDING 4
#define ANNUNC_X UI_PADDING
#define ANNUNC_Y UI_PADDING
#define ANNUNC_HEIGHT 32
#define LCD_X UI_PADDING
#define LCD_Y UI_PADDING + ANNUNC_HEIGHT
#define LCD_Y ( UI_PADDING + ANNUNC_HEIGHT )
#define LCD_WIDTH 131
#define LCD_HEIGHT 64
#define LCD_SCALE 4
#define KB_UI_SCALE 2
#define UI_K_WIDTH_1 ( LCD_WIDTH / 8 )
#define UI_KB_GAP_X ( UI_K_WIDTH_1 / 2.66 )
#define UI_K_HEIGHT_1 10
#define UI_K_WIDTH_1 ( ( LCD_WIDTH * KB_UI_SCALE ) / 8 )
#define UI_K_HEIGHT_1 18
#define UI_K_WIDTH_2 ( UI_K_WIDTH_1 * 1.275 )
#define UI_KB_GAP_X2 UI_KB_GAP_X
#define UI_K_HEIGHT_2 12
#define UI_K_WIDTH_2 ( ( ( LCD_WIDTH * KB_UI_SCALE ) - UI_KB_GAP_X ) / 6 )
#define UI_K_HEIGHT_2 22
#define UI_KB_OFFSET_X 10
#define UI_KB_GAP_X ( UI_K_WIDTH_1 / 3 )
#define UI_KB_GAP_X2 ( UI_K_WIDTH_2 / 4 )
#define UI_KB_OFFSET_Y ( LCD_Y + ( LCD_HEIGHT * KB_UI_SCALE ) )
#define UI_KB_GAP_Y 14
#define UI_KB_OFFSET_Y ( LCD_Y + LCD_HEIGHT )
#define UI_KB_GAP_Y 6
#define UI_K_WIDTH_enter ( ( UI_K_WIDTH_1 * 2 ) + UI_KB_GAP_X )
#define Y_LINE( i ) ( UI_KB_OFFSET_Y + ( i * ( UI_KB_GAP_Y + 10 ) ) )
#define X_COL( i ) ( UI_KB_OFFSET_X + ( UI_K_WIDTH_1 * i ) + ( UI_KB_GAP_X * i ) )
#define XE_COL( i ) ( UI_K_WIDTH_enter - UI_K_WIDTH_1 + X_COL( i ) )
#define X2_COL( i ) ( UI_KB_OFFSET_X + ( UI_K_WIDTH_2 * i ) + ( UI_KB_GAP_X2 * ( i - 1 ) ) )
#define X_COL( i ) ( UI_PADDING + ( ( UI_K_WIDTH_1 + UI_KB_GAP_X ) * i ) )
#define X2_COL( i ) ( UI_PADDING + ( ( UI_K_WIDTH_2 + UI_KB_GAP_X2 ) * i ) )
#define UI_KB_HEIGHT ( KB_UI_SCALE * ( Y_LINE( 9 ) + UI_K_HEIGHT_2 + UI_KB_GAP_Y ) )
#define UI_KB_WIDTH ( KB_UI_SCALE * ( ( X_COL( 5 ) + UI_K_WIDTH_1 + UI_KB_OFFSET_X ) ) )
#define UI_KB_HEIGHT ( UI_SCALE * ( Y_LINE( 9 ) + UI_K_HEIGHT_2 + UI_KB_GAP_Y ) )
typedef struct {
int index;

View file

@ -40,10 +40,10 @@ Button calc_buttons[] = {
{24, X_COL( 0 ), Y_LINE( 4 ), UI_K_WIDTH_enter, UI_K_HEIGHT_2, std_flags, "ENTER", "EQUATION", "MATRIX", "", press_ENTER,
release_ENTER },
{25, XE_COL( 1 ), Y_LINE( 4 ), UI_K_WIDTH_1, UI_K_HEIGHT_2, std_flags, "±", "EDIT", "CMD", "Y", press_NEG, release_NEG },
{26, XE_COL( 2 ), Y_LINE( 4 ), UI_K_WIDTH_1, UI_K_HEIGHT_2, std_flags, "EEX", "PURG", "ARG", "Z", press_EEX, release_EEX },
{27, XE_COL( 3 ), Y_LINE( 4 ), UI_K_WIDTH_1, UI_K_HEIGHT_2, std_flags, "DEL", "CLEAR", "", "", press_DEL, release_DEL },
{28, XE_COL( 4 ), Y_LINE( 4 ), UI_K_WIDTH_1, UI_K_HEIGHT_2, std_flags, "", "DROP", "", "", press_BKSP, release_BKSP },
{25, X_COL( 2 ), Y_LINE( 4 ), UI_K_WIDTH_1, UI_K_HEIGHT_2, std_flags, "±", "EDIT", "CMD", "Y", press_NEG, release_NEG },
{26, X_COL( 3 ), Y_LINE( 4 ), UI_K_WIDTH_1, UI_K_HEIGHT_2, std_flags, "EEX", "PURG", "ARG", "Z", press_EEX, release_EEX },
{27, X_COL( 4 ), Y_LINE( 4 ), UI_K_WIDTH_1, UI_K_HEIGHT_2, std_flags, "DEL", "CLEAR", "", "", press_DEL, release_DEL },
{28, X_COL( 5 ), Y_LINE( 4 ), UI_K_WIDTH_1, UI_K_HEIGHT_2, std_flags, "", "DROP", "", "", press_BKSP, release_BKSP },
{29, X_COL( 0 ), Y_LINE( 5 ), UI_K_WIDTH_1, UI_K_HEIGHT_2, std_flags, "α", "USER", "ENTRY", "", press_ALPHA, release_ALPHA },
{30, X2_COL( 1 ), Y_LINE( 5 ), UI_K_WIDTH_2, UI_K_HEIGHT_2, std_flags, "7", "", "SOLVE", "", press_7, release_7 },
@ -69,7 +69,7 @@ Button calc_buttons[] = {
{47, X2_COL( 3 ), Y_LINE( 8 ), UI_K_WIDTH_2, UI_K_HEIGHT_2, std_flags, "SPC", "pi", "rad", "", press_SPC, release_SPC },
{48, X2_COL( 4 ) + 2, Y_LINE( 8 ), UI_K_WIDTH_2, UI_K_HEIGHT_2, std_flags, "+", "{}", ": :", "", press_PLUS, release_PLUS },
{49, X_COL( 0 ), Y_LINE( 9 ), 130, UI_K_HEIGHT_2, std_flags, "load file", "", "", "", press_LoadFile, release_LoadFile},
{49, X_COL( 0 ), Y_LINE( 9 ), 40, UI_K_HEIGHT_2, std_flags, "load file", "", "", "", press_LoadFile, release_LoadFile},
};
void press_PLUS( void ) { kbd_key_pressed( 0, 0 ); }

View file

@ -68,10 +68,10 @@ static void program_init( void )
exit( EXIT_FAILURE );
}
ttffont = TTF_OpenFont( FONT_FILENAME, 16 );
ttffont2 = TTF_OpenFont( FONT_FILENAME, 12 );
ttffont = TTF_OpenFont( FONT_FILENAME, 6 * UI_SCALE );
ttffont2 = TTF_OpenFont( FONT_FILENAME, 4 * UI_SCALE );
int window_width = LCD_WIDTH * LCD_SCALE + 2 * UI_PADDING;
int window_width = LCD_WIDTH * UI_SCALE + ( 2 * UI_PADDING );
int window_height = ( UI_KB_OFFSET_Y + UI_KB_HEIGHT ) + 2 * UI_PADDING;
window = SDL_CreateWindow( "hpemu", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, window_width, window_height, SDL_WINDOW_SHOWN );