Found a better way to clear the screen to a black background.

This commit is contained in:
Matthew Budd 2020-05-14 07:55:06 -04:00
parent c702a86b67
commit 9f615d6f81
1 changed files with 15 additions and 45 deletions

View File

@ -66,9 +66,6 @@ bool menuTogglingEnabled = false;
static GtkTreeStore *hotkey_store = NULL;
/* Surface to store black screen */
static cairo_surface_t *surface = NULL;
// check to see if a particular GTK version is available
// 2.24 is required for most of the dialogs -- ie: checkGTKVersion(2,24);
bool checkGTKVersion (int major_required, int minor_required)
@ -1419,11 +1416,6 @@ void quit (void)
while (gtk_events_pending ())
gtk_main_iteration_do (FALSE);
if (surface)
{
cairo_surface_destroy (surface);
surface = NULL;
}
// this is not neccesary to be explicitly called
// it raises a GTK-Critical when its called
//gtk_main_quit();
@ -3015,11 +3007,9 @@ gint handleMouseClick (GtkWidget * widget, GdkEvent * event,
gboolean handle_resize (GtkWindow * win, GdkEvent * event, gpointer data)
{
cairo_t *cr = NULL;
// This should handle resizing so the emulation takes up as much
// of the GTK window as possible
// get new window width/height
int width, height;
width = event->configure.width;
@ -3048,42 +3038,8 @@ gboolean handle_resize (GtkWindow * win, GdkEvent * event, gpointer data)
InitVideo (GameInfo);
}
if (surface)
{
cairo_surface_destroy (surface);
}
surface =
gdk_window_create_similar_surface (gtk_widget_get_window
(evbox), CAIRO_CONTENT_COLOR,
gtk_widget_get_allocated_width
(evbox),
gtk_widget_get_allocated_height
(evbox));
if (surface != NULL)
{
cr = cairo_create (surface);
if (cr != NULL)
{
cairo_set_source_rgb (cr, 0, 0, 0);
cairo_paint (cr);
cairo_destroy (cr);
}
}
//gtk_widget_set_size_request(evbox, (int)(NES_WIDTH*xscale), (int)(NES_HEIGHT*yscale));
// Currently unused; unsure why
/* GdkColor black;
black.red = 0;
black.green = 0;
black.blue = 0;
gtk_widget_modify_bg(GTK_WIDGET(win), GTK_STATE_NORMAL, &black); */
//printf ("DEBUG: new xscale: %f yscale: %f\n", xscale, yscale);
return FALSE;
@ -3095,10 +3051,24 @@ gboolean handle_resize (GtkWindow * win, GdkEvent * event, gpointer data)
*/
static gboolean draw_cb (GtkWidget * widget, cairo_t * cr, gpointer data)
{
guint width, height;
GdkRGBA color;
GtkStyleContext *context;
// Only clear the screen if a game is not loaded
if (GameInfo == 0)
{
cairo_set_source_surface (cr, surface, 0, 0);
context = gtk_widget_get_style_context (widget);
width = gtk_widget_get_allocated_width (widget);
height = gtk_widget_get_allocated_height (widget);
color.red = 0, color.blue = 0; color.green = 0; color.alpha = 1.0;
gtk_render_background( context, cr, 0, 0, width, height );
gdk_cairo_set_source_rgba (cr, &color);
cairo_fill (cr);
cairo_paint (cr);
}