I've run into a problem, either with get_abs_position, or with my
understanding of it.

I have been using get_abs_position in order to do coordinate
transformations to position actors relative to each other.  I have a
lot of little spacing problems, which I have tracked down to
get_abs_position returning values with a higher granularity than
get_position (on the order of 3-4 pixels when the stage is full
screen).

I wrote the following simple test app (in Python) that demonstrates the problem.

import clutter
import sys

class Test:

    def __init__ (self):
        self.stage = clutter.Stage()
        self.stage.set_color(clutter.color_parse('DarkSlateGrey'))

        self.stage.fullscreen()
        self.stage.set_property("fullscreen", True)

        self.testTexture = clutter.Rectangle()
        self.testTexture.set_color(clutter.color_parse('Black'))
        self.testTexture.set_size(100, 100)
        self.testTexture.show()
        self.stage.add(self.testTexture)

        self.testTexture.set_position(100,100)
        print "initial position", self.testTexture.get_position()

        self.timeline = clutter.Timeline(1, 15)
        self.timeline.connect("completed", self.doneInitializing)

    def doneInitializing(self, timeline):
        print "done initializing, position:",
self.testTexture.get_position(), ", abs position:",
self.testTexture.get_abs_position()

        for y in range(100):
            self.testTexture.set_position(100,y)
            print "position:", self.testTexture.get_position(), ", abs
position:", self.testTexture.get_abs_position()

        clutter.main_quit()

    def run (self):
        self.stage.show_all()
        self.timeline.start()
        clutter.main()

def main (args):
    app = Test()
    app.run()
    return 0

if __name__ == '__main__':
    sys.exit(main(sys.argv[1:]))

When this app is run, it produces the following output:

initial position (100, 100)
done initializing, position: (100, 100) , abs position: (100, 100)
position: (100, 0) , abs position: (100, 0)
position: (100, 1) , abs position: (100, 3)
position: (100, 2) , abs position: (100, 3)
position: (100, 3) , abs position: (100, 3)
position: (100, 4) , abs position: (100, 6)
position: (100, 5) , abs position: (100, 6)
position: (100, 6) , abs position: (100, 6)
position: (100, 7) , abs position: (100, 9)
position: (100, 8) , abs position: (100, 9)
position: (100, 9) , abs position: (100, 9)
position: (100, 10) , abs position: (100, 12)
position: (100, 11) , abs position: (100, 12)
position: (100, 12) , abs position: (100, 12)
position: (100, 13) , abs position: (100, 15)
position: (100, 14) , abs position: (100, 15)
position: (100, 15) , abs position: (100, 15)
position: (100, 16) , abs position: (100, 18)
position: (100, 17) , abs position: (100, 18)
position: (100, 18) , abs position: (100, 18)
position: (100, 19) , abs position: (100, 21)
position: (100, 20) , abs position: (100, 21)
position: (100, 21) , abs position: (100, 21)
position: (100, 22) , abs position: (100, 25)
position: (100, 23) , abs position: (100, 25)
position: (100, 24) , abs position: (100, 25)
position: (100, 25) , abs position: (100, 25)
position: (100, 26) , abs position: (100, 28)
position: (100, 27) , abs position: (100, 28)
position: (100, 28) , abs position: (100, 28)
position: (100, 29) , abs position: (100, 31)
position: (100, 30) , abs position: (100, 31)
position: (100, 31) , abs position: (100, 31)
position: (100, 32) , abs position: (100, 34)
position: (100, 33) , abs position: (100, 34)
position: (100, 34) , abs position: (100, 34)
position: (100, 35) , abs position: (100, 37)
position: (100, 36) , abs position: (100, 37)
position: (100, 37) , abs position: (100, 37)
position: (100, 38) , abs position: (100, 40)
position: (100, 39) , abs position: (100, 40)
position: (100, 40) , abs position: (100, 40)
position: (100, 41) , abs position: (100, 43)
position: (100, 42) , abs position: (100, 43)
position: (100, 43) , abs position: (100, 43)
position: (100, 44) , abs position: (100, 46)
position: (100, 45) , abs position: (100, 46)
position: (100, 46) , abs position: (100, 46)
position: (100, 47) , abs position: (100, 50)
position: (100, 48) , abs position: (100, 50)
position: (100, 49) , abs position: (100, 50)
position: (100, 50) , abs position: (100, 50)
position: (100, 51) , abs position: (100, 53)
position: (100, 52) , abs position: (100, 53)
position: (100, 53) , abs position: (100, 53)
position: (100, 54) , abs position: (100, 56)
position: (100, 55) , abs position: (100, 56)
position: (100, 56) , abs position: (100, 56)
position: (100, 57) , abs position: (100, 59)
position: (100, 58) , abs position: (100, 59)
position: (100, 59) , abs position: (100, 59)
position: (100, 60) , abs position: (100, 62)
position: (100, 61) , abs position: (100, 62)
position: (100, 62) , abs position: (100, 62)
position: (100, 63) , abs position: (100, 65)
position: (100, 64) , abs position: (100, 65)
position: (100, 65) , abs position: (100, 65)
position: (100, 66) , abs position: (100, 68)
position: (100, 67) , abs position: (100, 68)
position: (100, 68) , abs position: (100, 68)
position: (100, 69) , abs position: (100, 71)
position: (100, 70) , abs position: (100, 71)
position: (100, 71) , abs position: (100, 71)
position: (100, 72) , abs position: (100, 75)
position: (100, 73) , abs position: (100, 75)
position: (100, 74) , abs position: (100, 75)
position: (100, 75) , abs position: (100, 75)
position: (100, 76) , abs position: (100, 78)
position: (100, 77) , abs position: (100, 78)
position: (100, 78) , abs position: (100, 78)
position: (100, 79) , abs position: (100, 81)
position: (100, 80) , abs position: (100, 81)
position: (100, 81) , abs position: (100, 81)
position: (100, 82) , abs position: (100, 84)
position: (100, 83) , abs position: (100, 84)
position: (100, 84) , abs position: (100, 84)
position: (100, 85) , abs position: (100, 87)
position: (100, 86) , abs position: (100, 87)
position: (100, 87) , abs position: (100, 87)
position: (100, 88) , abs position: (100, 90)
position: (100, 89) , abs position: (100, 90)
position: (100, 90) , abs position: (100, 90)
position: (100, 91) , abs position: (100, 93)
position: (100, 92) , abs position: (100, 93)
position: (100, 93) , abs position: (100, 93)
position: (100, 94) , abs position: (100, 96)
position: (100, 95) , abs position: (100, 96)
position: (100, 96) , abs position: (100, 96)
position: (100, 97) , abs position: (100, 100)
position: (100, 98) , abs position: (100, 100)
position: (100, 99) , abs position: (100, 100)

This behavior can be seen in both the x and y dimensions, and the
granularity is larger as the screen/stage gets bigger.

Since get_position is pixel-accurate, I assume I can work around this
by just walking the parents up to the stage using get_position and
doing the math myself.

Is get_abs_position broken, or am I using it incorrectly?  The docs
say "Gets the absolute position of an actor, in pixels, relative to
the stage", which does not seem to be the case.

Any help would be appreciated.

Bob
-- 
To unsubscribe send a mail to [EMAIL PROTECTED]

Reply via email to