Added renderer selection to GTK launcher.

This commit is contained in:
Matthew Bowra-Dean
2011-01-01 22:21:19 +13:00
committed by Chris Forbes
parent 8ead8635c2
commit a4de4cc266
3 changed files with 82 additions and 7 deletions

View File

@@ -187,14 +187,20 @@ JSValueRef js_launch_mod(JSContextRef ctx, JSObjectRef func,
} }
{ {
gchar * launch_args[] = { "mono", "OpenRA.Game.exe", NULL, "SupportDir=~/.openra", NULL }; gchar * launch_args[] = { "mono", "OpenRA.Game.exe", NULL, NULL, "SupportDir=~/.openra", NULL };
GString * game_mods_arg = g_string_new(NULL); GString * game_mods_arg = g_string_new(NULL);
g_string_printf(game_mods_arg, "Game.Mods=%s", mod_list->str); GString * renderer_arg = g_string_new(NULL);
g_string_printf(game_mods_arg, "Game.Mods=%s", mod_list->str);
g_string_printf(renderer_arg, "Graphics.Renderer=%s", get_renderer() == RENDERER_GL ? "Gl" : "Cg");
launch_args[2] = game_mods_arg->str; launch_args[2] = game_mods_arg->str;
launch_args[3] = renderer_arg->str;
g_spawn_async(NULL, launch_args, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL); g_spawn_async(NULL, launch_args, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
g_string_free(game_mods_arg, TRUE); g_string_free(game_mods_arg, TRUE);
g_string_free(renderer_arg, TRUE);
} }
g_string_free(mod_list, TRUE); g_string_free(mod_list, TRUE);
return JS_NULL; return JS_NULL;

View File

@@ -23,10 +23,13 @@ WebKitWebView * browser;
GtkTreeStore * tree_store; GtkTreeStore * tree_store;
GtkTreeView * tree; GtkTreeView * tree;
GdkPixbuf * generic_mod_icon; GdkPixbuf * generic_mod_icon;
GtkRadioButton * gl_button, * cg_button;
static mod_t mods[MAX_NUM_MODS]; static mod_t mods[MAX_NUM_MODS];
static int mod_count = 0; static int mod_count = 0;
static int renderer = RENDERER_GL;
void free_mod(mod_t * mod) void free_mod(mod_t * mod)
{ {
g_free(mod->key); g_free(mod->key);
@@ -383,9 +386,52 @@ void make_tree_view(void)
gtk_tree_view_append_column(tree, name_column); gtk_tree_view_append_column(tree, name_column);
} }
void renderer_callback(GPid pid, gint status, gpointer data)
{
int * fd = (int *)data;
GString * msg;
msg = util_get_output(*fd);
close(*fd);
g_free(fd);
if (!msg)
return;
if (g_str_has_prefix(msg->str, "Error:"))
{
g_string_free(msg, TRUE);
return;
}
if (0 == strcmp(msg->str, "Gl"))
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gl_button), TRUE);
else
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cg_button), TRUE);
g_string_free(msg, TRUE);
}
void renderer_changed(GtkToggleButton * widget, gpointer user_data)
{
if (!gtk_toggle_button_get_active(widget))
return;
if (GTK_RADIO_BUTTON(widget) == gl_button)
renderer = RENDERER_GL;
else
renderer = RENDERER_CG;
}
int get_renderer(void)
{
return renderer;
}
int main(int argc, char ** argv) int main(int argc, char ** argv)
{ {
GtkWidget * hbox; GtkWidget * hbox1, * hbox2, * vbox;
server_init(WEBSERVER_PORT); server_init(WEBSERVER_PORT);
@@ -406,14 +452,29 @@ int main(int argc, char ** argv)
util_get_mod_list(mod_list_callback); util_get_mod_list(mod_list_callback);
hbox = gtk_hbox_new(FALSE, 0); vbox = gtk_vbox_new(FALSE, 0);
hbox1 = gtk_hbox_new(FALSE, 0);
hbox2 = gtk_hbox_new(FALSE, 0);
gtk_widget_set_size_request(GTK_WIDGET(tree), 250, 0); gtk_widget_set_size_request(GTK_WIDGET(tree), 250, 0);
gtk_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(browser), TRUE, TRUE, 0); gtk_box_pack_end(GTK_BOX(hbox1), GTK_WIDGET(browser), TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(tree), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox1), GTK_WIDGET(tree), TRUE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(window), hbox); gl_button = GTK_RADIO_BUTTON(gtk_radio_button_new_with_label(NULL, "GL Renderer"));
g_signal_connect(gl_button, "toggled", G_CALLBACK(renderer_changed), 0);
cg_button = GTK_RADIO_BUTTON(gtk_radio_button_new_with_label_from_widget(gl_button, "CG Renderer"));
g_signal_connect(cg_button, "toggled", G_CALLBACK(renderer_changed), 0);
util_get_setting("Graphics.Renderer", renderer_callback);
gtk_box_pack_start(GTK_BOX(hbox2), GTK_WIDGET(gl_button), FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox2), GTK_WIDGET(cg_button), FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 10);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show_all(GTK_WIDGET(window)); gtk_widget_show_all(GTK_WIDGET(window));
g_signal_connect(window, "delete-event", G_CALLBACK(window_delete), 0); g_signal_connect(window, "delete-event", G_CALLBACK(window_delete), 0);

View File

@@ -16,6 +16,12 @@ enum
N_COLUMNS N_COLUMNS
}; };
enum
{
RENDERER_GL,
RENDERER_CG
};
#define MAX_NUM_MODS 64 #define MAX_NUM_MODS 64
typedef struct mod_t typedef struct mod_t
@@ -31,4 +37,6 @@ typedef struct mod_t
mod_t * get_mod(gchar const * key); mod_t * get_mod(gchar const * key);
int get_renderer(void);
#endif #endif