Author: Nikita Kitaev <nikita...@gmail.com>
Date:   Mon Mar 21 16:47:55 2011 -0700

Render navigator using cairo

---

 synfig-studio/src/gui/docks/dock_navigator.cpp |   33 ++++++++++++++---------
 1 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/synfig-studio/src/gui/docks/dock_navigator.cpp 
b/synfig-studio/src/gui/docks/dock_navigator.cpp
index 51d86e6..ecc476b 100644
--- a/synfig-studio/src/gui/docks/dock_navigator.cpp
+++ b/synfig-studio/src/gui/docks/dock_navigator.cpp
@@ -39,6 +39,7 @@
 #include <synfig/context.h>
 #include <synfig/target_scanline.h>
 #include <synfig/surface.h>
+#include <gdkmm/general.h>
 
 #include <gtkmm/separator.h>
 
@@ -324,28 +325,25 @@ bool 
studio::Widget_NavView::on_expose_draw(GdkEventExpose */*exp*/)
 
                //draw to drawing area
                Glib::RefPtr<Gdk::GC>   gc = 
Gdk::GC::create(drawto.get_window());
+        Cairo::RefPtr<Cairo::Context> cr = 
drawto.get_window()->create_cairo_context();
 
                //synfig::warning("Nav: Scaling pixmap to off (%d,%d) with size 
(%d,%d)", offx,offy,nw, nh);
                Glib::RefPtr<Gdk::Pixbuf> scalepx = 
prev->scale_simple(nw,nh,Gdk::INTERP_NEAREST);
 
+        cr->save();
+
                //synfig::warning("Nav: Drawing scaled bitmap");
-               drawto.get_window()->draw_pixbuf(
-                       gc, //GC
-                       scalepx, //pixbuf
-                       0, 0,   // Source X and Y
-                       offx, offy,     // Dest X and Y
-                       -1,-1,  // Width and Height
-                       Gdk::RGB_DITHER_MAX, // RgbDither
-                       2, 2 // Dither offset X and Y
-               );
+        Gdk::Cairo::set_source_pixbuf(
+            cr, //cairo context
+            scalepx, //pixbuf
+            offx, offy //coordinates to place upper left corner of pixbuf
+            );
+        cr->paint();
 
                //draw fancy red rectangle around focus point
                const Point &wtl = 
get_canvas_view()->work_area->get_window_tl(),
                                        &wbr = 
get_canvas_view()->work_area->get_window_br();
 
-               gc->set_rgb_fg_color(Gdk::Color("#ff0000"));
-               
gc->set_line_attributes(2,Gdk::LINE_SOLID,Gdk::CAP_BUTT,Gdk::JOIN_MITER);
-
                //it must be clamped to the drawing area though
                int l=0,rw=0,t=0,rh=0;
                const Point fp = 
-get_canvas_view()->work_area->get_focus_point();
@@ -364,7 +362,16 @@ bool studio::Widget_NavView::on_expose_draw(GdkEventExpose 
*/*exp*/)
                //synfig::warning("Nav: tl (%f,%f), br (%f,%f)", 
wtl[0],wtl[1],wbr[0],wbr[1]);
                //synfig::warning("Nav: tl (%f,%f), br (%f,%f)", 
wtl[0],wtl[1],wbr[0],wbr[1]);
                //synfig::warning("Nav: Drawing Rectangle (%d,%d) with dim 
(%d,%d)", l,t,rw,rh);
-               drawto.get_window()->draw_rectangle(gc,false,l,t,rw,rh);
+
+        cr->set_line_width(2.0);
+        cr->set_line_cap(Cairo::LINE_CAP_BUTT);
+        cr->set_line_join(Cairo::LINE_JOIN_MITER);
+        cr->set_antialias(Cairo::ANTIALIAS_NONE);
+        cr->set_source_rgb(1,0,0);
+        cr->rectangle(l,t,rw,rh);
+        cr->stroke();
+
+        cr->restore();
        }
 
        return false; //draw everything else too


------------------------------------------------------------------------------
Enable your software for Intel(R) Active Management Technology to meet the
growing manageability and security demands of your customers. Businesses
are taking advantage of Intel(R) vPro (TM) technology - will your software 
be a part of the solution? Download the Intel(R) Manageability Checker 
today! http://p.sf.net/sfu/intel-dev2devmar
_______________________________________________
Synfig-devl mailing list
Synfig-devl@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to