29#include <glib/gi18n.h>
58static void app_quit(GSimpleAction *action, GVariant *parameter, gpointer user_data)
67 for (list_iter = appdata->
gui_list; list_iter != NULL; list_iter = g_list_next(list_iter)) {
68 gui = RENDERER_GUI(list_iter->data);
85static void app_about(GSimpleAction *action, GVariant *parameter, gpointer user_data)
94 GString *comment_text;
96 comment_text = g_string_new(_(
"gds-render is a free tool for rendering GDS2 layout files into vector graphics."));
97 g_string_append_printf(comment_text, _(
"\n\nFull git commit: %s"),
_app_git_commit);
99 builder = gtk_builder_new_from_resource(
"/gui/about.glade");
100 dialog = GTK_DIALOG(gtk_builder_get_object(builder,
"about-dialog"));
101 gtk_window_set_transient_for(GTK_WINDOW(dialog), NULL);
103 gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog), comment_text->str);
105 g_string_free(comment_text, TRUE);
108 logo_buf = gdk_pixbuf_new_from_resource_at_scale(
"/images/logo.svg", 100, 100, TRUE, &error);
111 gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(dialog), logo_buf);
114 g_object_unref(logo_buf);
116 fprintf(stderr, _(
"Logo could not be displayed: %s\n"), error->message);
120 gtk_dialog_run(dialog);
122 gtk_widget_destroy(GTK_WIDGET(dialog));
123 g_object_unref(builder);
130 {
"quit",
app_quit, NULL, NULL, NULL, {0} },
131 {
"about",
app_about, NULL, NULL, NULL, {0} },
145 GList **
gui_list = (GList **)user_data;
159 GtkWindow *main_window;
170 gtk_application_add_window(GTK_APPLICATION(
app), main_window);
171 gtk_widget_show(GTK_WIDGET(main_window));
187 GtkApplication *gapp;
188 GString *application_domain;
201 application_domain = g_string_new(NULL);
202 g_string_printf(application_domain,
"de.shimatta.gds_render_%s",
_app_git_commit);
204 gapp = gtk_application_new(application_domain->str, G_APPLICATION_FLAGS_NONE);
205 g_string_free(application_domain, TRUE);
207 g_application_register(G_APPLICATION(gapp), NULL, NULL);
208 g_signal_connect(gapp,
"activate", G_CALLBACK(
gapp_activate), &appdata);
210 if (g_application_get_is_remote(G_APPLICATION(gapp)) == TRUE) {
211 g_application_activate(G_APPLICATION(gapp));
212 printf(_(
"There is already an open instance. Will open second window in that instance.\n"));
217 m_quit = g_menu_new();
218 m_about = g_menu_new();
219 g_menu_append(m_quit, _(
"Quit"),
"app.quit");
220 g_menu_append(m_about, _(
"About"),
"app.about");
221 g_menu_append_section(menu, NULL, G_MENU_MODEL(m_about));
222 g_menu_append_section(menu, NULL, G_MENU_MODEL(m_quit));
223 g_action_map_add_action_entries(G_ACTION_MAP(gapp),
app_actions,
225 gtk_application_set_app_menu(GTK_APPLICATION(gapp), G_MENU_MODEL(menu));
227 g_object_unref(m_quit);
228 g_object_unref(m_about);
229 g_object_unref(menu);
231 app_status = g_application_run(G_APPLICATION(gapp), argc, argv);
232 g_object_unref(gapp);
244 printf(_(
"This is gds-render, version: %s\n\nFor a list of supported commands execute with --help option.\n"),
257 GError *error = NULL;
258 GOptionContext *context;
260 gchar **output_paths = NULL;
261 gchar *mappingname = NULL;
262 gchar *cellname = NULL;
263 gchar **renderer_args = NULL;
264 gboolean version = FALSE, pdf_standalone = FALSE, pdf_layers = FALSE;
269 so_render_params.
so_path = NULL;
272 bindtextdomain(GETTEXT_PACKAGE, LOCALEDATADIR
"/locale");
273 bind_textdomain_codeset(GETTEXT_PACKAGE,
"UTF-8");
274 textdomain(GETTEXT_PACKAGE);
276 GOptionEntry entries[] = {
277 {
"version",
'v', 0, G_OPTION_ARG_NONE, &version, _(
"Print version"), NULL},
278 {
"renderer",
'r', 0, G_OPTION_ARG_STRING_ARRAY, &renderer_args,
279 _(
"Renderer to use. Can be used multiple times."),
"pdf|svg|tikz|ext"},
280 {
"scale",
's', 0, G_OPTION_ARG_INT, &scale, _(
"Divide output coordinates by <SCALE>"),
"<SCALE>" },
281 {
"output-file",
'o', 0, G_OPTION_ARG_FILENAME_ARRAY, &output_paths,
282 _(
"Output file path. Can be used multiple times."),
"PATH" },
283 {
"mapping",
'm', 0, G_OPTION_ARG_FILENAME, &mappingname, _(
"Path for Layer Mapping File"),
"PATH" },
284 {
"cell",
'c', 0, G_OPTION_ARG_STRING, &cellname, _(
"Cell to render"),
"NAME" },
285 {
"tex-standalone",
'a', 0, G_OPTION_ARG_NONE, &pdf_standalone, _(
"Create standalone TeX"), NULL },
286 {
"tex-layers",
'l', 0, G_OPTION_ARG_NONE, &pdf_layers, _(
"Create PDF Layers (OCG)"), NULL },
287 {
"custom-render-lib",
'P', 0, G_OPTION_ARG_FILENAME, &so_render_params.
so_path,
288 _(
"Path to a custom shared object, that implements the necessary rendering functions"),
"PATH"},
289 {
"render-lib-params",
'W', 0, G_OPTION_ARG_STRING, &so_render_params.
cli_params,
290 _(
"Argument string passed to render lib"), NULL},
291 {NULL, 0, 0, 0, NULL, NULL, NULL}
294 context = g_option_context_new(_(
" FILE - Convert GDS file <FILE> to graphic"));
295 g_option_context_add_main_entries(context, entries, NULL);
296 g_option_context_add_group(context, gtk_get_option_group(TRUE));
298 if (!g_option_context_parse(context, &argc, &argv, &error)) {
299 g_print(_(
"Option parsing failed: %s\n"), error->message);
303 g_option_context_free(context);
312 printf(_(
"Scale < 1 not allowed. Setting to 1\n"));
320 for (i = 2; i < argc; i++)
321 printf(_(
"Ignored argument: %s"), argv[i]);
325 &so_render_params, pdf_standalone, pdf_layers, scale);
337 g_strfreev(output_paths);
339 g_strfreev(renderer_args);
345 free(so_render_params.
so_path);
Render according to command line parameters.
Render according to command line parameters.
Header for GdsRenderGui Object.
GtkWindow * gds_render_gui_get_main_window(GdsRenderGui *gui)
Get main window.
GdsRenderGui * gds_render_gui_new()
Create new GdsRenderGui Object.
int command_line_convert_gds(const char *gds_name, const char *cell_name, char **renderers, char **output_file_names, const char *layer_file, struct external_renderer_params *ext_param, gboolean tex_standalone, gboolean tex_layers, double scale)
Convert GDS according to command line parameters.
const char * _app_version_string
This string holds the Git Based Version Number of the app.
const char * _app_git_commit
This string holds the git commit hash of the current HEAD revision.
static void print_version(void)
Print the application version string to stdout.
static const GActionEntry app_actions[]
Contains the application menu entries.
int main(int argc, char **argv)
The "entry point" of the application.
static void app_quit(GSimpleAction *action, GVariant *parameter, gpointer user_data)
Callback for the menu entry 'Quit'.
static void app_about(GSimpleAction *action, GVariant *parameter, gpointer user_data)
Callback for the 'About' menu entry.
static int start_gui(int argc, char **argv)
Start the graphical interface.
static void gapp_activate(GApplication *app, gpointer user_data)
Activation of the GUI.
static void gui_window_closed_callback(GdsRenderGui *gui, gpointer user_data)
Called when a GUI main window is closed.
Structure containing The GtkApplication and a list containing the GdsRenderGui objects.
External renderer paramameters to command line renderer.
char * cli_params
Command line parameters given.
char * so_path
Path to shared object.