From 20a8054947d38fe892df03fe7c630d0190e13e87 Mon Sep 17 00:00:00 2001 From: dooglus Date: Sat, 31 Mar 2007 19:46:39 +0000 Subject: [PATCH] Added some comments to the code I recently fixed to make it clearer what's going on there. git-svn-id: http://svn.voria.com/code@399 1f10aa63-cdf2-0310-b900-c93c546f37ac --- .../trunk/src/modules/mod_geometry/rectangle.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/synfig-core/trunk/src/modules/mod_geometry/rectangle.cpp b/synfig-core/trunk/src/modules/mod_geometry/rectangle.cpp index d0831e2..9925751 100644 --- a/synfig-core/trunk/src/modules/mod_geometry/rectangle.cpp +++ b/synfig-core/trunk/src/modules/mod_geometry/rectangle.cpp @@ -377,7 +377,7 @@ Rectangle::accelerated_render(Context context,Surface *surface,int quality, cons surface->fill(color); // Check for the case where there is nothing to render - if(right-left<=0||bottom-top<=0) + if (right <= left || bottom <= top) return true; desc.set_subwindow(left,top,right-left,bottom-top); @@ -400,26 +400,31 @@ Rectangle::accelerated_render(Context context,Surface *surface,int quality, cons if(cb)cb->error(strprintf(__FILE__"%d: Accelerated Renderer Failure",__LINE__)); return false; } + Surface subimage; - // Check for the case where there is nothing to render - if(!(right-left<=0||bottom-top<=0)) + // Check for the case where there is something to render + if (right > left && bottom > top) { + // save a copy of the overlapping region from surface into subimage subimage.set_wh(right-left,bottom-top); Surface::pen subimage_pen(subimage.begin()); surface->blit_to(subimage_pen,left,top,right-left,bottom-top); } + // fill surface with the rectangle's colour Surface::alpha_pen surface_pen(surface->begin(),get_amount(),get_blend_method()); - surface->fill(color,surface_pen,w,h); - if(subimage) + if (subimage) { + // copy the saved overlapping region back from subimage into surface Surface::pen pen(surface->get_pen(left,top)); subimage.blit_to(pen); } - else return true; + else + // if there's no overlapping region, return now of the following code corrupts memory + return true; } Surface::alpha_pen pen; -- 2.7.4