render_primitive_list *renderer_sdl2::get_primitives() { auto win = assert_window(); if (win == nullptr) return nullptr; osd_dim nd = win->get_size(); if (nd != m_blit_dim) { m_blit_dim = nd; notify_changed(); } win->target()->set_bounds(m_blit_dim.width(), m_blit_dim.height(), win->pixel_aspect()); return &win->target()->get_primitives(); }
int main( int argc, char *argv[] ) { glob_t globdata; int i, j, l, file_arg_start, new_empty = TRUE, get_screenshot = FALSE; if (argc > 1) { if ( strcmp(argv[1], "--version") == 0 ) { printf("%s\n\n", MT_VERSION); exit(0); } if ( strcmp(argv[1], "--help") == 0 ) { printf("%s\n\n" "Usage: mtpaint [option] [imagefile ... ]\n\n" "Options:\n" " --help Output this help\n" " --version Output version information\n" " -s Grab screenshot\n" " -v Start in viewer mode\n\n" , MT_VERSION); exit(0); } } putenv( "G_BROKEN_FILENAMES=1" ); // Needed to read non ASCII filenames in GTK+2 #if GTK2VERSION >= 4 /* Tablet handling in GTK+ 2.18+ is broken beyond repair if this mode * is set; so unset it, if g_unsetenv() is present */ g_unsetenv("GDK_NATIVE_WINDOWS"); #endif #ifdef U_THREADS /* Enable threading for GLib, but NOT for GTK+ (at least, not yet) */ g_thread_init(NULL); #endif inifile_init("/etc/mtpaint/mtpaintrc", "~/.mtpaint"); #ifdef U_NLS #if GTK_MAJOR_VERSION == 1 /* !!! GTK+1 needs locale set up before gtk_init(); GTK+2, *QUITE* * the opposite - WJ */ setup_language(); #endif #endif #ifdef U_THREADS /* !!! Uncomment to allow GTK+ calls from other threads */ /* gdk_threads_init(); */ #endif gtk_init( &argc, &argv ); gtk_init_bugfixes(); #if GTK_MAJOR_VERSION == 2 { char *theme = inifile_get(DEFAULT_THEME_INI, ""); if (theme[0]) gtk_rc_parse(theme); } #endif #ifdef U_NLS #if GTK_MAJOR_VERSION == 2 /* !!! GTK+2 starts acting up if this is before gtk_init() - WJ */ setup_language(); #endif bindtextdomain("mtpaint", MT_LANG_DEST); textdomain("mtpaint"); #if GTK_MAJOR_VERSION == 2 bind_textdomain_codeset("mtpaint", "UTF-8"); #endif #endif file_arg_start = 1; if (argc > 1) // Argument received, so assume user is trying to load a file { if ( strcmp(argv[1], "-g") == 0 ) // Loading GIF animation frames { file_arg_start+=2; sscanf(argv[2], "%i", &preserved_gif_delay); } if ( strcmp(argv[1], "-v") == 0 ) // Viewer mode { file_arg_start++; viewer_mode = TRUE; } if ( strcmp(argv[1], "-s") == 0 ) // Screenshot { file_arg_start++; get_screenshot = TRUE; } if ( strstr(argv[0], "mtv") != NULL ) viewer_mode = TRUE; } /* Something else got passed in */ l = argc - file_arg_start; while (l) { /* First, process wildcarded args */ memset(&globdata, 0, sizeof(globdata)); /* !!! I avoid GLOB_DOOFFS here, because glibc before version 2.2 mishandled it, * and quite a few copycats had cloned those buggy versions, some libc * implementors among them. So it is possible to encounter a broken function * in the wild, and playing it safe doesn't cost all that much - WJ */ for (i = file_arg_start , j = 0; i < argc; i++) { if (strcmp(argv[i], "-w")) continue; j++; if (++i >= argc) break; j++; // Ignore errors - be glad for whatever gets returned glob(argv[i], (j > 2 ? GLOB_APPEND : 0), NULL, &globdata); } files_passed = l - j + globdata.gl_pathc; /* If no wildcarded args */ file_args = argv + file_arg_start; if (!j) break; /* If no normal args */ file_args = globdata.gl_pathv; if (l <= j) break; /* Allocate space for both kinds of args together */ file_args = calloc(files_passed + 1, sizeof(char *)); // !!! Die by SIGSEGV if this allocation fails /* Copy normal args if any */ for (i = file_arg_start , j = 0; i < argc; i++) { if (!strcmp(argv[i], "-w")) i++; // Skip the pair else file_args[j++] = argv[i]; } /* Copy globbed args after them */ if (globdata.gl_pathc) memcpy(file_args + j, globdata.gl_pathv, globdata.gl_pathc * sizeof(char *)); break; } string_init(); // Translate static strings var_init(); // Load INI variables mem_init(); // Set up memory & back end layers_init(); init_cols(); if ( get_screenshot ) { if (load_image(NULL, FS_PNG_LOAD, FT_PIXMAP) == 1) new_empty = FALSE; // Successfully grabbed so no new empty else get_screenshot = FALSE; // Screenshot failed } main_init(); // Create main window if ( get_screenshot ) { do_new_chores(FALSE); notify_changed(); } else { if ((files_passed > 0) && !do_a_load(file_args[0], FALSE)) new_empty = FALSE; } if ( new_empty ) // If no file was loaded, start with a blank canvas { create_default_image(); } update_menus(); THREADS_ENTER(); gtk_main(); THREADS_LEAVE(); spawn_quit(); inifile_quit(); return 0; }