void Recorder::post_draw_CB() { if ( !_paused && _render_on && _play_on) { /*make directory */ char num[32]; //yes, this is absurd sprintf (num, "%06d", _path_pos); //1 million frames //mkdir("imagedir"); string base_dir = recorder_image_path; string filename = base_dir + _cur_path->get_name() + "_" + num + ".png"; cerr << "writing " << filename << "\n"; int w,h; VIEW_SIZE (w,h); Image output (w,h,3); //sketchy/ VIEWimpl* impl = _view->impl(); if (impl) { _view->set_grabbing_screen(1); impl->prepare_buf_read(); impl->read_pixels(output.data()); _view->set_grabbing_screen(0); impl->end_buf_read(); } if ( !output.write_png(filename.c_str())) {cerr << "error writing file!"; } } }
///////////////////////////////////// // draw_start() ///////////////////////////////////// void ProxyStroke::draw_start() { // Push affected state: glPushAttrib( GL_CURRENT_BIT | GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | GL_TEXTURE_BIT ); glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT); // Set state for drawing strokes: glDisable(GL_LIGHTING); // GL_ENABLE_BIT glDisable(GL_CULL_FACE); // GL_ENABLE_BIT if (!_use_depth) glDisable(GL_DEPTH_TEST); // GL_ENABLE_BIT glEnable(GL_BLEND); // GL_ENABLE_BIT glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // GL_COLOR_BUFFER_BIT // Enable or disable texturing: if (_tex) { glEnable(GL_TEXTURE_2D); // GL_ENABLE_BIT _tex->apply_texture(); // GL_TEXTURE_BIT } else { glDisable(GL_TEXTURE_2D); // GL_ENABLE_BIT } glEnableClientState(GL_VERTEX_ARRAY); //GL_CLIENT_VERTEX_ARRAY_BIT) glEnableClientState(GL_COLOR_ARRAY); //GL_CLIENT_VERTEX_ARRAY_BIT) if (_tex) glEnableClientState(GL_TEXTURE_COORD_ARRAY);//GL_CLIENT_VERTEX_ARRAY_BIT) // Set projection and modelview matrices for drawing in NDC: glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadMatrixd(VIEW::peek()->ndc_proj().transpose().matrix()); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); // Cache view related info: if (_stamp != VIEW::stamp()) { _stamp = VIEW::stamp(); int w, h; VIEW_SIZE(w, h); _scale = (float)VIEW::pix_to_ndc_scale(); _max_x = w*_scale/2; _max_y = h*_scale/2; _cam = VIEW::peek_cam()->data()->from(); _cam_at_v = VIEW::peek_cam()->data()->at_v(); _strokes_drawn = 0; } GLSLPaperShader::begin_glsl_paper(_p); }
}; #define VIEW_SIZE(action,label,size) \ { "dockable-preview-size-" action, NULL, \ (label), NULL, NULL, \ (size), \ GIMP_HELP_DOCK_PREVIEW_SIZE } #define TAB_STYLE(action,label,style) \ { "dockable-tab-style-" action, NULL, \ (label), NULL, NULL, \ (style), \ GIMP_HELP_DOCK_TAB_STYLE } static const GimpRadioActionEntry dockable_view_size_actions[] = { VIEW_SIZE ("tiny", N_("_Tiny"), GIMP_VIEW_SIZE_TINY), VIEW_SIZE ("extra-small", N_("E_xtra Small"), GIMP_VIEW_SIZE_EXTRA_SMALL), VIEW_SIZE ("small", N_("_Small"), GIMP_VIEW_SIZE_SMALL), VIEW_SIZE ("medium", N_("_Medium"), GIMP_VIEW_SIZE_MEDIUM), VIEW_SIZE ("large", N_("_Large"), GIMP_VIEW_SIZE_LARGE), VIEW_SIZE ("extra-large", N_("Ex_tra Large"), GIMP_VIEW_SIZE_EXTRA_LARGE), VIEW_SIZE ("huge", N_("_Huge"), GIMP_VIEW_SIZE_HUGE), VIEW_SIZE ("enormous", N_("_Enormous"), GIMP_VIEW_SIZE_ENORMOUS), VIEW_SIZE ("gigantic", N_("_Gigantic"), GIMP_VIEW_SIZE_GIGANTIC) }; static const GimpRadioActionEntry dockable_tab_style_actions[] = { TAB_STYLE ("icon", N_("_Icon"), GIMP_TAB_STYLE_ICON), TAB_STYLE ("preview", N_("Current _Status"), GIMP_TAB_STYLE_PREVIEW), TAB_STYLE ("name", N_("_Text"), GIMP_TAB_STYLE_NAME),