Re: Shifting (scrolling) a translucent surface?

Stefan Salewski <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
On Thu, 2012-03-08 at 01:16 +0100, Stefan Salewski wrote:
> I just tried to make scrolling faster for a small toy application,
> (http://www.ssalewski.de/PetEd.html.en). Indeed I was successful, I am
> reusing the background grid (with correct offset of course) instead of
> redrawing, and I draw the foreground some pixes larger, so that I can
> copy it with some offset to the GTK drawing area, for small scrolls. For
> larger scrolls I have to shift the cairo surface, before I paint to the
> uncovered stripe. Works fine, but now I have to cleanup (and better
> understand) the code...
> 
> For translating/shifting the foreground I have currently code like this
> 
> $ cat pet_canvas.rb
> [...]
> >elsif ((offx.abs < $OFFSET) and (offy.abs < $OFFSET))
> >  return
> >else
> >  t = cr.target
> >  cr.identity_matrix
> >  cr.push_group
> >  cr.set_source(t, offx, offy)
> >  cr.paint
> >  cr.pop_group_to_source
> >  cr.set_operator(Cairo::OPERATOR_CLEAR)
> >  cr.paint
> >  cr.set_operator(Cairo::OPERATOR_OVER)
> >  cr.paint
> >  offx = 0
> >  offy = 0
> >end
> 
> I guess overlapping copies are not allowed for cairo, see
> 
> http://old.nabble.com/is-self-copy-supposed-to-work--td28410811.html
> 
> But is my code a good solution? My foreground picture is translucent, so
> I need that paint with operator_clear to erase all before copying back
> the translated content. Or is there an operator available which does the
> same with only one paint? And, I wonder how the OPERATOR_CLEAR depends
> on the source surface? First I tried cr.set_source_rgba(1,1,1,1) before
> the clear operation, to get a solid source for clearing operation. But
> it seems to be not necessary. Is the source ignored for clear operation?
> May it be a better approach to allocate an new cairo context with empty
> surface, copy the picture to that surface, discard the old and use the
> new one? 
> 


> And, I wonder how the OPERATOR_CLEAR depends
> on the source surface?

OK, from 

http://permalink.gmane.org/gmane.comp.lib.cairo/21625

we have

>(Please notice that setting the source is useless whenever the operator
>is CLEAR,

This is true from my observation.

But from 

http://www.cairographics.org/operators/

we have

>CAIRO_OPERATOR_CLEAR
>The effect of the CLEAR operator depends on the interpretation of the
>source.



--
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.