mirror of
https://github.com/Pecusx/libretro-atari800.git
synced 2026-05-21 14:49:36 +02:00
240 lines
9.1 KiB
C
240 lines
9.1 KiB
C
#ifndef VIDEOMODE_H_
|
|
#define VIDEOMODE_H_
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "config.h"
|
|
|
|
typedef struct VIDEOMODE_resolution_t {
|
|
unsigned int width;
|
|
unsigned int height;
|
|
} VIDEOMODE_resolution_t;
|
|
|
|
/* The following 9 values describe geometry of the visible screen area.
|
|
Do not change these values by hand. They are changed when needed, and after
|
|
each change a call to PLATFORM_SetVideoMode() is made. Platform-specific
|
|
parts should base their screen-drawing on these values. */
|
|
|
|
/* VIDEOMODE_src* values define visible area of the "source" Atari screen
|
|
(Screen_ATARI, XEP80_screen etc.)
|
|
SRC_OFFSET values describe the left-top corner of the area.
|
|
SRC_WIDTH/HEIGHT describe the size of the area.
|
|
Effectively, these values define amount of crop on all four sides of screen. */
|
|
extern unsigned int VIDEOMODE_src_offset_left;
|
|
extern unsigned int VIDEOMODE_src_offset_top;
|
|
extern unsigned int VIDEOMODE_src_width;
|
|
extern unsigned int VIDEOMODE_src_height;
|
|
|
|
/* This value contains the actual width of the source screen. Typically it is
|
|
equal to VIDEOMODE_src_width, but in one case (NTSC-filtered display mode)
|
|
the "actual" width is 1.75x larger than the "source" width (each source
|
|
pixel is scaled horizontally by 1.75 in the NTSC-filtered mode). */
|
|
extern unsigned int VIDEOMODE_actual_width;
|
|
/* There is no equivalent variable for "actual height", because no display
|
|
mode scales the source screen vertically. Use VIDEOMODE_src_height instead. */
|
|
|
|
/* VIDEOMODE_dest* values define area of the host screen, on which the Atari
|
|
screen shall be displayed.
|
|
DEST_OFFSET values describe the left-top corner,
|
|
DEST_WIDTH/HEIGHT describe the size of the screen area.
|
|
Effectively, these values define position and amount of screen stretching. */
|
|
extern unsigned int VIDEOMODE_dest_offset_left;
|
|
extern unsigned int VIDEOMODE_dest_offset_top;
|
|
extern unsigned int VIDEOMODE_dest_width;
|
|
extern unsigned int VIDEOMODE_dest_height;
|
|
|
|
/* Updates the video mode according to current settings. */
|
|
int VIDEOMODE_Update(void);
|
|
|
|
/* Get/set fullscreen/windowed mode. */
|
|
/* Call VIDEOMODE_Update() after changing this variable, or use VIDEOMODE_SetWindowed() instead. */
|
|
extern int VIDEOMODE_windowed;
|
|
int VIDEOMODE_SetWindowed(int value);
|
|
int VIDEOMODE_ToggleWindowed(void);
|
|
/* Forces windowed display mode. */
|
|
void VIDEOMODE_ForceWindowed(int value);
|
|
|
|
/* Get/set visible horizontal screen area. */
|
|
enum {
|
|
VIDEOMODE_HORIZONTAL_NARROW,
|
|
VIDEOMODE_HORIZONTAL_TV,
|
|
VIDEOMODE_HORIZONTAL_FULL,
|
|
VIDEOMODE_HORIZONTAL_CUSTOM,
|
|
/* Number of "normal" (not including CUSTOM) values in enumerator */
|
|
VIDEOMODE_HORIZONTAL_SIZE = VIDEOMODE_HORIZONTAL_CUSTOM
|
|
};
|
|
|
|
enum {
|
|
VIDEOMODE_MIN_HORIZONTAL_AREA = 160,
|
|
VIDEOMODE_MIN_VERTICAL_AREA = 100,
|
|
VIDEOMODE_MAX_HORIZONTAL_AREA = 384,
|
|
VIDEOMODE_MAX_VERTICAL_AREA = 300
|
|
};
|
|
|
|
/* Call VIDEOMODE_Update() after changing this variable, or use VIDEOMODE_SetHorizontalArea() instead. */
|
|
extern int VIDEOMODE_horizontal_area;
|
|
int VIDEOMODE_SetHorizontalArea(int value);
|
|
int VIDEOMODE_ToggleHorizontalArea(void);
|
|
/* Call VIDEOMODE_Update() after changing this variable, or use VIDEOMODE_SetCustomHorizontalArea() instead. */
|
|
extern unsigned int VIDEOMODE_custom_horizontal_area;
|
|
int VIDEOMODE_SetCustomHorizontalArea(unsigned int value);
|
|
|
|
/* Get/set visible vertical screen area. */
|
|
enum {
|
|
VIDEOMODE_VERTICAL_SHORT,
|
|
VIDEOMODE_VERTICAL_TV,
|
|
VIDEOMODE_VERTICAL_FULL,
|
|
VIDEOMODE_VERTICAL_CUSTOM,
|
|
/* Number of "normal" (not including CUSTOM) values in enumerator */
|
|
VIDEOMODE_VERTICAL_SIZE = VIDEOMODE_VERTICAL_CUSTOM
|
|
};
|
|
/* Call VIDEOMODE_Update() after changing this variable, or use VIDEOMODE_SetVerticalArea() instead. */
|
|
extern int VIDEOMODE_vertical_area;
|
|
int VIDEOMODE_SetVerticalArea(int value);
|
|
int VIDEOMODE_ToggleVerticalArea(void);
|
|
/* Call VIDEOMODE_Update() after changing this variable, or use VIDEOMODE_SetCustomVerticalArea() instead. */
|
|
extern unsigned int VIDEOMODE_custom_vertical_area;
|
|
int VIDEOMODE_SetCustomVerticalArea(unsigned int value);
|
|
|
|
/* Get/set horizontal offset. */
|
|
/* Call VIDEOMODE_Update() after changing this variable, or use VIDEOMODE_SetHorizontalOffset() instead. */
|
|
extern int VIDEOMODE_horizontal_offset;
|
|
int VIDEOMODE_SetHorizontalOffset(int value);
|
|
|
|
/* Get/set vertical offset. */
|
|
/* Call VIDEOMODE_Update() after changing this variable, or use VIDEOMODE_SetVerticalOffset() instead. */
|
|
extern int VIDEOMODE_vertical_offset;
|
|
int VIDEOMODE_SetVerticalOffset(int value);
|
|
|
|
/* Get/set type of screen stretching. */
|
|
enum {
|
|
VIDEOMODE_STRETCH_NONE,
|
|
VIDEOMODE_STRETCH_2X,
|
|
VIDEOMODE_STRETCH_3X,
|
|
VIDEOMODE_STRETCH_INTEGER,
|
|
VIDEOMODE_STRETCH_FULL,
|
|
VIDEOMODE_STRETCH_CUSTOM,
|
|
/* Number of "normal" (not including CUSTOM) values in enumerator */
|
|
VIDEOMODE_STRETCH_SIZE = VIDEOMODE_STRETCH_CUSTOM
|
|
};
|
|
|
|
/* Call VIDEOMODE_Update() after changing this variable, or use VIDEOMODE_SetStretch() instead. */
|
|
extern int VIDEOMODE_stretch;
|
|
int VIDEOMODE_SetStretch(int value);
|
|
int VIDEOMODE_ToggleStretch(void);
|
|
extern double VIDEOMODE_custom_stretch;
|
|
int VIDEOMODE_SetCustomStretch(double value);
|
|
|
|
/* Get/set method of fit-to-screen when VIDEOMODE_stretch is INTEGER or FULL. */
|
|
enum {
|
|
VIDEOMODE_FIT_WIDTH,
|
|
VIDEOMODE_FIT_HEIGHT,
|
|
VIDEOMODE_FIT_BOTH,
|
|
/* Number of values in enumerator */
|
|
VIDEOMODE_FIT_SIZE
|
|
};
|
|
/* Call VIDEOMODE_Update() after changing this variable, or use VIDEOMODE_SetFit() instead. */
|
|
extern int VIDEOMODE_fit;
|
|
int VIDEOMODE_SetFit(int value);
|
|
int VIDEOMODE_ToggleFit(void);
|
|
|
|
/* Get/set method of keeping screen aspect ratio. */
|
|
enum {
|
|
VIDEOMODE_KEEP_ASPECT_NONE,
|
|
VIDEOMODE_KEEP_ASPECT_SQUARE_PIXELS,
|
|
VIDEOMODE_KEEP_ASPECT_REAL,
|
|
/* Number of values in enumerator */
|
|
VIDEOMODE_KEEP_ASPECT_SIZE
|
|
};
|
|
/* Call VIDEOMODE_Update() after changing this variable, or use VIDEOMODE_SetKeepAspect() instead. */
|
|
extern int VIDEOMODE_keep_aspect;
|
|
int VIDEOMODE_SetKeepAspect(int value);
|
|
int VIDEOMODE_ToggleKeepAspect(void);
|
|
|
|
#if SUPPORTS_ROTATE_VIDEOMODE
|
|
/* Get/set screen rotation. */
|
|
/* Call VIDEOMODE_Update() after changing this variable, or use VIDEOMODE_SetRotate90() instead. */
|
|
extern int VIDEOMODE_rotate90;
|
|
int VIDEOMODE_SetRotate90(int value);
|
|
int VIDEOMODE_ToggleRotate90(void);
|
|
#endif /* SUPPORTS_ROTATE_VIDEOMODE */
|
|
|
|
/* Get/set the host display's aspect ratio (4:3, 16:9 etc.) */
|
|
/* Call VIDEOMODE_Update() after changing these two variables, or use VIDEOMODE_SetHostAspect() instead. */
|
|
extern double VIDEOMODE_host_aspect_ratio_w;
|
|
extern double VIDEOMODE_host_aspect_ratio_h;
|
|
int VIDEOMODE_SetHostAspect(double w, double h);
|
|
int VIDEOMODE_SetHostAspectString(char const *s);
|
|
void VIDEOMODE_CopyHostAspect(char *target, unsigned int size);
|
|
/* Autotedect host display aspect ratio, based on the desktop
|
|
resolution and assuming square pixels. */
|
|
int VIDEOMODE_AutodetectHostAspect(void);
|
|
|
|
/* Returns number of available fullscreen resolutions. */
|
|
unsigned int VIDEOMODE_NumAvailableResolutions(void);
|
|
|
|
/* Converts resolution RES_ID to a user-readable format, and writes to
|
|
string TARGET of size SIZE. TARGET is automatically ended with '\0'. */
|
|
void VIDEOMODE_CopyResolutionName(unsigned int res_id, char *target, unsigned int size);
|
|
|
|
/* Get/set id of the fullscreen resolution. */
|
|
unsigned int VIDEOMODE_GetFullscreenResolution(void);
|
|
int VIDEOMODE_SetFullscreenResolution(unsigned int res_id);
|
|
|
|
/* Update window size. This function should be called by platform-specific
|
|
parts every time the user changes the window's size. */
|
|
int VIDEOMODE_SetWindowSize(unsigned int width, unsigned int height);
|
|
|
|
/* Additional actions when the TV system changes (change screen aspect ratio). */
|
|
void VIDEOMODE_SetVideoSystem(int mode);
|
|
|
|
#ifdef XEP80_EMULATION
|
|
/* Update screen geometry after switching the XEP80 TV system. */
|
|
void VIDEOMODE_UpdateXEP80(void);
|
|
#endif
|
|
|
|
/* This enumerator lists all possible "display modes" */
|
|
typedef enum {
|
|
VIDEOMODE_MODE_NORMAL,
|
|
#if NTSC_FILTER
|
|
VIDEOMODE_MODE_NTSC_FILTER,
|
|
#endif
|
|
#ifdef XEP80_EMULATION
|
|
VIDEOMODE_MODE_XEP80,
|
|
#endif
|
|
#ifdef PBI_PROTO80
|
|
VIDEOMODE_MODE_PROTO80,
|
|
#endif
|
|
#ifdef AF80
|
|
VIDEOMODE_MODE_AF80,
|
|
#endif
|
|
#ifdef BIT3
|
|
VIDEOMODE_MODE_BIT3,
|
|
#endif
|
|
VIDEOMODE_MODE_SIZE
|
|
} VIDEOMODE_MODE_t;
|
|
#if defined(XEP80_EMULATION) || defined(PBI_PROTO80) || defined(AF80) || defined(BIT3)
|
|
/* Indicates that 80 column display should be active when a 80 column card is available.
|
|
Setting to TRUE does not switch to 80 column display when no 80 column card is present. */
|
|
/* Call VIDEOMODE_Update() after changing this variable, or use VIDEOMODE_Set80Column() instead. */
|
|
extern int VIDEOMODE_80_column;
|
|
int VIDEOMODE_Set80Column(int value);
|
|
int VIDEOMODE_Toggle80Column(void);
|
|
#endif /* defined(XEP80_EMULATION) || defined(PBI_PROTO80) || defined(AF80) || defined(BIT3) */
|
|
|
|
/* Called when an UI needs to be displayed. Forces the standard 40x25 display mode. */
|
|
void VIDEOMODE_ForceStandardScreen(int value);
|
|
|
|
/* Read/write to configuration file. */
|
|
int VIDEOMODE_ReadConfig(char *option, char *parameters);
|
|
void VIDEOMODE_WriteConfig(FILE *fp);
|
|
|
|
/* Performs initial setup and reads command-line parameters. */
|
|
int VIDEOMODE_Initialise(int *argc, char *argv[]);
|
|
/* Called after initialisation of all modules. Initialises the display. */
|
|
int VIDEOMODE_InitialiseDisplay(void);
|
|
/* Clean up on exit. */
|
|
void VIDEOMODE_Exit(void);
|
|
|
|
#endif /* VIDEOMODE_H_ */
|