Changed sdl video resize logic to ensure that it is always syncd to the size of the drawing area.

This commit is contained in:
Matthew Budd 2020-08-07 21:44:12 -04:00
parent a2fbb33d68
commit 33c5b328b2
3 changed files with 20 additions and 45 deletions

View File

@ -83,8 +83,6 @@ bool menuTogglingEnabled = false;
static int buttonConfigStatus = 0;
enum videoDriver_t videoDriver = VIDEO_NONE;
//static char useCairoDraw = 0;
//static int drawAreaGL = 0;
unsigned int gtk_draw_area_width = NES_WIDTH;
unsigned int gtk_draw_area_height = NES_HEIGHT;
static GtkTreeStore *hotkey_store = NULL;
@ -967,7 +965,7 @@ static void setVideoDriver (GtkWidget * w, gpointer p)
g_config->save ();
}
void setRegion (GtkWidget * w, gpointer p)
static void setRegion (GtkWidget * w, gpointer p)
{
int region = gtk_combo_box_get_active (GTK_COMBO_BOX (w));
g_config->setOption ("SDL.PAL", region);
@ -977,7 +975,7 @@ void setRegion (GtkWidget * w, gpointer p)
}
int setXscale (GtkWidget * w, gpointer p)
static int setXscale (GtkWidget * w, gpointer p)
{
double v = gtk_spin_button_get_value (GTK_SPIN_BUTTON (w));
g_config->setOption ("SDL.XScale", v);
@ -986,7 +984,7 @@ int setXscale (GtkWidget * w, gpointer p)
return 0;
}
int setYscale (GtkWidget * w, gpointer p)
static int setYscale (GtkWidget * w, gpointer p)
{
double v = gtk_spin_button_get_value (GTK_SPIN_BUTTON (w));
g_config->setOption ("SDL.YScale", v);
@ -995,26 +993,7 @@ int setYscale (GtkWidget * w, gpointer p)
return 0;
}
#ifdef OPENGL
void setGl (GtkWidget * w, gpointer p)
{
int scaler;
int opengl = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w));
g_config->getOption ("SDL.SpecialFilter", &scaler);
if (scaler && opengl)
{
FCEUD_PrintError ("Scalers not supported in OpenGL mode.");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), 0);
return;
}
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)))
g_config->setOption ("SDL.OpenGL", 1);
else
g_config->setOption ("SDL.OpenGL", 0);
g_config->save ();
}
void setDoubleBuffering (GtkWidget * w, gpointer p)
static void setDoubleBuffering (GtkWidget * w, gpointer p)
{
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)))
g_config->setOption ("SDL.DoubleBuffering", 1);
@ -1022,7 +1001,6 @@ void setDoubleBuffering (GtkWidget * w, gpointer p)
g_config->setOption ("SDL.DoubleBuffering", 0);
g_config->save ();
}
#endif
void openVideoConfig (void)
{
@ -1032,7 +1010,6 @@ void openVideoConfig (void)
GtkWidget *hbox1;
GtkWidget *scalerLbl;
GtkWidget *DriverCombo;
//GtkWidget *glChk;
GtkWidget *linearChk;
GtkWidget *dbChk;
GtkWidget *palHbox;
@ -1081,11 +1058,6 @@ void openVideoConfig (void)
g_signal_connect (DriverCombo, "changed", G_CALLBACK (setVideoDriver), NULL);
gtk_box_pack_start (GTK_BOX (hbox1), scalerLbl, FALSE, FALSE, 5);
gtk_box_pack_start (GTK_BOX (hbox1), DriverCombo, FALSE, FALSE, 5);
#ifdef OPENGL
// openGL check
//glChk = gtk_check_button_new_with_label ("Enable OpenGL");
//g_signal_connect (glChk, "clicked", G_CALLBACK (setGl), NULL);
//setCheckbox (glChk, "SDL.OpenGL");
// openGL linear filter check
linearChk =
@ -1099,7 +1071,6 @@ void openVideoConfig (void)
g_signal_connect (dbChk, "clicked", G_CALLBACK (setDoubleBuffering),
NULL);
setCheckbox (dbChk, "SDL.DoubleBuffering");
#endif
// Region (NTSC/PAL/Dendy)
palHbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
@ -1176,11 +1147,10 @@ void openVideoConfig (void)
gtk_box_pack_start (GTK_BOX (vbox), lbl, FALSE, FALSE, 5);
gtk_box_pack_start (GTK_BOX (vbox), hbox1, FALSE, FALSE, 5);
#ifdef OPENGL
//gtk_box_pack_start (GTK_BOX (vbox), glChk, FALSE, FALSE, 5);
//#ifdef OPENGL
gtk_box_pack_start (GTK_BOX (vbox), linearChk, FALSE, FALSE, 5);
gtk_box_pack_start (GTK_BOX (vbox), dbChk, FALSE, FALSE, 5);
#endif
//#endif
gtk_box_pack_start (GTK_BOX (vbox), palHbox, FALSE, FALSE, 5);
gtk_box_pack_start (GTK_BOX (vbox), ppuChk, FALSE, FALSE, 5);
#ifdef FRAMESKIP
@ -3447,8 +3417,6 @@ int init_gui_video( videoDriver_t videoDriverSelect )
{
return 0;
}
//drawAreaGL = use_openGL;
//useCairoDraw = !drawAreaGL;
destroy_gui_video();

View File

@ -50,11 +50,6 @@ void openGamepadConfig();
void resizeGtkWindow();
#ifdef OPENGL
void setGl(GtkWidget* w, gpointer p);
void setDoubleBuffering(GtkWidget* w, gpointer p);
#endif
void setStateMenuItem( int i );
void openVideoConfig();

View File

@ -84,6 +84,8 @@ extern bool MaxSpeed;
extern unsigned int gtk_draw_area_width;
extern unsigned int gtk_draw_area_height;
static int sdl_win_width = 0;
static int sdl_win_height = 0;
static SDL_Window *sdlWindow = NULL;
static SDL_Renderer *sdlRenderer = NULL;
static SDL_Texture *sdlTexture = NULL;
@ -467,6 +469,7 @@ int init_gtk3_sdl_video( void )
{
GdkWindow *gdkWin = gtk_widget_get_window(evbox);
Window win;
int sdlRendW, sdlRendH;
int vsyncEnabled=0;
if ( gdkWin == NULL )
@ -508,9 +511,9 @@ int init_gtk3_sdl_video( void )
}
}
//SDL_GetRendererOutputSize( sdlRenderer, &sdlRendW, &sdlRendH );
SDL_GetRendererOutputSize( sdlRenderer, &sdlRendW, &sdlRendH );
//printf("[SDL] Renderer Output Size: %i x %i \n", sdlRendW, sdlRendH );
printf("[SDL] Renderer Output Size: %i x %i \n", sdlRendW, sdlRendH );
sdlTexture = SDL_CreateTexture(sdlRenderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, GLX_NES_WIDTH, GLX_NES_HEIGHT);
@ -519,6 +522,10 @@ int init_gtk3_sdl_video( void )
printf("[SDL] Failed to create texture: %i x %i", GLX_NES_WIDTH, GLX_NES_HEIGHT );
return -1;
}
sdl_win_width = sdlRendW;
sdl_win_height = sdlRendH;
return 0;
}
@ -555,6 +562,11 @@ int gtk3_sdl_render(void)
int nesWidth = GLX_NES_WIDTH;
int nesHeight = GLX_NES_HEIGHT;
if ( (sdl_win_width != gtk_draw_area_width) || (sdl_win_height != gtk_draw_area_height) )
{
gtk3_sdl_resize();
}
if ( glx_shm != NULL )
{
nesWidth = glx_shm->ncol;