- [NEW] F1, F2 i F3 per al zoom i fullscreen

- [NEW] [tools/scredit.lua] C per a borrar pantalla en el caracter seleccionar, F per a flood fill
This commit is contained in:
2026-05-18 09:04:04 +02:00
parent 7975eb37b3
commit 5b82b260ab
3 changed files with 97 additions and 40 deletions
+43 -39
View File
@@ -53,6 +53,7 @@ SDL_Window *mini_win;
SDL_Renderer *mini_ren;
SDL_Texture *mini_bak = NULL;
uint8_t window_zoom = 2;
bool window_fullscreen = false;
uint16_t window_width = BASE_WINDOW_WIDTH * window_zoom;
uint16_t window_height = BASE_WINDOW_HEIGHT * window_zoom;
uint16_t window_hborder = (window_width - screen_width*8*window_zoom) / 2;
@@ -212,27 +213,55 @@ void romcpy() {
void debug_set_prompt();
void applyZoom(SDL_Window* win, int zoom, int baseW, int baseH)
void applyZoom(int zoom)
{
if (zoom < 1) return;
const SDL_DisplayMode *dm = SDL_GetDesktopDisplayMode(SDL_GetPrimaryDisplay());
if ( (BASE_WINDOW_WIDTH*zoom > dm->w) || (BASE_WINDOW_HEIGHT*zoom > dm->h) ) return;
window_zoom = zoom;
// 1. Tamaño actual
int oldW, oldH;
SDL_GetWindowSize(win, &oldW, &oldH);
SDL_GetWindowSize(mini_win, &oldW, &oldH);
// 2. Posición actual
int oldX, oldY;
SDL_GetWindowPosition(win, &oldX, &oldY);
SDL_GetWindowPosition(mini_win, &oldX, &oldY);
// 3. Nuevo tamaño
int newW = baseW * zoom;
int newH = baseH * zoom;
window_width = BASE_WINDOW_WIDTH * window_zoom;
window_height = BASE_WINDOW_HEIGHT * window_zoom;
window_hborder = (window_width - screen_width*8*window_zoom) / 2;
window_vborder = (window_height - screen_height*8*window_zoom) / 2;
// 4. Calcular nueva posición para mantener el centro
int newX = SDL_max(0, oldX - (newW - oldW) / 2);
int newY = SDL_max(0, oldY - (newH - oldH) / 2);
int newX = SDL_max(0, oldX - (window_width - oldW) / 2);
int newY = SDL_max(0, oldY - (window_height - oldH) / 2);
// 5. Aplicar
SDL_SetWindowSize(win, newW, newH);
SDL_SetWindowPosition(win, newX, newY);
SDL_SetWindowSize(mini_win, window_width, window_height);
SDL_SetWindowPosition(mini_win, newX, newY);
}
void applyFullScreen() {
if (window_fullscreen) {
window_fullscreen = false;
SDL_SetWindowFullscreen(mini_win, window_fullscreen);
applyZoom(window_zoom);
} else {
window_fullscreen = true;
const SDL_DisplayMode *dm = SDL_GetDesktopDisplayMode(SDL_GetPrimaryDisplay());
int max_w_zoom = dm->w / (screen_width*8);
int max_h_zoom = dm->h / (screen_height*8);
int max_window_zoom = SDL_min(max_w_zoom, max_h_zoom);
window_width = dm->w;
window_height = dm->h;
window_hborder = (window_width - screen_width*8*max_window_zoom) / 2;
window_vborder = (window_height - screen_height*8*max_window_zoom) / 2;
SDL_SetWindowFullscreen(mini_win, window_fullscreen);
}
}
int main(int argc,char*argv[]) {
@@ -292,36 +321,11 @@ int main(int argc,char*argv[]) {
}
if (mini_eve.type == SDL_EVENT_KEY_DOWN) {
if (mini_eve.key.scancode == SDL_SCANCODE_F1) {
if (window_zoom>1) {
window_zoom--;
window_width = BASE_WINDOW_WIDTH * window_zoom;
window_height = BASE_WINDOW_HEIGHT * window_zoom;
window_hborder = (window_width - screen_width*8*window_zoom) / 2;
window_vborder = (window_height - screen_height*8*window_zoom) / 2;
applyZoom(mini_win, window_zoom, BASE_WINDOW_WIDTH, BASE_WINDOW_HEIGHT);
}
applyZoom(window_zoom-1);
} else if (mini_eve.key.scancode == SDL_SCANCODE_F2) {
const SDL_DisplayMode *dm = SDL_GetDesktopDisplayMode(SDL_GetPrimaryDisplay());
if ( (BASE_WINDOW_WIDTH*(window_zoom+1) <= dm->w) && (BASE_WINDOW_HEIGHT*(window_zoom+1) <= dm->h) ) {
window_zoom++;
window_width = BASE_WINDOW_WIDTH * window_zoom;
window_height = BASE_WINDOW_HEIGHT * window_zoom;
window_hborder = (window_width - screen_width*8*window_zoom) / 2;
window_vborder = (window_height - screen_height*8*window_zoom) / 2;
applyZoom(mini_win, window_zoom, BASE_WINDOW_WIDTH, BASE_WINDOW_HEIGHT);
}
applyZoom(window_zoom+1);
} else if (mini_eve.key.scancode == SDL_SCANCODE_F3) {
const SDL_DisplayMode *dm = SDL_GetDesktopDisplayMode(SDL_GetPrimaryDisplay());
int max_w_zoom = dm->w / (screen_width*8);
int max_h_zoom = dm->h / (screen_height*8);
int max_window_zoom = SDL_min(max_w_zoom, max_h_zoom);
window_width = BASE_WINDOW_WIDTH * max_window_zoom;
window_height = BASE_WINDOW_HEIGHT * max_window_zoom;
window_hborder = (window_width - screen_width*8*window_zoom) / 2;
window_vborder = (window_height - screen_height*8*window_zoom) / 2;
applyZoom(mini_win, max_window_zoom, BASE_WINDOW_WIDTH, BASE_WINDOW_HEIGHT);
applyFullScreen();
} else if ((mini_eve.key.scancode == SDL_SCANCODE_ESCAPE) && (mini_eve.key.mod & SDL_KMOD_LCTRL) ) {
if (lua_is_playing()) {
lua_pause();
@@ -355,8 +359,8 @@ int main(int argc,char*argv[]) {
float mx, my;
mouse_buttons = SDL_GetMouseState(&mx, &my);
if (mx>=window_hborder && my>=window_vborder && mx<(window_width-window_hborder) && my<(window_height-window_vborder)) {
mouse_x = (mx-window_hborder) / ((window_width-window_hborder)/screen_width);
mouse_y = (my-window_vborder) / ((window_height-window_vborder)/screen_height);
mouse_x = (mx-window_hborder) / ((window_width-window_hborder*2)/screen_width);
mouse_y = (my-window_vborder) / ((window_height-window_vborder*2)/screen_height);
}
if (lua_is_playing()) {