GUIサーバ高速化/05.部分描画実装(libbaygui)/変更点


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

これは何か

BayGUIに部分描画サポートを導入するための変更・追加点をBaysideさん、Tinoさんに提示します。
Baysideさんの確認・了承が取れた時点で trunk に merge します。
Tinoさんは今回の対応のサポートをしていただきましたので変更点をご確認頂いて、気になる点があれば御指摘頂けると助かります。
この変更を利用すればhttp://wiki.monaos.org/pukiwiki.php?GUI%A5%B5%A1%BC%A5%D0%B9%E2%C2%AE%B2%BD%2F05.%C9%F4%CA%AC%C9%C1%B2%E8%BC%C2%C1%F5%28libbaygui%29%2F%BC%C2%C1%F5#p8ba9951のようなコードがとても速く描画されます。

確認方法

contrib-fast-gui というブランチを分岐した時点の contrib と contrib-fast-guiのdiff を取っています。
細かいオプションは空白・空白行の無視のためのオプションです。
コマンド

$ svn diff --diff-cmd /usr/bin/diff -x "-EbwBu" \
https://svn.sourceforge.net/svnroot/monaos/trunk/contrib/Graphics/libbaygui@3501 \
https://svn.sourceforge.net/svnroot/monaos/branches/contrib-fast-gui/Graphics/libbaygui

変更点

 --- baygui/awt/Graphics.h
 +++ baygui/awt/Graphics.h
 @@ -176,6 +176,10 @@
       @param style フォントスタイル (Font::PLAIN / Font::BOLD / Font::ITALIC / Font::FIXED )
      */
      void setFontStyle(int style);
 +
 +    void drawImage(Image* image, int x, int y, int w, int h, int componentX, int componentY);
 +
 +  private:
    };
  }
  
 --- baygui/awt/Component.h
 +++ baygui/awt/Component.h
 @@ -97,6 +97,7 @@
      
      /** 再描画 */
      virtual void repaint();
 +    virtual void repaint(int x, int y, int w, int h);
      
      /** 部品更新 */
      virtual void update();
 --- awt/Graphics.cpp
 +++ awt/Graphics.cpp
 @@ -60,6 +60,16 @@
      }
    }
  
 +  void Graphics::drawImage(Image* image, int x, int y, int w, int h, int componentX, int componentY)
 +  {
 +    for (int i = 0; i < h; i++) {
 +      for (int j= 0; j < w; j++) {
 +        drawPixel(j + componentX + x, i + componentY + y, image->getPixel(j + x, i + y));
 +      }
 +    }
 +  }
 +
 +
    void Graphics::drawLine(int x1, int y1, int x2, int y2)
    {
      int dx = (x1 > x2) ? (x1 - x2) : (x2 - x1);
 --- awt/Component.cpp
 +++ awt/Component.cpp
 @@ -79,6 +79,13 @@
      }
    }
  
 +  void Component::repaint(int x, int y, int w, int h)
 +  {
 +    if (this->_buffer == NULL) return;
 +    update(x, y, w, h);
 +//  update();
 +  }
 +
    void Component::repaint()
    {
      if (this->_buffer == NULL) return;
 @@ -89,16 +96,17 @@
  
    void Component::update()
    {
 -    update(getX(), getY(), getWidth(), getHeight());
 +    update(0, 0, getWidth(), getHeight());
    }
  
    void Component::update(int x, int y, int w, int h)
    {
      Frame* c = (Frame *)getMainWindow();
 -    c->getGraphics()->drawImage(this->_buffer, getX(), getY());
 -    c->update(c->getX() + c->getInsets()->left + x, c->getY() + c->getInsets()->top + y, w, h);
 +    c->getGraphics()->drawImage(this->_buffer, x, y, w, h, getX(), getY());
 +    c->update(c->getX() + c->getInsets()->left + x + getX(), c->getY() + c->getInsets()->top + y + getY(), w, h);
    }
  
 +
    Component* Component::getMainWindow()
    {
      return (this->parent == NULL) ? this : this->parent->getMainWindow();

コメント

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

お名前:

MENU

now: 3

リンク


最新の20件
2018-05-03 2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 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: 2457, today: 1, yesterday: 1

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

Last-modified: 2008-03-28 (金) 15:47:54 (3738d);  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.050 sec.