|
|
1.1 ! root 1: /* ! 2: Hatari - dlgScreen.c ! 3: ! 4: This file is distributed under the GNU Public License, version 2 or at ! 5: your option any later version. Read the file gpl.txt for details. ! 6: */ ! 7: char DlgScreen_rcsid[] = "Hatari $Id: dlgScreen.c,v 1.3 2004/06/11 12:48:49 thothy Exp $"; ! 8: ! 9: #include "main.h" ! 10: #include "configuration.h" ! 11: #include "dialog.h" ! 12: #include "sdlgui.h" ! 13: #include "screen.h" ! 14: #include "screenSnapShot.h" ! 15: ! 16: ! 17: #define DLGSCRN_FULLSCRN 3 ! 18: #define DLGSCRN_INTERLACE 4 ! 19: #define DLGSCRN_FRAMESKIP 5 ! 20: #define DLGSCRN_OVERSCAN 6 ! 21: #define DLGSCRN_8BPP 7 ! 22: #define DLGSCRN_COLOR 9 ! 23: #define DLGSCRN_MONO 10 ! 24: #define DLGSCRN_LOW320 12 ! 25: #define DLGSCRN_LOW640 13 ! 26: /*#define DLGSCRN_LOW800 14*/ /* 800x600 resolution button is not used anymore */ ! 27: #define DLGSCRN_ONCHANGE 16 ! 28: #define DLGSCRN_FPSPOPUP 18 ! 29: #define DLGSCRN_CAPTURE 19 ! 30: #define DLGSCRN_RECANIM 20 ! 31: #define DLGSCRN_EXIT 21 ! 32: ! 33: ! 34: /* The screen dialog: */ ! 35: static SGOBJ screendlg[] = ! 36: { ! 37: { SGBOX, 0, 0, 0,0, 40,25, NULL }, ! 38: { SGBOX, 0, 0, 1,1, 38,13, NULL }, ! 39: { SGTEXT, 0, 0, 13,2, 14,1, "Screen options" }, ! 40: { SGCHECKBOX, 0, 0, 4,4, 12,1, "Fullscreen" }, ! 41: { SGCHECKBOX, 0, 0, 4,5, 23,1, "Interlaced mode" }, ! 42: { SGCHECKBOX, 0, 0, 4,6, 10,1, "Frame skip" }, ! 43: { SGCHECKBOX, 0, 0, 4,7, 13,1, "Use borders" }, ! 44: { SGCHECKBOX, 0, 0, 4,8, 13,1, "Force 8 bpp" }, ! 45: { SGTEXT, 0, 0, 4,10, 8,1, "Monitor:" }, ! 46: { SGRADIOBUT, 0, 0, 18,10, 7,1, "Color" }, ! 47: { SGRADIOBUT, 0, 0, 28,10, 6,1, "Mono" }, ! 48: { SGTEXT, 0, 0, 4,12, 12,1, "ST-Low mode:" }, ! 49: { SGRADIOBUT, 0, 0, 18,12, 8,1, "Normal" }, ! 50: { SGRADIOBUT, 0, 0, 28,12, 8,1, "Zoomed" }, ! 51: /* { SGRADIOBUT, 0, 0, 27,12, 9,1, "800x600" },*/ /* 800x600 resolution button is not used anymore */ ! 52: { SGBOX, 0, 0, 1,15, 38,7, NULL }, ! 53: { SGTEXT, 0, 0, 13,16, 14,1, "Screen capture" }, ! 54: { SGCHECKBOX, 0, 0, 3,18, 27,1, "Only when display changes" }, ! 55: { SGTEXT, 0, 0, 31,18, 4,1, ""/*"FPS:"*/ }, ! 56: { SGTEXT/*SGPOPUP*/, 0, 0, 36,18, 3,1, ""/*"25"*/ }, ! 57: { SGBUTTON, 0, 0, 3,20, 16,1, "Capture screen" }, ! 58: { SGBUTTON, 0, 0, 20,20, 18,1, NULL }, ! 59: { SGBUTTON, 0, 0, 10,23, 20,1, "Back to main menu" }, ! 60: { -1, 0, 0, 0,0, 0,0, NULL } ! 61: }; ! 62: ! 63: ! 64: /*-----------------------------------------------------------------------*/ ! 65: /* ! 66: Show and process the screen dialog. ! 67: */ ! 68: void Dialog_ScreenDlg(void) ! 69: { ! 70: int but, i; ! 71: ! 72: SDLGui_CenterDlg(screendlg); ! 73: ! 74: /* Set up dialog from actual values: */ ! 75: ! 76: if( DialogParams.Screen.bFullScreen ) ! 77: screendlg[DLGSCRN_FULLSCRN].state |= SG_SELECTED; ! 78: else ! 79: screendlg[DLGSCRN_FULLSCRN].state &= ~SG_SELECTED; ! 80: ! 81: if( DialogParams.Screen.bInterlacedScreen ) ! 82: screendlg[DLGSCRN_INTERLACE].state |= SG_SELECTED; ! 83: else ! 84: screendlg[DLGSCRN_INTERLACE].state &= ~SG_SELECTED; ! 85: ! 86: if( DialogParams.Screen.bFrameSkip ) ! 87: screendlg[DLGSCRN_FRAMESKIP].state |= SG_SELECTED; ! 88: else ! 89: screendlg[DLGSCRN_FRAMESKIP].state &= ~SG_SELECTED; ! 90: ! 91: if( DialogParams.Screen.bAllowOverscan ) ! 92: screendlg[DLGSCRN_OVERSCAN].state |= SG_SELECTED; ! 93: else ! 94: screendlg[DLGSCRN_OVERSCAN].state &= ~SG_SELECTED; ! 95: ! 96: ! 97: if( DialogParams.Screen.bUseHighRes ) ! 98: { ! 99: screendlg[DLGSCRN_COLOR].state &= ~SG_SELECTED; ! 100: screendlg[DLGSCRN_MONO].state |= SG_SELECTED; ! 101: } ! 102: else ! 103: { ! 104: screendlg[DLGSCRN_COLOR].state |= SG_SELECTED; ! 105: screendlg[DLGSCRN_MONO].state &= ~SG_SELECTED; ! 106: } ! 107: ! 108: for(i=0; i<2; i++) ! 109: screendlg[DLGSCRN_LOW320 + i].state &= ~SG_SELECTED; ! 110: ! 111: if(DialogParams.Screen.ChosenDisplayMode <= DISPLAYMODE_16COL_FULL) ! 112: { ! 113: screendlg[DLGSCRN_8BPP].state |= SG_SELECTED; ! 114: screendlg[DLGSCRN_LOW320 + DialogParams.Screen.ChosenDisplayMode].state |= SG_SELECTED; ! 115: } ! 116: else ! 117: { ! 118: screendlg[DLGSCRN_8BPP].state &= ~SG_SELECTED; ! 119: screendlg[DLGSCRN_LOW320 + DialogParams.Screen.ChosenDisplayMode ! 120: - DISPLAYMODE_HICOL_LOWRES].state |= SG_SELECTED; ! 121: } ! 122: ! 123: if( DialogParams.Screen.bCaptureChange ) ! 124: screendlg[DLGSCRN_ONCHANGE].state |= SG_SELECTED; ! 125: else ! 126: screendlg[DLGSCRN_ONCHANGE].state &= ~SG_SELECTED; ! 127: ! 128: if( ScreenSnapShot_AreWeRecording() ) ! 129: screendlg[DLGSCRN_RECANIM].txt = "Stop recording"; ! 130: else ! 131: screendlg[DLGSCRN_RECANIM].txt = "Record animation"; ! 132: ! 133: /* The screen dialog main loop */ ! 134: do ! 135: { ! 136: but = SDLGui_DoDialog(screendlg); ! 137: switch( but ) ! 138: { ! 139: case DLGSCRN_FPSPOPUP: ! 140: fprintf(stderr,"Sorry, popup menus don't work yet\n"); ! 141: break; ! 142: case DLGSCRN_CAPTURE: ! 143: SDL_UpdateRect(sdlscrn, 0,0,0,0); ! 144: ScreenSnapShot_SaveScreen(); ! 145: break; ! 146: case DLGSCRN_RECANIM: ! 147: if( ScreenSnapShot_AreWeRecording() ) ! 148: { ! 149: screendlg[DLGSCRN_RECANIM].txt = "Record animation"; ! 150: ScreenSnapShot_EndRecording(); ! 151: } ! 152: else ! 153: { ! 154: screendlg[DLGSCRN_RECANIM].txt = "Stop recording"; ! 155: DialogParams.Screen.bCaptureChange = (screendlg[DLGSCRN_ONCHANGE].state & SG_SELECTED); ! 156: ScreenSnapShot_BeginRecording(DialogParams.Screen.bCaptureChange, 25); ! 157: } ! 158: break; ! 159: } ! 160: } ! 161: while(but!=DLGSCRN_EXIT && !bQuitProgram); ! 162: ! 163: /* Read values from dialog */ ! 164: DialogParams.Screen.bFullScreen = (screendlg[DLGSCRN_FULLSCRN].state & SG_SELECTED); ! 165: DialogParams.Screen.bInterlacedScreen = (screendlg[DLGSCRN_INTERLACE].state & SG_SELECTED); ! 166: DialogParams.Screen.bFrameSkip = (screendlg[DLGSCRN_FRAMESKIP].state & SG_SELECTED); ! 167: DialogParams.Screen.bAllowOverscan = (screendlg[DLGSCRN_OVERSCAN].state & SG_SELECTED); ! 168: DialogParams.Screen.bUseHighRes = (screendlg[DLGSCRN_MONO].state & SG_SELECTED); ! 169: DialogParams.Screen.bCaptureChange = (screendlg[DLGSCRN_ONCHANGE].state & SG_SELECTED); ! 170: ! 171: for(i=0; i<2; i++) ! 172: { ! 173: if(screendlg[DLGSCRN_LOW320 + i].state & SG_SELECTED) ! 174: { ! 175: DialogParams.Screen.ChosenDisplayMode = DISPLAYMODE_16COL_LOWRES + i ! 176: + ((screendlg[DLGSCRN_8BPP].state&SG_SELECTED) ? 0 : DISPLAYMODE_HICOL_LOWRES); ! 177: break; ! 178: } ! 179: } ! 180: ! 181: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.