gtk port: resize screen first attempt - very slow
This commit is contained in:
parent
f1ea9cca7a
commit
41dc477e74
|
@ -697,6 +697,8 @@ static int gtkFloatExposeEvent (GtkWidget *widget, GdkEventExpose *event, gpoint
|
||||||
if (!rgb)
|
if (!rgb)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
nds_screen_size_ratio = 256.0/(float)widget->allocation.width;
|
||||||
|
|
||||||
gpu_screen_to_rgb(rgb, SCREENS_PIXEL_SIZE);
|
gpu_screen_to_rgb(rgb, SCREENS_PIXEL_SIZE);
|
||||||
gdk_draw_rgb_image (widget->window,
|
gdk_draw_rgb_image (widget->window,
|
||||||
widget->style->fg_gc[widget->state], 0, 0,
|
widget->style->fg_gc[widget->state], 0, 0,
|
||||||
|
@ -705,6 +707,17 @@ static int gtkFloatExposeEvent (GtkWidget *widget, GdkEventExpose *event, gpoint
|
||||||
rgb, 256*3);
|
rgb, 256*3);
|
||||||
|
|
||||||
free(rgb);
|
free(rgb);
|
||||||
|
if(nds_screen_size_ratio!=1.0){
|
||||||
|
float ssize;
|
||||||
|
ssize = 1/(float)nds_screen_size_ratio;
|
||||||
|
|
||||||
|
GdkPixbuf *origPixbuf, *resizedPixbuf;
|
||||||
|
origPixbuf = gdk_pixbuf_get_from_drawable(NULL, widget->window, NULL, 0,0,0,0, 256, 192*2);
|
||||||
|
resizedPixbuf = gdk_pixbuf_scale_simple ( origPixbuf, ssize*256, ssize*2*192, GDK_INTERP_BILINEAR );
|
||||||
|
gdk_draw_pixbuf( widget->window, NULL, resizedPixbuf, 0,0,0,0, ssize*256, ssize*2*192, GDK_RGB_DITHER_NONE, 0,0);
|
||||||
|
g_object_unref(resizedPixbuf);
|
||||||
|
g_object_unref(origPixbuf);
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -960,20 +973,14 @@ static void Edit_Controls()
|
||||||
|
|
||||||
///////////////////////////////// SCREEN SCALING //////////////////////////////
|
///////////////////////////////// SCREEN SCALING //////////////////////////////
|
||||||
|
|
||||||
#ifdef BROKEN_SCREENSIZE
|
|
||||||
#define MAX_SCREENCOEFF 4
|
#define MAX_SCREENCOEFF 4
|
||||||
|
|
||||||
static void Modify_ScreenCoeff(GtkWidget* widget, gpointer data)
|
static void Modify_ScreenCoeff(GtkWidget* widget, gpointer data)
|
||||||
{
|
{
|
||||||
guint Size = GPOINTER_TO_UINT(data);
|
guint Size = GPOINTER_TO_UINT(data);
|
||||||
static int ScreenCoeff_Size;
|
|
||||||
|
|
||||||
gtk_drawing_area_size(GTK_DRAWING_AREA(pDrawingArea), 256 * Size, 384 * Size);
|
nds_screen_size_ratio = 1/(float)Size;
|
||||||
gtk_widget_set_usize (pDrawingArea, 256 * Size, 384 * Size);
|
|
||||||
|
|
||||||
ScreenCoeff_Size = Size;
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/////////////////////////////// LAYER HIDING /////////////////////////////////
|
/////////////////////////////// LAYER HIDING /////////////////////////////////
|
||||||
|
|
||||||
|
@ -1290,35 +1297,6 @@ static void changesavetype(GtkAction *action, GtkRadioAction *current)
|
||||||
&backupmemorytype, &backupmemorysize);
|
&backupmemorytype, &backupmemorysize);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BROKEN_SCREENSIZE
|
|
||||||
static void desmume_gtk_menu_emulation_display_size (GtkWidget *pMenu, gboolean opengl)
|
|
||||||
{
|
|
||||||
GtkWidget *pMenuItem, *pSubmenu;
|
|
||||||
GtkWidget *mSize_Radio[MAX_SCREENCOEFF];
|
|
||||||
gchar *buf;
|
|
||||||
guint i;
|
|
||||||
|
|
||||||
/* FIXME: this does not work and there's a lot of code that assume the default screen size, drawing function included */
|
|
||||||
if (!opengl) {
|
|
||||||
pSubmenu = gtk_menu_new();
|
|
||||||
pMenuItem = gtk_menu_item_new_with_label("Display size");
|
|
||||||
gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pSubmenu);
|
|
||||||
gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);
|
|
||||||
|
|
||||||
for(i = 1; i < MAX_SCREENCOEFF; i++) {
|
|
||||||
buf = g_strdup_printf("x%d", i);
|
|
||||||
if (i>1)
|
|
||||||
mSize_Radio[i] = gtk_radio_menu_item_new_with_label_from_widget(GTK_RADIO_MENU_ITEM(mSize_Radio[i-1]), buf);
|
|
||||||
else
|
|
||||||
mSize_Radio[i] = gtk_radio_menu_item_new_with_label(NULL, buf);
|
|
||||||
g_free(buf);
|
|
||||||
g_signal_connect(G_OBJECT(mSize_Radio[i]), "activate", G_CALLBACK(Modify_ScreenCoeff), GUINT_TO_POINTER(i));
|
|
||||||
gtk_menu_shell_append(GTK_MENU_SHELL(pSubmenu), mSize_Radio[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void desmume_gtk_menu_emulation_layers (GtkActionGroup *ag)
|
static void desmume_gtk_menu_emulation_layers (GtkActionGroup *ag)
|
||||||
{
|
{
|
||||||
const char *Layers_Menu[10][2] = {
|
const char *Layers_Menu[10][2] = {
|
||||||
|
@ -1471,7 +1449,7 @@ common_gtk_main( struct configured_features *my_config)
|
||||||
pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_window_set_title(GTK_WINDOW(pWindow), "Desmume");
|
gtk_window_set_title(GTK_WINDOW(pWindow), "Desmume");
|
||||||
|
|
||||||
gtk_window_set_resizable(GTK_WINDOW (pWindow), FALSE);
|
gtk_window_set_resizable(GTK_WINDOW (pWindow), TRUE);
|
||||||
|
|
||||||
gtk_window_set_icon(GTK_WINDOW (pWindow), gdk_pixbuf_new_from_xpm_data(DeSmuME_xpm));
|
gtk_window_set_icon(GTK_WINDOW (pWindow), gdk_pixbuf_new_from_xpm_data(DeSmuME_xpm));
|
||||||
|
|
||||||
|
@ -1519,11 +1497,20 @@ common_gtk_main( struct configured_features *my_config)
|
||||||
pToolBar = gtk_ui_manager_get_widget (ui_manager, "/ToolBar");
|
pToolBar = gtk_ui_manager_get_widget (ui_manager, "/ToolBar");
|
||||||
gtk_box_pack_start (GTK_BOX(pVBox), pToolBar, FALSE, FALSE, 0);
|
gtk_box_pack_start (GTK_BOX(pVBox), pToolBar, FALSE, FALSE, 0);
|
||||||
|
|
||||||
|
GtkWidget * pAspectFrame;
|
||||||
|
|
||||||
|
pAspectFrame = gtk_aspect_frame_new (NULL, /* label */
|
||||||
|
0.5, /* center x */
|
||||||
|
0.5, /* center y */
|
||||||
|
256.0/384.0, /* xsize/ysize */
|
||||||
|
FALSE /* ignore child's aspect */);
|
||||||
|
|
||||||
|
gtk_container_add (GTK_CONTAINER (pVBox), pAspectFrame);
|
||||||
|
|
||||||
/* Creating the place for showing DS screens */
|
/* Creating the place for showing DS screens */
|
||||||
pDrawingArea= gtk_drawing_area_new();
|
pDrawingArea= gtk_drawing_area_new();
|
||||||
|
|
||||||
gtk_drawing_area_size(GTK_DRAWING_AREA(pDrawingArea), 256, 384);
|
gtk_widget_set_size_request(GTK_WIDGET(pDrawingArea), 256, 384);
|
||||||
gtk_widget_set_usize (pDrawingArea, 256, 384);
|
|
||||||
|
|
||||||
gtk_widget_set_events(pDrawingArea,
|
gtk_widget_set_events(pDrawingArea,
|
||||||
GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK |
|
GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK |
|
||||||
|
@ -1539,8 +1526,7 @@ common_gtk_main( struct configured_features *my_config)
|
||||||
|
|
||||||
g_signal_connect(G_OBJECT(pDrawingArea), "expose_event",
|
g_signal_connect(G_OBJECT(pDrawingArea), "expose_event",
|
||||||
G_CALLBACK(gtkFloatExposeEvent), NULL ) ;
|
G_CALLBACK(gtkFloatExposeEvent), NULL ) ;
|
||||||
|
gtk_container_add (GTK_CONTAINER (pAspectFrame), pDrawingArea);
|
||||||
gtk_box_pack_start(GTK_BOX(pVBox), pDrawingArea, FALSE, FALSE, 0);
|
|
||||||
|
|
||||||
nds_screen_widget = pDrawingArea;
|
nds_screen_widget = pDrawingArea;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue