Fix 1801220: Some Ubuntu Themes don't show the red border in animate edit mode. ...
[synfig.git] / synfig-studio / trunk / src / gtkmm / workarea.cpp
index d662c55..a6ca612 100644 (file)
@@ -787,7 +787,7 @@ WorkArea::WorkArea(etl::loose_handle<synfigapp::CanvasInterface> canvas_interfac
                if(!data.empty())
                {
                        if(!load_sketch(data))
-                               load_sketch(dirname(canvas->get_file_name())+ETL_DIRECTORY_SEPERATOR+basename(data));
+                               load_sketch(dirname(canvas->get_file_name())+ETL_DIRECTORY_SEPARATOR+basename(data));
                }
        }
 
@@ -2067,17 +2067,22 @@ WorkArea::refresh(GdkEventExpose*event)
        // If we are in animate mode, draw a red border around the screen
        if(canvas_interface->get_mode()&synfigapp::MODE_ANIMATE)
        {
-               /*gc->set_rgb_fg_color(Gdk::Color("#FF0000"));
+#ifdef USE_FRAME_BACKGROUND_TO_SHOW_EDIT_MODE
+               // This method of drawing the red border doesn't work on any
+               // Gtk theme which uses the crux-engine, hcengine, industrial,
+               // mist, or ubuntulooks engine, such as the default ubuntu
+               // 'Human' theme.
+               drawing_frame->modify_bg(Gtk::STATE_NORMAL,Gdk::Color("#FF0000"));
+#else
+               // So let's do it in a more primitive fashion.
+               gc->set_rgb_fg_color(Gdk::Color("#FF0000"));
                gc->set_line_attributes(1,Gdk::LINE_SOLID,Gdk::CAP_BUTT,Gdk::JOIN_MITER);
                drawing_area->get_window()->draw_rectangle(
                        gc,
                        false,  // Fill?
                        0,0,    // x,y
-                       drawing_area->get_width()-1,drawing_area->get_height()-1        //w,h
-               );
-               */
-               drawing_frame->modify_bg(Gtk::STATE_NORMAL,Gdk::Color("#FF0000"));
-               //get_window()->set_background(Gdk::Color("#FF0000"));
+                       drawing_area->get_width()-1,drawing_area->get_height()-1); // w,h
+#endif
        }
        else
                drawing_frame->unset_bg(Gtk::STATE_NORMAL);
@@ -2119,6 +2124,8 @@ WorkArea::set_quality(int x)
 }
 
 
+namespace studio
+{
 class WorkAreaProgress : public synfig::ProgressCallback
 {
        WorkArea *work_area;
@@ -2156,6 +2163,7 @@ public:
                return cb->amount_complete(current,total);
        }
 };
+}
 
 bool
 studio::WorkArea::async_update_preview()
@@ -2315,7 +2323,6 @@ again:
        dirty=false;
        get_canvas_view()->reset_cancel_status();
 
-       bool ret=false;
        RendDesc desc=get_canvas()->rend_desc();
        //newdesc->set_flags(RendDesc::PX_ASPECT|RendDesc::IM_SPAN);
 
@@ -2342,7 +2349,7 @@ again:
        if(cb)
                cb->task(strprintf("Rendering canvas %s...",get_canvas()->get_name().c_str()));
 
-       target->render(cb);
+       bool ret = target->render(cb);
 
        if(!ret && !get_canvas_view()->get_cancel_status() && dirty)
        {
@@ -2534,7 +2541,12 @@ studio::WorkArea::queue_render_preview()
        {
                //synfig::info("queue_render_preview(): (re)queuing...");
                //render_idle_func_id=g_idle_add_full(G_PRIORITY_DEFAULT,__render_preview,this,NULL);
-               render_idle_func_id=g_timeout_add_full(G_PRIORITY_DEFAULT,queue_time,__render_preview,this,NULL);
+               render_idle_func_id=g_timeout_add_full(
+                       G_PRIORITY_DEFAULT,     // priority - 
+                       queue_time,                     // interval - the time between calls to the function, in milliseconds (1/1000ths of a second)
+                       __render_preview,       // function - function to call
+                       this,                           // data     - data to pass to function
+                       NULL);                          // notify   - function to call when the idle is removed, or NULL
                queued=true;
        }
 /*     else if(rendering)