- //synfig::info("PasteCanv Clip");
- Rect area(desc.get_rect()&full_bounding_rect);
-
- Point min(area.get_min());
- Point max(area.get_max());
-
- if(desc.get_tl()[0]>desc.get_br()[0])
- swap(min[0],max[0]);
- if(desc.get_tl()[1]>desc.get_br()[1])
- swap(min[1],max[1]);
-
- const int
- x(floor_to_int((min[0]-desc.get_tl()[0])/desc.get_pw())),
- y(floor_to_int((min[1]-desc.get_tl()[1])/desc.get_ph())),
- w(ceil_to_int((max[0]-desc.get_tl()[0])/desc.get_pw())-x),
- h(ceil_to_int((max[1]-desc.get_tl()[1])/desc.get_ph())-y);
-
- desc.set_subwindow(x,y,w,h);
-
- Surface pastesurface;
+ if (Color::is_onto(blend_method)) return true;
+
+ /* 'straight' is faster than 'composite' and has the same
+ * effect if the affected area of the lower layer is
+ * transparent; however, if we're not clipping the blit to
+ * just the bounding rectangle, the affected area is the whole
+ * tile, so we can't use this optimisation
+ */
+#ifdef SYNFIG_CLIP_PASTECANVAS
+ if (blend_method==Color::BLEND_COMPOSITE) blend_method=Color::BLEND_STRAIGHT;
+#endif // SYNFIG_CLIP_PASTECANVAS
+ }