--- hatari/src/gui-sdl/dlgScreen.c 2019/04/01 07:13:49 1.1.1.5 +++ hatari/src/gui-sdl/dlgScreen.c 2019/04/09 08:47:26 1.1.1.8 @@ -4,7 +4,7 @@ This file is distributed under the GNU Public License, version 2 or at your option any later version. Read the file gpl.txt for details. */ -const char DlgScreen_rcsid[] = "Hatari $Id: dlgScreen.c,v 1.1.1.5 2019/04/01 07:13:49 root Exp $"; +const char DlgScreen_fileid[] = "Hatari dlgScreen.c : " __DATE__ " " __TIME__; #include "main.h" #include "configuration.h" @@ -13,12 +13,13 @@ const char DlgScreen_rcsid[] = "Hatari $ #include "screen.h" #include "screenSnapShot.h" #include "vdi.h" +#include "video.h" #define DLGSCRN_FULLSCRN 3 #define DLGSCRN_OVERSCAN 4 #define DLGSCRN_ZOOMLOWRES 5 -#define DLGSCRN_8BPP 6 +#define DLGSCRN_STATUSBAR 6 #define DLGSCRN_SKIP0 8 #define DLGSCRN_SKIP1 9 #define DLGSCRN_SKIP2 10 @@ -39,15 +40,14 @@ const char DlgScreen_rcsid[] = "Hatari $ #define DLGSCRN_BPP2 30 #define DLGSCRN_BPP4 31 #define DLGSCRN_ONCHANGE 34 -#define DLGSCRN_FPSPOPUP 36 -#define DLGSCRN_CAPTURE 37 -#define DLGSCRN_RECANIM 38 -#define DLGSCRN_EXIT 39 +#define DLGSCRN_CAPTURE 35 +#define DLGSCRN_RECANIM 36 +#define DLGSCRN_EXIT 37 #define ITEMS_IN_ARRAY(a) (sizeof(a)/sizeof(a[0])) /* needs to match Frame skip values in screendlg[]! */ -static const int skip_frames[] = { 0, 1, 2, 4, 8 }; +static const int skip_frames[] = { 0, 1, 2, 4, AUTO_FRAMESKIP_LIMIT }; /* Strings for VDI resolution width and height */ static char sVdiWidth[5]; @@ -62,14 +62,14 @@ static SGOBJ screendlg[] = { SGTEXT, 0, 0, 18,1, 14,1, "Screen options" }, { SGCHECKBOX, 0, 0, 4,3, 12,1, "Fullscreen" }, { SGCHECKBOX, 0, 0, 4,4, 13,1, "Use borders" }, - { SGCHECKBOX, 0, 0, 25,3, 18,1, "Zoom ST-low res." }, - { SGCHECKBOX, 0, 0, 25,4, 13,1, "Force 8 bpp" }, + { SGCHECKBOX, 0, 0, 22,3, 18,1, "Zoom ST-low res." }, + { SGCHECKBOX, 0, 0, 22,4, 13,1, "Statusbar" }, { SGTEXT, 0, 0, 4,6, 9,1, "Frame skip:" }, { SGRADIOBUT, 0, 0, 17,6, 5,1, "Off" }, { SGRADIOBUT, 0, 0, 24,6, 3,1, "1" }, { SGRADIOBUT, 0, 0, 29,6, 3,1, "2" }, { SGRADIOBUT, 0, 0, 35,6, 3,1, "4" }, - { SGRADIOBUT, 0, 0, 40,6, 3,1, "8" }, + { SGRADIOBUT, 0, 0, 40,6, 3,1, "Auto" }, { SGTEXT, 0, 0, 4,7, 8,1, "Monitor:" }, { SGRADIOBUT, 0, 0, 14,7, 6,1, "Mono" }, { SGRADIOBUT, 0, 0, 22,7, 5,1, "RGB" }, @@ -77,8 +77,8 @@ static SGOBJ screendlg[] = { SGRADIOBUT, 0, 0, 36,7, 4,1, "TV" }, { SGBOX, 0, 0, 1,9, 48,6, NULL }, - { SGCHECKBOX, 0, 0, 2,10, 33,1, "Use extended GEM VDI resolution" }, - { SGTEXT, 0, 0, 2,12, 11,1, "Resolution:" }, + { SGCHECKBOX, 0, 0, 4,10, 33,1, "Use extended GEM VDI resolution" }, + { SGTEXT, 0, 0, 4,12, 11,1, "Resolution:" }, { SGBUTTON, 0, 0, 18,12, 1,1, "\x04" }, /* Arrow left */ { SGTEXT, 0, 0, 20,12, 4,1, sVdiWidth }, { SGBUTTON, 0, 0, 25,12, 1,1, "\x03" }, /* Arrow right */ @@ -87,7 +87,7 @@ static SGOBJ screendlg[] = { SGTEXT, 0, 0, 33,12, 4,1, sVdiHeight }, { SGBUTTON, 0, 0, 38,12, 1,1, "\x03" }, /* Arrow right */ - { SGTEXT, 0, 0, 2,13, 12,1, "Color Depth:" }, + { SGTEXT, 0, 0, 4,13, 12,1, "Color Depth:" }, { SGRADIOBUT, SG_EXIT, 0, 17,13, 7,1, "1 bpp" }, { SGRADIOBUT, SG_EXIT, 0, 26,13, 7,1, "2 bpp" }, { SGRADIOBUT, SG_EXIT, 0, 35,13, 7,1, "4 bpp" }, @@ -95,8 +95,6 @@ static SGOBJ screendlg[] = { SGBOX, 0, 0, 1,16, 48,6, NULL }, { SGTEXT, 0, 0, 18,16, 14,1, "Screen capture" }, { SGCHECKBOX, 0, 0, 4,18, 39,1, "Capture only when display changes" }, - { SGTEXT, 0, 0, 31,19, 4,1, ""/*"FPS:"*/ }, - { SGTEXT/*SGPOPUP*/, 0, 0, 36,19, 3,1, ""/*"25"*/ }, { SGBUTTON, 0, 0, 6,20, 16,1, "Capture screen" }, { SGBUTTON, 0, 0, 26,20, 18,1, NULL }, @@ -146,34 +144,35 @@ void Dialog_ScreenDlg(void) { int but, skip = 0; unsigned int i; + MONITORTYPE mti; SDLGui_CenterDlg(screendlg); /* Set up general screen options in the dialog from actual values: */ - if (DialogParams.Screen.bFullScreen) + if (ConfigureParams.Screen.bFullScreen) screendlg[DLGSCRN_FULLSCRN].state |= SG_SELECTED; else screendlg[DLGSCRN_FULLSCRN].state &= ~SG_SELECTED; - if (DialogParams.Screen.bAllowOverscan) + if (ConfigureParams.Screen.bAllowOverscan) screendlg[DLGSCRN_OVERSCAN].state |= SG_SELECTED; else screendlg[DLGSCRN_OVERSCAN].state &= ~SG_SELECTED; - if (DialogParams.Screen.nForceBpp == 8) - screendlg[DLGSCRN_8BPP].state |= SG_SELECTED; + if (ConfigureParams.Screen.bShowStatusbar) + screendlg[DLGSCRN_STATUSBAR].state |= SG_SELECTED; else - screendlg[DLGSCRN_8BPP].state &= ~SG_SELECTED; + screendlg[DLGSCRN_STATUSBAR].state &= ~SG_SELECTED; - if (DialogParams.Screen.bZoomLowRes) + if (ConfigureParams.Screen.bZoomLowRes) screendlg[DLGSCRN_ZOOMLOWRES].state |= SG_SELECTED; else screendlg[DLGSCRN_ZOOMLOWRES].state &= ~SG_SELECTED; for (i = 0; i < ITEMS_IN_ARRAY(skip_frames); i++) { - if (DialogParams.Screen.FrameSkips >= skip_frames[i]) + if (ConfigureParams.Screen.nFrameSkips >= skip_frames[i]) skip = i; screendlg[i+DLGSCRN_SKIP0].state &= ~SG_SELECTED; } @@ -181,24 +180,24 @@ void Dialog_ScreenDlg(void) for (i = DLGSCRN_MONO; i <= DLGSCRN_TV; i++) screendlg[i].state &= ~SG_SELECTED; - screendlg[DLGSCRN_MONO+DialogParams.Screen.MonitorType].state |= SG_SELECTED; + screendlg[DLGSCRN_MONO+ConfigureParams.Screen.nMonitorType].state |= SG_SELECTED; /* Initialize VDI resolution options: */ - if (DialogParams.Screen.bUseExtVdiResolutions) + if (ConfigureParams.Screen.bUseExtVdiResolutions) screendlg[DLGSCRN_USEVDIRES].state |= SG_SELECTED; else screendlg[DLGSCRN_USEVDIRES].state &= ~SG_SELECTED; for (i=0; i<3; i++) screendlg[DLGSCRN_BPP1 + i].state &= ~SG_SELECTED; - screendlg[DLGSCRN_BPP1 + DialogParams.Screen.nVdiColors - GEMCOLOR_2].state |= SG_SELECTED; - sprintf(sVdiWidth, "%4i", DialogParams.Screen.nVdiWidth); - sprintf(sVdiHeight, "%4i", DialogParams.Screen.nVdiHeight); + screendlg[DLGSCRN_BPP1 + ConfigureParams.Screen.nVdiColors - GEMCOLOR_2].state |= SG_SELECTED; + sprintf(sVdiWidth, "%4i", ConfigureParams.Screen.nVdiWidth); + sprintf(sVdiHeight, "%4i", ConfigureParams.Screen.nVdiHeight); DlgScreen_SetStepping(); /* Initialize screen capture options: */ - if (DialogParams.Screen.bCaptureChange) + if (ConfigureParams.Screen.bCaptureChange) screendlg[DLGSCRN_ONCHANGE].state |= SG_SELECTED; else screendlg[DLGSCRN_ONCHANGE].state &= ~SG_SELECTED; @@ -214,30 +213,26 @@ void Dialog_ScreenDlg(void) but = SDLGui_DoDialog(screendlg, NULL); switch (but) { - case DLGSCRN_FPSPOPUP: - //fprintf(stderr,"Sorry, popup menus don't work yet\n"); - break; - case DLGSCRN_WIDTHLESS: - DialogParams.Screen.nVdiWidth = VDI_Limit(DialogParams.Screen.nVdiWidth - nVdiStepX, + ConfigureParams.Screen.nVdiWidth = VDI_Limit(ConfigureParams.Screen.nVdiWidth - nVdiStepX, nVdiStepX, MIN_VDI_WIDTH, MAX_VDI_WIDTH); - sprintf(sVdiWidth, "%4i", DialogParams.Screen.nVdiWidth); + sprintf(sVdiWidth, "%4i", ConfigureParams.Screen.nVdiWidth); break; case DLGSCRN_WIDTHMORE: - DialogParams.Screen.nVdiWidth = VDI_Limit(DialogParams.Screen.nVdiWidth + nVdiStepX, + ConfigureParams.Screen.nVdiWidth = VDI_Limit(ConfigureParams.Screen.nVdiWidth + nVdiStepX, nVdiStepX, MIN_VDI_WIDTH, MAX_VDI_WIDTH); - sprintf(sVdiWidth, "%4i", DialogParams.Screen.nVdiWidth); + sprintf(sVdiWidth, "%4i", ConfigureParams.Screen.nVdiWidth); break; case DLGSCRN_HEIGHTLESS: - DialogParams.Screen.nVdiHeight = VDI_Limit(DialogParams.Screen.nVdiHeight - nVdiStepY, + ConfigureParams.Screen.nVdiHeight = VDI_Limit(ConfigureParams.Screen.nVdiHeight - nVdiStepY, nVdiStepY, MIN_VDI_HEIGHT, MAX_VDI_HEIGHT); - sprintf(sVdiHeight, "%4i", DialogParams.Screen.nVdiHeight); + sprintf(sVdiHeight, "%4i", ConfigureParams.Screen.nVdiHeight); break; case DLGSCRN_HEIGHTMORE: - DialogParams.Screen.nVdiHeight = VDI_Limit(DialogParams.Screen.nVdiHeight + nVdiStepY, + ConfigureParams.Screen.nVdiHeight = VDI_Limit(ConfigureParams.Screen.nVdiHeight + nVdiStepY, nVdiStepY, MIN_VDI_HEIGHT, MAX_VDI_HEIGHT); - sprintf(sVdiHeight, "%4i", DialogParams.Screen.nVdiHeight); + sprintf(sVdiHeight, "%4i", ConfigureParams.Screen.nVdiHeight); break; case DLGSCRN_BPP1: @@ -245,12 +240,12 @@ void Dialog_ScreenDlg(void) case DLGSCRN_BPP4: DlgScreen_SetStepping(); /* Align resolution to actual conditions: */ - DialogParams.Screen.nVdiWidth = VDI_Limit(DialogParams.Screen.nVdiWidth, nVdiStepX, + ConfigureParams.Screen.nVdiWidth = VDI_Limit(ConfigureParams.Screen.nVdiWidth, nVdiStepX, MIN_VDI_WIDTH, MAX_VDI_WIDTH); - DialogParams.Screen.nVdiHeight = VDI_Limit(DialogParams.Screen.nVdiHeight, nVdiStepY, + ConfigureParams.Screen.nVdiHeight = VDI_Limit(ConfigureParams.Screen.nVdiHeight, nVdiStepY, MIN_VDI_HEIGHT, MAX_VDI_HEIGHT); - sprintf(sVdiWidth, "%4i", DialogParams.Screen.nVdiWidth); - sprintf(sVdiHeight, "%4i", DialogParams.Screen.nVdiHeight); + sprintf(sVdiWidth, "%4i", ConfigureParams.Screen.nVdiWidth); + sprintf(sVdiHeight, "%4i", ConfigureParams.Screen.nVdiHeight); break; case DLGSCRN_CAPTURE: @@ -266,8 +261,8 @@ void Dialog_ScreenDlg(void) else { screendlg[DLGSCRN_RECANIM].txt = "Stop recording"; - DialogParams.Screen.bCaptureChange = (screendlg[DLGSCRN_ONCHANGE].state & SG_SELECTED); - ScreenSnapShot_BeginRecording(DialogParams.Screen.bCaptureChange, 25); + ConfigureParams.Screen.bCaptureChange = (screendlg[DLGSCRN_ONCHANGE].state & SG_SELECTED); + ScreenSnapShot_BeginRecording(ConfigureParams.Screen.bCaptureChange); } break; } @@ -277,42 +272,41 @@ void Dialog_ScreenDlg(void) /* Read new values from dialog: */ - DialogParams.Screen.bFullScreen = (screendlg[DLGSCRN_FULLSCRN].state & SG_SELECTED); - DialogParams.Screen.bAllowOverscan = (screendlg[DLGSCRN_OVERSCAN].state & SG_SELECTED); + ConfigureParams.Screen.bFullScreen = (screendlg[DLGSCRN_FULLSCRN].state & SG_SELECTED); + ConfigureParams.Screen.bAllowOverscan = (screendlg[DLGSCRN_OVERSCAN].state & SG_SELECTED); - if (screendlg[DLGSCRN_8BPP].state & SG_SELECTED) - DialogParams.Screen.nForceBpp = 8; + if (screendlg[DLGSCRN_STATUSBAR].state & SG_SELECTED) + ConfigureParams.Screen.bShowStatusbar = true; else - /* TODO: disables this setting if it's != 8 */ - DialogParams.Screen.nForceBpp = 0; + ConfigureParams.Screen.bShowStatusbar = false; if (screendlg[DLGSCRN_ZOOMLOWRES].state & SG_SELECTED) - DialogParams.Screen.bZoomLowRes = TRUE; + ConfigureParams.Screen.bZoomLowRes = true; else - DialogParams.Screen.bZoomLowRes = FALSE; + ConfigureParams.Screen.bZoomLowRes = false; - DialogParams.Screen.bUseExtVdiResolutions = (screendlg[DLGSCRN_USEVDIRES].state & SG_SELECTED); + ConfigureParams.Screen.bUseExtVdiResolutions = (screendlg[DLGSCRN_USEVDIRES].state & SG_SELECTED); for (i = DLGSCRN_SKIP0; i <= DLGSCRN_SKIP4; i++) { if (screendlg[i].state & SG_SELECTED) { - DialogParams.Screen.FrameSkips = skip_frames[i-DLGSCRN_SKIP0]; + ConfigureParams.Screen.nFrameSkips = skip_frames[i-DLGSCRN_SKIP0]; break; } } - for (i = DLGSCRN_MONO; i <= DLGSCRN_TV; i++) + for (mti = MONITOR_TYPE_MONO; mti <= MONITOR_TYPE_TV; mti++) { - if (screendlg[i].state & SG_SELECTED) + if (screendlg[mti + DLGSCRN_MONO].state & SG_SELECTED) { - DialogParams.Screen.MonitorType = i - DLGSCRN_MONO; + ConfigureParams.Screen.nMonitorType = mti; break; } } for (i=0; i<3; i++) { if (screendlg[DLGSCRN_BPP1 + i].state & SG_SELECTED) - DialogParams.Screen.nVdiColors = GEMCOLOR_2 + i; + ConfigureParams.Screen.nVdiColors = GEMCOLOR_2 + i; } - DialogParams.Screen.bCaptureChange = (screendlg[DLGSCRN_ONCHANGE].state & SG_SELECTED); + ConfigureParams.Screen.bCaptureChange = (screendlg[DLGSCRN_ONCHANGE].state & SG_SELECTED); }