Added renderer selection to GTK launcher.
This commit is contained in:
committed by
Chris Forbes
parent
8ead8635c2
commit
a4de4cc266
@@ -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);
|
||||
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[3] = renderer_arg->str;
|
||||
|
||||
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(renderer_arg, TRUE);
|
||||
}
|
||||
g_string_free(mod_list, TRUE);
|
||||
return JS_NULL;
|
||||
|
||||
@@ -23,10 +23,13 @@ WebKitWebView * browser;
|
||||
GtkTreeStore * tree_store;
|
||||
GtkTreeView * tree;
|
||||
GdkPixbuf * generic_mod_icon;
|
||||
GtkRadioButton * gl_button, * cg_button;
|
||||
|
||||
static mod_t mods[MAX_NUM_MODS];
|
||||
static int mod_count = 0;
|
||||
|
||||
static int renderer = RENDERER_GL;
|
||||
|
||||
void free_mod(mod_t * mod)
|
||||
{
|
||||
g_free(mod->key);
|
||||
@@ -383,9 +386,52 @@ void make_tree_view(void)
|
||||
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)
|
||||
{
|
||||
GtkWidget * hbox;
|
||||
GtkWidget * hbox1, * hbox2, * vbox;
|
||||
|
||||
server_init(WEBSERVER_PORT);
|
||||
|
||||
@@ -406,14 +452,29 @@ int main(int argc, char ** argv)
|
||||
|
||||
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_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(browser), TRUE, TRUE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(tree), TRUE, TRUE, 0);
|
||||
gtk_box_pack_end(GTK_BOX(hbox1), GTK_WIDGET(browser), 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));
|
||||
g_signal_connect(window, "delete-event", G_CALLBACK(window_delete), 0);
|
||||
|
||||
@@ -16,6 +16,12 @@ enum
|
||||
N_COLUMNS
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
RENDERER_GL,
|
||||
RENDERER_CG
|
||||
};
|
||||
|
||||
#define MAX_NUM_MODS 64
|
||||
|
||||
typedef struct mod_t
|
||||
@@ -31,4 +37,6 @@ typedef struct mod_t
|
||||
|
||||
mod_t * get_mod(gchar const * key);
|
||||
|
||||
int get_renderer(void);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user