/** * g_resources_open_stream: * @path: A pathname inside the resource * @lookup_flags: A #GResourceLookupFlags * @error: return location for a #GError, or %NULL * * Looks for a file at the specified @path in the set of * globally registered resources and returns a #GInputStream * that lets you read the data. * * @lookup_flags controls the behaviour of the lookup. * * Returns: (transfer full): #GInputStream or %NULL on error. * Free the returned object with g_object_unref() * * Since: 2.32 **/ GInputStream * g_resources_open_stream (const gchar *path, GResourceLookupFlags lookup_flags, GError **error) { GInputStream *res = NULL; GList *l; GInputStream *stream; register_lazy_static_resources (); g_rw_lock_reader_lock (&resources_lock); for (l = registered_resources; l != NULL; l = l->next) { GResource *r = l->data; GError *my_error = NULL; stream = g_resource_open_stream (r, path, lookup_flags, &my_error); if (stream == NULL && g_error_matches (my_error, G_RESOURCE_ERROR, G_RESOURCE_ERROR_NOT_FOUND)) { g_clear_error (&my_error); } else { if (stream == NULL) g_propagate_error (error, my_error); res = stream; break; } } if (l == NULL) g_set_error (error, G_RESOURCE_ERROR, G_RESOURCE_ERROR_NOT_FOUND, _("The resource at '%s' does not exist"), path); g_rw_lock_reader_unlock (&resources_lock); return res; }
bool RunLinuxDialog() { GtkWidget *dialog; int return_value; /* Create the widgets */ dialog = gtk_dialog_new_with_buttons ( "GSdx Config", NULL, /* parent window*/ (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), "OK", GTK_RESPONSE_ACCEPT, // "Cancel", GTK_RESPONSE_REJECT, // Drop because it is too annoying to support call back this way NULL); // The main area for the whole dialog box. GtkWidget* main_box = CreateVbox(); GtkWidget* central_box = CreateVbox(); GtkWidget* advanced_box = CreateVbox(); GtkWidget* debug_box = CreateVbox(); GtkWidget* osd_box = CreateVbox(); // Grab a logo, to make things look nice. if (BigEnough()) { GResource * resources = GSdx_res_get_resource(); GInputStream * ogl_stream=g_resource_open_stream(resources,"/GSdx/res/logo-ogl.bmp",G_RESOURCE_LOOKUP_FLAGS_NONE,NULL); GdkPixbuf * ogl_logo = gdk_pixbuf_new_from_stream(ogl_stream,NULL,NULL); g_object_unref(ogl_stream); GtkWidget* logo_image = gtk_image_new_from_pixbuf(ogl_logo); gtk_box_pack_start(GTK_BOX(main_box), logo_image, true, true, 0); } GtkWidget* main_table = CreateTableInBox(main_box , NULL , 2 , 2); GtkWidget* hw_table = CreateTableInBox(central_box , "Hardware Mode Settings" , 7 , 2); GtkWidget* sw_table = CreateTableInBox(central_box , "Software Mode Settings" , 2 , 2); GtkWidget* hack_table = CreateTableInBox(advanced_box, "Hacks" , 7 , 2); GtkWidget* gl_table = CreateTableInBox(advanced_box, "OpenGL Very Advanced Custom Settings" , 6 , 2); GtkWidget* record_table = CreateTableInBox(debug_box , "Recording Settings" , 4 , 3); GtkWidget* debug_table = CreateTableInBox(debug_box , "OpenGL / GSdx Debug Settings" , 6 , 3); GtkWidget* shader_table = CreateTableInBox(osd_box , "Custom Shader Settings" , 9 , 2); GtkWidget* osd_table = CreateTableInBox(osd_box , "OSD" , 6 , 2); // Populate all the tables populate_main_table(main_table); populate_shader_table(shader_table); populate_hw_table(hw_table); populate_sw_table(sw_table); populate_hack_table(hack_table); populate_gl_table(gl_table); populate_debug_table(debug_table); populate_record_table(record_table); populate_osd_table(osd_table); // Handle some nice tab GtkWidget* notebook = gtk_notebook_new(); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), central_box , gtk_label_new("Renderer Settings")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), advanced_box, gtk_label_new("Advanced Settings")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), debug_box , gtk_label_new("Debug/Recording")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), ScrollMe(osd_box), gtk_label_new("Post-Processing/OSD")); // Put everything in the big box. gtk_container_add(GTK_CONTAINER(main_box), notebook); // Enable/disable hack frame based on enable option s_hack_frame = hack_table; gtk_widget_set_sensitive(s_hack_frame, theApp.GetConfigB("UserHacks")); // Put the box in the dialog and show it to the world. gtk_container_add (GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), main_box); gtk_widget_show_all (dialog); return_value = gtk_dialog_run (GTK_DIALOG (dialog)); // Compatibility & not supported option int mode_width = theApp.GetConfigI("ModeWidth"); int mode_height = theApp.GetConfigI("ModeHeight"); theApp.SetConfig("ModeHeight", mode_height); theApp.SetConfig("ModeWidth", mode_width); theApp.SetConfig("msaa", 0); theApp.SetConfig("windowed", 1); gtk_widget_destroy (dialog); return (return_value == GTK_RESPONSE_ACCEPT); }