From f22ca477ab0775f285f3e6e73f9e02bd3617e135 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Mon, 11 Dec 2017 12:24:17 +0100 Subject: Added desktop fullscreen option --- src/main.c | 42 ++++++++++++++++++++++++++---------------- src/sdl/graphics.c | 45 +++++++++++++++++++++++++++++++++++---------- src/sdl/graphics.h | 6 ++++++ 3 files changed, 67 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index e2c88c6..39ce6ae 100644 --- a/src/main.c +++ b/src/main.c @@ -48,7 +48,7 @@ int main(int argc, char **argv) SDL_Delay(5000); exit(EXIT_FAILURE); } - + int desktopFS = 0; #if defined(PANDORA) || defined(PYRA) || defined(CHIP) || defined(ODROID) wantFullscreen = 1; #else @@ -57,20 +57,10 @@ int main(int argc, char **argv) #ifdef CHIP screenScale = 1; #elif defined(PYRA) - screenScale = 3; + //screenScale = 3; + desktopFS = 1; #elif defined(ODROID) - const SDL_VideoInfo* infos = SDL_GetVideoInfo(); - int maxy = infos->current_h; - if(maxy < 640) - screenScale = 1; - else if (maxy < 720) - screenScale = 2; - else if (maxy < 960) - screenScale = 3; - else if (maxy < 1200) - screenScale = 4; - else - screenScale = 5; + desktopFS = 1; #else screenScale = 2; #endif @@ -82,6 +72,10 @@ int main(int argc, char **argv) wantFullscreen = 1; if(!strcmp(argv[i], "--fullscreen")) wantFullscreen = 1; + if(!strcmp(argv[i], "-d")) + desktopFS = 1; + if(!strcmp(argv[i], "--desktop")) + desktopFS = 1; if(!strcmp(argv[i], "-x1")) screenScale = 1; if(!strcmp(argv[i], "-x2")) @@ -97,11 +91,27 @@ int main(int argc, char **argv) if(!strcmp(argv[i], "--nojoy")) useJoystick = 0; if(!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { - printf("Quick help\n\t-f|--fullscreen\tUse fullscreen\n\t-x1|-x2|-x3|-x4\tUse screenScale of *1..*4 (default *2 = 640x480)\n\t-j|-nojoy\tdo not use Joystick\n"); + printf("Quick help\n\t-f|--fullscreen\tUse fullscreen\n\t-d|--desktop\tdesktop fullscreen\n\t-x1|-x2|-x3|-x4\tUse screenScale of *1..*4 (default *2 = 640x480)\n\t-j|-nojoy\tdo not use Joystick\n"); exit(0); } } - printf("Hydra Caslte Labyrinth, %s scale=x%d, using Joystick=%d\n", wantFullscreen?"Fullscreen":"Windowed", screenScale, useJoystick); + if(desktopFS) + { + const SDL_VideoInfo* infos = SDL_GetVideoInfo(); + screenH = infos->current_h; + screenW = infos->current_w; + if(screenW/320 < screenH/240) + screenScale = screenW/320; + else + screenScale = screenH/240; // automatic guess the scale + deltaX = (screenW-320*screenScale)/2; + deltaY = (screenH-240*screenScale)/2; + + } else { + screenW = 320 * screenScale; + screenH = 240 * screenScale; + } + printf("Hydra Caslte Labyrinth, %s %dx%d scale=x%d, using Joystick=%d\n", (wantFullscreen || desktopFS)?"Fullscreen":"Windowed", screenW, screenH, screenScale, useJoystick); #endif srand(time(NULL)); diff --git a/src/sdl/graphics.c b/src/sdl/graphics.c index 166eb32..2488fae 100755 --- a/src/sdl/graphics.c +++ b/src/sdl/graphics.c @@ -11,6 +11,14 @@ SDL_Surface* backbuffer = NULL; int wantFullscreen = 0; int screenScale = 2; +int deltaX = 0; +int deltaY = 0; + +int screenW = 640; +int screenH = 480; + +int drawscreen = 0; + static uint32_t tframe; extern void Input_InitJoystick(); @@ -31,8 +39,9 @@ void PHL_GraphicsInit() uint32_t flags = SDL_HWSURFACE|SDL_DOUBLEBUF; if(wantFullscreen) flags |= SDL_FULLSCREEN; - screen = SDL_SetVideoMode(320*screenScale, 240*screenScale, 0, flags); - drawbuffer = screen; + screen = SDL_SetVideoMode(screenW, screenH, 0, flags); + drawbuffer = screen; + drawscreen = 1; backbuffer = PHL_NewSurface(320*screenScale, 240*screenScale); tframe = SDL_GetTicks(); } @@ -50,6 +59,20 @@ void PHL_StartDrawing() } void PHL_EndDrawing() { + // handle black borders + if(deltaX) { + SDL_Rect rect = {0, 0, deltaX, screenH}; + SDL_FillRect(screen, &rect, SDL_MapRGB(screen->format, 0, 0, 0)); + rect.x = screenW - deltaX -1; + SDL_FillRect(screen, &rect, SDL_MapRGB(screen->format, 0, 0, 0)); + } + if(deltaY) { + SDL_Rect rect = {0, 0, screenW, deltaY}; + SDL_FillRect(screen, &rect, SDL_MapRGB(screen->format, 0, 0, 0)); + rect.y = screenH - deltaY -1; + SDL_FillRect(screen, &rect, SDL_MapRGB(screen->format, 0, 0, 0)); + } + SDL_Flip(screen); uint32_t tnext = tframe + 1000/60; while((tframe = SDL_GetTicks())format, col.r, col.g, col.b)); } @@ -168,8 +193,8 @@ void PHL_DrawSurface(double x, double y, PHL_Surface surface) } SDL_Rect offset; - offset.x = x*screenScale/2; - offset.y = y*screenScale/2; + offset.x = x*screenScale/2 + (drawscreen?deltaX:0); + offset.y = y*screenScale/2 + (drawscreen?deltaY:0); SDL_BlitSurface(surface, NULL, drawbuffer, &offset); } @@ -190,15 +215,15 @@ void PHL_DrawSurfacePart(double x, double y, int cropx, int cropy, int cropw, in crop.w = cropw*screenScale/2; crop.h = croph*screenScale/2; - offset.x = x*screenScale/2; - offset.y = y*screenScale/2; + offset.x = x*screenScale/2 + (drawscreen?deltaX:0); + offset.y = y*screenScale/2 + (drawscreen?deltaY:0); SDL_BlitSurface(surface, &crop, drawbuffer, &offset); } void PHL_DrawBackground(PHL_Background back, PHL_Background fore) { - PHL_DrawSurface(0, 0, backbuffer); + PHL_DrawSurface(0, 0, backbuffer); } void PHL_UpdateBackground(PHL_Background back, PHL_Background fore) { diff --git a/src/sdl/graphics.h b/src/sdl/graphics.h index 459927d..d3de8bc 100644 --- a/src/sdl/graphics.h +++ b/src/sdl/graphics.h @@ -30,6 +30,12 @@ extern PHL_Surface screen; extern int wantFullscreen; extern int screenScale; +extern int deltaX; +extern int deltaY; + +extern int screenW; +extern int screenH; + SDL_Color PHL_NewRGB(uint8_t r, uint8_t g, uint8_t b); /* { -- cgit v1.2.3