GUIサーバ高速化/05.部分描画実装(libbaygui)/実装/AWT/02


Top / GUIサーバ高速化 / 05.部分描画実装(libbaygui) / 実装 / AWT / 02

部分描画イベント

Graphicsのメンバを眺めたところクリッピング関連のメソッドがあったので、 動作を確認してみることにしました。

import java.awt.*;
import java.awt.event.*;

class MyFrame extends Frame {
    public static void main(String args[]) {
        new MyFrame().setVisible(true);
    }
    
    MyFrame() {
        setSize(100, 100);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        add(new Component() {
            public void paint(Graphics g) {
                Rectangle r = g.getClipBounds();
                g.setColor(Color.RED);
                g.drawRect(r.x, r.y, r.width - 1, r.height - 1);
                System.out.println(r);
            }
        });
    }
}

フレーム直だとオフセットが考慮されていなくて厄介なので、 baysideさんのアドバイスを参考にComponentを貼り付けてみました。

ウィンドウで隠してどかしたりなどの実験をしてみたところ、 ちゃんと部分描画要求が来ていることが確認できました。

ここに来て、AWTは部分描画がないのではないかという私の推測が 完全に間違っていたことが明確になりました。 理屈よりも実験、やはり鉄則ですね。

そして複数のウィンドウで隠した状態で前面に出すと、 想定外の挙動を示しました。

なんと隠されていた領域が一度の描画要求に統合されて来ました。 私は今まで二度の描画要求が来るものとばかり思っていたので、 ここでも私の知識の浅さを露呈してしまいました。 お恥ずかしい限りです。

それにしても本当に単純に長方形で合成されていますね。 そのこと自体は想定の範囲内ではありました。 確認のためもうちょっと実験してみました。

なるほど、予想していた通りの動きです。 もっとも今回は描画の最適化アルゴリズムを追及するのが目的ではなく、 AWTの描画イベントの解析が目的なので、このくらいにしておきます。

調査結果

コメント

コメントはありません。 コメント/GUIサーバ高速化/05.部分描画実装(libbaygui)/実装/AWT/02?

お名前:

MENU

now: 3

リンク


最新の20件
2018-10-07 2018-09-20 2018-09-03 2018-05-09 2017-09-29 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-05-29 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 1920, today: 2, yesterday: 1

添付ファイル: fileClipping-8.png 322件 [詳細] fileClipping-7.png 299件 [詳細] fileClipping-6.png 322件 [詳細] fileClipping-5.png 298件 [詳細] fileClipping-4.png 320件 [詳細] fileClipping-3.png 316件 [詳細] fileClipping-2.png 309件 [詳細] fileClipping-1.png 314件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:47:54 (3885d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.036 sec.