部分描画実装中

Graphicsに対する描画の際にRectangleを自動的に記録するというのは止めました。


プログラマが明示的に repaint(x, y , w, h)を呼べるように libbayguiを変更中です。
具体的にプログラマは以下のように repaint(x, y, w, h)を呼ぶことで明示的に部分描画を行えます。

#include <baygui.h>

class Canvas : public Component
{
public:
    Canvas();
    virtual ~Canvas() {};
    virtual void paint(Graphics* g);
    virtual void drawSomething();

private:
    int count;
};

Canvas::Canvas() : count(0)
{
}

void Canvas::paint(Graphics* g)
{
    g->setColor(Color::black);
    g->drawRect(0, 0, getWidth(), getHeight());
    g->setColor(Color::white);
    g->fillRect(10, 10, 30, 30);
    g->setColor(Color::green);
    g->drawString("start", 15, 15);
}

void Canvas::drawSomething()
{
    count++;
    Graphics* g = getGraphics();
    g->setColor(Color::white);
    g->fillRect(10, 10, 30, 30);
    g->setColor(Color::green);
    char buf[32];
    sprintf(buf, "%d", count);
    g->drawString(buf, 15, 15);
    repaint(10, 10, 30, 30);
}

class GTest : public Frame
{
private:
    Canvas* canvas;

public:
    GTest()
    {
        setBounds(200, 200, 400, 300);
        setTitle("Repaint Test");
        canvas = new Canvas();
        canvas->setBounds(100, 100, 100, 100);
        add(canvas);
    }

    ~GTest()
    {
        delete canvas;
    }

    void paint(Graphics* g)
    {
    }

    void processEvent(Event *event)
    {
        if(event->getType() == KeyEvent::KEY_PRESSED)
        {
            canvas->drawSomething();
        }
    }
};

int MonaMain(List<char*>* pekoe)
{
    GTest *test = new GTest();
    test->run();
    delete(test);
    return 0;
}


このアプリケーションではキー押下によって部分再描画し数字がカウントアップされます。
以前のBayGUIであれば、全体描画を伴いもっさりとした描画となっていましたが、部分描画により素早くカウントアップされます。


課題は、初期表示がうまくいかないこと。


いろいろいじっていて思ったのですがTinoさんが指摘されていた通り、ライブラリ中で絶対・相対座標がごっちゃになる事があるので、仮引数名などを工夫して分かりやすくすれば良いかもしれません。