Author: Nikita Kitaev <[email protected]>
Date:   Mon Mar 21 15:41:23 2011 -0700

Render canvas using cairo

---

 .../src/gui/workarearenderer/renderer_canvas.cpp   |   49 ++++++++++++++++---
 1 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/synfig-studio/src/gui/workarearenderer/renderer_canvas.cpp 
b/synfig-studio/src/gui/workarearenderer/renderer_canvas.cpp
index 9608079..2cfe499 100644
--- a/synfig-studio/src/gui/workarearenderer/renderer_canvas.cpp
+++ b/synfig-studio/src/gui/workarearenderer/renderer_canvas.cpp
@@ -33,6 +33,7 @@
 #include "renderer_canvas.h"
 #include "workarea.h"
 #include <ETL/misc>
+#include <gdkmm/general.h>
 
 #include "general.h"
 
@@ -130,6 +131,7 @@ Renderer_Canvas::render_vfunc(
                h(get_h());
 
        Glib::RefPtr<Gdk::GC> gc(Gdk::GC::create(drawable));
+       Cairo::RefPtr<Cairo::Context> cr = drawable->create_cairo_context();
 
        if(!tile_book.empty())
        {
@@ -137,6 +139,15 @@ Renderer_Canvas::render_vfunc(
                {
                        if(tile_book[0].first)
                        {
+                cr->save();
+                Gdk::Cairo::set_source_pixbuf(
+                    cr, //cairo context
+                    tile_book[0].first, //pixbuf
+                    x, y //coordinates to place upper left corner of pixbuf
+                    );
+                cr->paint();
+                cr->restore();
+/*
                                drawable->draw_pixbuf(
                                        gc, //GC
                                        tile_book[0].first, //pixbuf
@@ -146,6 +157,7 @@ Renderer_Canvas::render_vfunc(
                                        Gdk::RGB_DITHER_MAX,            // 
RgbDither
                                        2, 2 // Dither offset X and Y
                                        );
+*/
                        }
                        if(tile_book[0].second!=get_refreshes() && 
get_canceled()==false && get_rendering()==false && get_queued()==false)
                                get_work_area()->async_update_preview();
@@ -180,6 +192,17 @@ Renderer_Canvas::render_vfunc(
                                                tx=u*tile_w;
                                                ty=v*tile_w;
 
+
+                        cr->save();
+                        Gdk::Cairo::set_source_pixbuf(
+                            cr, //cairo context
+                            tile_book[index].first, //pixbuf
+                            x+tx, y+ty //coordinates to place upper left 
corner of pixbuf
+                            );
+                        cr->paint();
+                        cr->restore();
+/*
+
                                                drawable->draw_pixbuf(
                                                        gc, //GC
                                                        tile_book[index].first, 
//pixbuf
@@ -189,6 +212,7 @@ Renderer_Canvas::render_vfunc(
                                                        Gdk::RGB_DITHER_MAX,    
        // RgbDither
                                                        2, 2 // Dither offset X 
and Y
                                                        );
+*/
                                        }
                                        
if(tile_book[index].second!=get_refreshes())
                                                needs_refresh=true;
@@ -207,13 +231,22 @@ Renderer_Canvas::render_vfunc(
 
        // Draw the border around the rendered region
        {
-               gc->set_rgb_fg_color(Gdk::Color("#000000"));
-               
gc->set_line_attributes(1,Gdk::LINE_SOLID,Gdk::CAP_BUTT,Gdk::JOIN_MITER);
-               drawable->draw_rectangle(
-                       gc,
-                       false,  // Fill?
-                       round_to_int(x),round_to_int(y),        // x,y
-                       w,h     //w,h
-               );
+        cr->save();
+
+        cr->set_line_cap(Cairo::LINE_CAP_BUTT);
+        cr->set_line_join(Cairo::LINE_JOIN_MITER);
+               cr->set_antialias(Cairo::ANTIALIAS_NONE);
+
+        cr->set_line_width(1.0);
+        cr->set_source_rgb(0,0,0);
+        
+        cr->rectangle(
+            round_to_int(x), round_to_int(y),
+            w, h
+            );
+
+        cr->stroke();
+
+        cr->restore();
        }
 }


------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to