2

子に基づいて高さを計算するノードがレンダーツリーにあります。位置とサイズの値は浮動小数点値にすることができ、丸めはレンダリング時に行われます。

    def compute_size(self):
        # Invokes compute_size() of child nodes.
        super(InlineBoxNode, self).compute_size()

        # Iterate over all children and compute the current nodes
        # height.
        self.h = 0
        for node in self.children:
            self.h += node.h

私が直面している問題は次のとおりです。2つのノードが上記のコードのノードの子であると想像してください。両方の子の身長は10.5です。子ノードは、それぞれの前のノードの下に配置されます。つまり、ノード2はに配置されy=10.5ます。レンダリング時に。に10.5なり11ます。2番目のノードはにy=11あり、にありますh=11。つまり、下端はにあり22、ではありません21。(デモについては下の画像を参照してください)

この問題は、常にフロアを丸めることで(つまり、隣接する整数値の低い方に)解決できると思いますが、セマンティクスは正しいでしょうか?

ここに画像の説明を入力してください


編集

床を丸めても解決しないことに気づきました。2番目のノードの下端はになりまし2021が、正しいはずです。

ここに画像の説明を入力してください

4

1 に答える 1

3

したがって、内部表現は float で、実際のレイアウトはピクセル単位です。なんらかの丸めが含まれている必要があります。次に、加算の前に同じ丸め操作を行います。

self.h += int(node.h)

あなたの場合。

于 2013-01-11T17:28:22.800 に答える