Filter's changeRect() and merging problems

Cyrille Berger cberger at cberger.net
Mon Aug 24 13:10:50 CEST 2009


On Saturday 22 August 2009, Dmitry Kazakov wrote:
> Hi all!
>
> I'm revising our merging strategy  at the moment. We have big problems
> with  it. I  want it  to take  into account  need rects  of adjustment
> layers.
>
> At  the   moment  i  have   problems  with  KisFilter::changedRect(rc)
> rect. Could someone  describe me what it is? Is  there any usecase for
> that?
Lets take the example of a translation filter, with a 1px distance.

When you filter (x,y), you need pixel (x-1,y-1) to compute the value of (x,y).

Now lets assume, the pixel (x,y) was changed while drawing, the question is to 
know which pixel of the output needs to be changed, in this case (x+1,y+1)

So for that filter KisFilter::changedRect(rc) return rc.translated(1,1); While 
KisFilter::neededRect(rc) return rc.translated(-1,-1);


> Actually,  i understand  that this  is  a rect  that adjustment  layer
> changed after applying on @rc  rect. But(!) how should update strategy
> treat this rect?  There are two possibilities:
>
> 1) Update  strategy should update  this _expanded_ rect on  all higher
> layers
>
> 2) Update strategy should NOT  pay any attention to this expanded rect
> and all higher layers should update requested rect only.

Lets take an example, here is the layer stack:

3) toplayerwithdrawing
2) filter layer, with a translation of ( x = 20px, y= 10px)
1) bottomlayerwithdrawing

Lets assume we are drawing on "layer 1", we dit a change on rect 
r1=(x=12,y=15,w,h).
This means, that for "layer 2", the rectangle that was changed is in reality 
"r2=(x=32,y=25,w,h)". And that you need to recompose that rectangle r2 with 
the content of "layer 3", while currently we always recompose r1.

I am not really sure where the problem needs to be solved, but I would look at 
setDirty, and when it goes up in the layer stack, it should probably called a 
function of KisNode (that doesn't exist) but that would return the changedRect 
in case of a filter, and the normal rect in other cased.


-- 
Cyrille Berger
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.kde.org/pipermail/kimageshop/attachments/20090824/49114679/attachment.htm 


More information about the kimageshop mailing list