Change painting code of some widgets from JM_DRAW to onPaint().

This need future work to avoid using ji_screen and access to the
drawable area only through Graphics pointer inside the PaintEvent.
This commit is contained in:
David Capello 2011-02-12 09:32:57 -03:00
parent 890ec324f9
commit fe50b6a30a
23 changed files with 145 additions and 118 deletions

View File

@ -37,10 +37,6 @@ bool Box::onProcessMessage(JMessage msg)
box_set_position(&msg->setpos.rect); box_set_position(&msg->setpos.rect);
return true; return true;
case JM_DRAW:
getTheme()->draw_box(this, &msg->draw.rect);
return true;
} }
return Widget::onProcessMessage(msg); return Widget::onProcessMessage(msg);
@ -110,6 +106,11 @@ void Box::onPreferredSize(PreferredSizeEvent& ev)
ev.setPreferredSize(Size(w, h)); ev.setPreferredSize(Size(w, h));
} }
void Box::onPaint(PaintEvent& ev)
{
getTheme()->paintBox(ev);
}
void Box::box_set_position(JRect rect) void Box::box_set_position(JRect rect)
{ {
#define FIXUP(x, y, w, h, l, t, r, b) \ #define FIXUP(x, y, w, h, l, t, r, b) \

View File

@ -18,6 +18,7 @@ protected:
// Events // Events
bool onProcessMessage(JMessage msg); bool onProcessMessage(JMessage msg);
void onPreferredSize(PreferredSizeEvent& ev); void onPreferredSize(PreferredSizeEvent& ev);
void onPaint(PaintEvent& ev);
private: private:
void box_set_position(JRect rect); void box_set_position(JRect rect);

View File

@ -86,15 +86,6 @@ bool ButtonBase::onProcessMessage(JMessage msg)
{ {
switch (msg->type) { switch (msg->type) {
case JM_DRAW: {
switch (m_drawType) {
case JI_BUTTON: getTheme()->draw_button(this, &msg->draw.rect); break;
case JI_CHECK: getTheme()->draw_check(this, &msg->draw.rect); break;
case JI_RADIO: getTheme()->draw_radio(this, &msg->draw.rect); break;
}
return true;
}
case JM_FOCUSENTER: case JM_FOCUSENTER:
case JM_FOCUSLEAVE: case JM_FOCUSLEAVE:
if (this->isEnabled()) { if (this->isEnabled()) {
@ -324,6 +315,15 @@ void ButtonBase::onPreferredSize(PreferredSizeEvent& ev)
this->border_width.t + jrect_h(&box) + this->border_width.b); this->border_width.t + jrect_h(&box) + this->border_width.b);
} }
void ButtonBase::onPaint(PaintEvent& ev)
{
switch (m_drawType) {
case JI_BUTTON: getTheme()->paintButton(ev); break;
case JI_CHECK: getTheme()->paintCheckBox(ev); break;
case JI_RADIO: getTheme()->paintRadioButton(ev); break;
}
}
void ButtonBase::generateButtonSelectSignal() void ButtonBase::generateButtonSelectSignal()
{ {
// Deselect // Deselect

View File

@ -41,6 +41,7 @@ protected:
// Events // Events
bool onProcessMessage(JMessage msg); bool onProcessMessage(JMessage msg);
void onPreferredSize(PreferredSizeEvent& ev); void onPreferredSize(PreferredSizeEvent& ev);
void onPaint(PaintEvent& ev);
// New events // New events
virtual void onClick(Event& ev); virtual void onClick(Event& ev);

View File

@ -166,10 +166,6 @@ bool Entry::onProcessMessage(JMessage msg)
{ {
switch (msg->type) { switch (msg->type) {
case JM_DRAW:
getTheme()->draw_entry(this, &msg->draw.rect);
return true;
case JM_TIMER: case JM_TIMER:
if (this->hasFocus() && if (this->hasFocus() &&
msg->timer.timer_id == m_timer_id) { msg->timer.timer_id == m_timer_id) {
@ -384,6 +380,11 @@ void Entry::onPreferredSize(PreferredSizeEvent& ev)
ev.setPreferredSize(w, h); ev.setPreferredSize(w, h);
} }
void Entry::onPaint(PaintEvent& ev)
{
getTheme()->paintEntry(ev);
}
void Entry::onEntryChange() void Entry::onEntryChange()
{ {
EntryChange(); EntryChange();

View File

@ -39,6 +39,7 @@ protected:
// Events // Events
bool onProcessMessage(JMessage msg); bool onProcessMessage(JMessage msg);
void onPreferredSize(PreferredSizeEvent& ev); void onPreferredSize(PreferredSizeEvent& ev);
void onPaint(PaintEvent& ev);
// New Events // New Events
void onEntryChange(); void onEntryChange();

View File

@ -378,10 +378,6 @@ bool Frame::onProcessMessage(JMessage msg)
} }
break; break;
case JM_DRAW:
getTheme()->draw_frame(this, &msg->draw.rect);
return true;
} }
return Widget::onProcessMessage(msg); return Widget::onProcessMessage(msg);
@ -422,6 +418,11 @@ void Frame::onPreferredSize(PreferredSizeEvent& ev)
} }
} }
void Frame::onPaint(PaintEvent& ev)
{
getTheme()->paintFrame(ev);
}
void Frame::window_set_position(JRect rect) void Frame::window_set_position(JRect rect)
{ {
JWidget child; JWidget child;

View File

@ -57,6 +57,7 @@ public:
protected: protected:
bool onProcessMessage(JMessage msg); bool onProcessMessage(JMessage msg);
void onPreferredSize(PreferredSizeEvent& ev); void onPreferredSize(PreferredSizeEvent& ev);
void onPaint(PaintEvent& ev);
private: private:
void window_set_position(JRect rect); void window_set_position(JRect rect);

View File

@ -101,10 +101,6 @@ bool Grid::onProcessMessage(JMessage msg)
setGridPosition(&msg->setpos.rect); setGridPosition(&msg->setpos.rect);
return true; return true;
case JM_DRAW:
getTheme()->draw_grid(this, &msg->draw.rect);
return true;
} }
return Widget::onProcessMessage(msg); return Widget::onProcessMessage(msg);
@ -128,6 +124,11 @@ void Grid::onPreferredSize(PreferredSizeEvent& ev)
ev.setPreferredSize(Size(w, h)); ev.setPreferredSize(Size(w, h));
} }
void Grid::onPaint(PaintEvent& ev)
{
getTheme()->paintGrid(ev);
}
void Grid::sumStripSize(const std::vector<Strip>& strip, int& size) void Grid::sumStripSize(const std::vector<Strip>& strip, int& size)
{ {
int i, j; int i, j;

View File

@ -22,6 +22,7 @@ protected:
// Events // Events
bool onProcessMessage(JMessage msg); bool onProcessMessage(JMessage msg);
void onPreferredSize(PreferredSizeEvent& ev); void onPreferredSize(PreferredSizeEvent& ev);
void onPaint(PaintEvent& ev);
private: private:
struct Cell { struct Cell {

View File

@ -39,21 +39,21 @@ bool ImageView::onProcessMessage(JMessage msg)
return true; return true;
} }
case JM_DRAW: {
struct jrect box, text, icon;
jwidget_get_texticon_info(this, &box, &text, &icon,
getAlign(), m_bmp->w, m_bmp->h);
jdraw_rectexclude(rc, &icon,
jwidget_get_bg_color(this));
blit(m_bmp, ji_screen, 0, 0,
icon.x1, icon.y1, jrect_w(&icon), jrect_h(&icon));
return true;
}
} }
return Widget::onProcessMessage(msg); return Widget::onProcessMessage(msg);
} }
void ImageView::onPaint(PaintEvent& ev)
{
struct jrect box, text, icon;
jwidget_get_texticon_info(this, &box, &text, &icon,
getAlign(), m_bmp->w, m_bmp->h);
jdraw_rectexclude(rc, &icon,
jwidget_get_bg_color(this));
blit(m_bmp, ji_screen, 0, 0,
icon.x1, icon.y1, jrect_w(&icon), jrect_h(&icon));
}

View File

@ -18,6 +18,7 @@ public:
protected: protected:
bool onProcessMessage(JMessage msg); bool onProcessMessage(JMessage msg);
void onPaint(PaintEvent& ev);
private: private:
BITMAP* m_bmp; BITMAP* m_bmp;

View File

@ -34,10 +34,12 @@ bool Label::onProcessMessage(JMessage msg)
msg->reqsize.h += this->border_width.t + this->border_width.b; msg->reqsize.h += this->border_width.t + this->border_width.b;
return true; return true;
case JM_DRAW:
this->getTheme()->draw_label(this, &msg->draw.rect);
return true;
} }
return Widget::onProcessMessage(msg); return Widget::onProcessMessage(msg);
} }
void Label::onPaint(PaintEvent& ev)
{
getTheme()->paintLabel(ev);
}

View File

@ -16,6 +16,7 @@ public:
protected: protected:
bool onProcessMessage(JMessage msg); bool onProcessMessage(JMessage msg);
void onPaint(PaintEvent& ev);
}; };

View File

@ -44,10 +44,6 @@ bool LinkLabel::onProcessMessage(JMessage msg)
invalidate(); invalidate();
break; break;
case JM_DRAW:
getTheme()->draw_link_label(this, &msg->draw.rect);
return true;
case JM_BUTTONRELEASED: case JM_BUTTONRELEASED:
if (isEnabled()) { if (isEnabled()) {
if (!m_url.empty()) if (!m_url.empty())
@ -59,3 +55,8 @@ bool LinkLabel::onProcessMessage(JMessage msg)
return CustomLabel::onProcessMessage(msg); return CustomLabel::onProcessMessage(msg);
} }
void LinkLabel::onPaint(PaintEvent& ev)
{
getTheme()->paintLinkLabel(ev);
}

View File

@ -23,6 +23,7 @@ public:
protected: protected:
bool onProcessMessage(JMessage msg); bool onProcessMessage(JMessage msg);
void onPaint(PaintEvent& ev);
}; };

View File

@ -139,26 +139,6 @@ bool PopupFrame::onProcessMessage(JMessage msg)
} }
break; break;
case JM_DRAW: {
JRect pos = jwidget_get_rect(this);
int oldt;
jdraw_rect(pos, makecol(0, 0, 0));
jrect_shrink(pos, 1);
jdraw_rectfill(pos, this->getBgColor());
oldt = this->border_width.t;
this->border_width.t = 3 * jguiscale();
_ji_theme_textbox_draw(ji_screen, this, NULL, NULL,
this->getBgColor(),
ji_color_foreground());
this->border_width.t = oldt;
jrect_free(pos);
return true;
}
} }
return Frame::onProcessMessage(msg); return Frame::onProcessMessage(msg);
@ -192,3 +172,23 @@ void PopupFrame::onPreferredSize(PreferredSizeEvent& ev)
ev.setPreferredSize(resultSize); ev.setPreferredSize(resultSize);
} }
void PopupFrame::onPaint(PaintEvent& ev)
{
JRect pos = jwidget_get_rect(this);
int oldt;
jdraw_rect(pos, makecol(0, 0, 0));
jrect_shrink(pos, 1);
jdraw_rectfill(pos, this->getBgColor());
oldt = this->border_width.t;
this->border_width.t = 3 * jguiscale();
_ji_theme_textbox_draw(ji_screen, this, NULL, NULL,
this->getBgColor(),
ji_color_foreground());
this->border_width.t = oldt;
jrect_free(pos);
}

View File

@ -20,6 +20,7 @@ public:
protected: protected:
bool onProcessMessage(JMessage msg); bool onProcessMessage(JMessage msg);
void onPreferredSize(PreferredSizeEvent& ev); void onPreferredSize(PreferredSizeEvent& ev);
void onPaint(PaintEvent& ev);
private: private:
bool m_close_on_buttonpressed; bool m_close_on_buttonpressed;

View File

@ -12,7 +12,6 @@
struct BITMAP; struct BITMAP;
struct FONT; struct FONT;
class Box;
class ButtonBase; class ButtonBase;
class Entry; class Entry;
class PaintEvent; class PaintEvent;
@ -47,19 +46,19 @@ public:
virtual int color_selected() = 0; virtual int color_selected() = 0;
virtual int color_background() = 0; virtual int color_background() = 0;
virtual void draw_box(Box* widget, JRect clip) = 0; virtual void paintBox(PaintEvent& ev) = 0;
virtual void draw_button(ButtonBase* widget, JRect clip) = 0; virtual void paintButton(PaintEvent& ev) = 0;
virtual void draw_check(ButtonBase* widget, JRect clip) = 0; virtual void paintCheckBox(PaintEvent& ev) = 0;
virtual void draw_entry(Entry* widget, JRect clip) = 0; virtual void paintEntry(PaintEvent& ev) = 0;
virtual void draw_grid(JWidget widget, JRect clip) = 0; virtual void paintGrid(PaintEvent& ev) = 0;
virtual void draw_label(JWidget widget, JRect clip) = 0; virtual void paintLabel(PaintEvent& ev) = 0;
virtual void draw_link_label(JWidget widget, JRect clip) = 0; virtual void paintLinkLabel(PaintEvent& ev) = 0;
virtual void draw_listbox(JWidget widget, JRect clip) = 0; virtual void draw_listbox(JWidget widget, JRect clip) = 0;
virtual void draw_listitem(JWidget widget, JRect clip) = 0; virtual void draw_listitem(JWidget widget, JRect clip) = 0;
virtual void draw_menu(JWidget widget, JRect clip) = 0; virtual void draw_menu(JWidget widget, JRect clip) = 0;
virtual void draw_menuitem(JWidget widget, JRect clip) = 0; virtual void draw_menuitem(JWidget widget, JRect clip) = 0;
virtual void draw_panel(JWidget widget, JRect clip) = 0; virtual void draw_panel(JWidget widget, JRect clip) = 0;
virtual void draw_radio(ButtonBase* widget, JRect clip) = 0; virtual void paintRadioButton(PaintEvent& ev) = 0;
virtual void draw_separator(JWidget widget, JRect clip) = 0; virtual void draw_separator(JWidget widget, JRect clip) = 0;
virtual void paintSlider(PaintEvent& ev) = 0; virtual void paintSlider(PaintEvent& ev) = 0;
virtual void draw_combobox_entry(Entry* widget, JRect clip) = 0; virtual void draw_combobox_entry(Entry* widget, JRect clip) = 0;
@ -68,7 +67,7 @@ public:
virtual void draw_view(JWidget widget, JRect clip) = 0; virtual void draw_view(JWidget widget, JRect clip) = 0;
virtual void draw_view_scrollbar(JWidget widget, JRect clip) = 0; virtual void draw_view_scrollbar(JWidget widget, JRect clip) = 0;
virtual void draw_view_viewport(JWidget widget, JRect clip) = 0; virtual void draw_view_viewport(JWidget widget, JRect clip) = 0;
virtual void draw_frame(Frame* frame, JRect clip) = 0; virtual void paintFrame(PaintEvent& ev) = 0;
protected: protected:
virtual void onRegenerate() = 0; virtual void onRegenerate() = 0;

View File

@ -255,28 +255,6 @@ bool TipWindow::onProcessMessage(JMessage msg)
} }
break; break;
case JM_DRAW: {
JRect pos = jwidget_get_rect(this);
int oldt;
for (int i=0; i<jguiscale(); ++i) {
jdraw_rect(pos, makecol(0, 0, 0));
jrect_shrink(pos, 1);
}
jdraw_rectfill(pos, this->getBgColor());
oldt = this->border_width.t;
this->border_width.t = 3 * jguiscale();
_ji_theme_textbox_draw(ji_screen, this, NULL, NULL,
this->getBgColor(),
ji_color_foreground());
this->border_width.t = oldt;
jrect_free(pos);
return true;
}
} }
return Frame::onProcessMessage(msg); return Frame::onProcessMessage(msg);
@ -310,3 +288,25 @@ void TipWindow::onPreferredSize(PreferredSizeEvent& ev)
ev.setPreferredSize(resultSize); ev.setPreferredSize(resultSize);
} }
void TipWindow::onPaint(PaintEvent& ev)
{
JRect pos = jwidget_get_rect(this);
int oldt;
for (int i=0; i<jguiscale(); ++i) {
jdraw_rect(pos, makecol(0, 0, 0));
jrect_shrink(pos, 1);
}
jdraw_rectfill(pos, this->getBgColor());
oldt = this->border_width.t;
this->border_width.t = 3 * jguiscale();
_ji_theme_textbox_draw(ji_screen, this, NULL, NULL,
this->getBgColor(),
ji_color_foreground());
this->border_width.t = oldt;
jrect_free(pos);
}

View File

@ -25,6 +25,7 @@ public:
protected: protected:
bool onProcessMessage(JMessage msg); bool onProcessMessage(JMessage msg);
void onPreferredSize(PreferredSizeEvent& ev); void onPreferredSize(PreferredSizeEvent& ev);
void onPaint(PaintEvent& ev);
}; };
void jwidget_add_tooltip_text(Widget* widget, const char *text); void jwidget_add_tooltip_text(Widget* widget, const char *text);

View File

@ -616,13 +616,16 @@ int SkinTheme::color_background()
return COLOR_BACKGROUND; return COLOR_BACKGROUND;
} }
void SkinTheme::draw_box(Box* widget, JRect clip) void SkinTheme::paintBox(PaintEvent& ev)
{ {
jdraw_rectfill(clip, BGCOLOR); Widget* widget = static_cast<Widget*>(ev.getSource());
Graphics* g = ev.getGraphics();
g->fillRect(BGCOLOR, g->getClipBounds());
} }
void SkinTheme::draw_button(ButtonBase* widget, JRect clip) void SkinTheme::paintButton(PaintEvent& ev)
{ {
ButtonBase* widget = static_cast<ButtonBase*>(ev.getSource());
BITMAP* icon_bmp = widget->getButtonIcon(); BITMAP* icon_bmp = widget->getButtonIcon();
int icon_align = widget->getButtonIconAlign(); int icon_align = widget->getButtonIconAlign();
struct jrect box, text, icon; struct jrect box, text, icon;
@ -713,8 +716,9 @@ void SkinTheme::draw_button(ButtonBase* widget, JRect clip)
} }
} }
void SkinTheme::draw_check(ButtonBase* widget, JRect clip) void SkinTheme::paintCheckBox(PaintEvent& ev)
{ {
ButtonBase* widget = static_cast<ButtonBase*>(ev.getSource());
struct jrect box, text, icon; struct jrect box, text, icon;
int bg; int bg;
@ -754,13 +758,16 @@ void SkinTheme::draw_check(ButtonBase* widget, JRect clip)
} }
} }
void SkinTheme::draw_grid(JWidget widget, JRect clip) void SkinTheme::paintGrid(PaintEvent& ev)
{ {
jdraw_rectfill(clip, BGCOLOR); Widget* widget = static_cast<Widget*>(ev.getSource());
Graphics* g = ev.getGraphics();
g->fillRect(BGCOLOR, g->getClipBounds());
} }
void SkinTheme::draw_entry(Entry* widget, JRect clip) void SkinTheme::paintEntry(PaintEvent& ev)
{ {
Entry* widget = static_cast<Entry*>(ev.getSource());
bool password = widget->isPassword(); bool password = widget->isPassword();
int scroll, caret, state, selbeg, selend; int scroll, caret, state, selbeg, selend;
const char *text = widget->getText(); const char *text = widget->getText();
@ -831,8 +838,9 @@ void SkinTheme::draw_entry(Entry* widget, JRect clip)
draw_entry_caret(widget, x, y); draw_entry_caret(widget, x, y);
} }
void SkinTheme::draw_label(JWidget widget, JRect clip) void SkinTheme::paintLabel(PaintEvent& ev)
{ {
Widget* widget = static_cast<Widget*>(ev.getSource());
int bg = BGCOLOR; int bg = BGCOLOR;
jdraw_rectfill(widget->rc, bg); jdraw_rectfill(widget->rc, bg);
@ -840,8 +848,9 @@ void SkinTheme::draw_label(JWidget widget, JRect clip)
draw_textstring(NULL, -1, bg, false, widget, widget->rc, 0); draw_textstring(NULL, -1, bg, false, widget, widget->rc, 0);
} }
void SkinTheme::draw_link_label(JWidget widget, JRect clip) void SkinTheme::paintLinkLabel(PaintEvent& ev)
{ {
Widget* widget = static_cast<Widget*>(ev.getSource());
int bg = BGCOLOR; int bg = BGCOLOR;
jdraw_rectfill(widget->rc, bg); jdraw_rectfill(widget->rc, bg);
@ -1024,8 +1033,9 @@ void SkinTheme::draw_panel(JWidget widget, JRect clip)
jdraw_rectfill(widget->rc, get_panel_face_color()); jdraw_rectfill(widget->rc, get_panel_face_color());
} }
void SkinTheme::draw_radio(ButtonBase* widget, JRect clip) void SkinTheme::paintRadioButton(PaintEvent& ev)
{ {
ButtonBase* widget = static_cast<ButtonBase*>(ev.getSource());
struct jrect box, text, icon; struct jrect box, text, icon;
int bg = BGCOLOR; int bg = BGCOLOR;
@ -1408,8 +1418,9 @@ void SkinTheme::draw_view_viewport(JWidget widget, JRect clip)
jdraw_rectfill(widget->rc, BGCOLOR); jdraw_rectfill(widget->rc, BGCOLOR);
} }
void SkinTheme::draw_frame(Frame* window, JRect clip) void SkinTheme::paintFrame(PaintEvent& ev)
{ {
Frame* window = static_cast<Frame*>(ev.getSource());
JRect pos = jwidget_get_rect(window); JRect pos = jwidget_get_rect(window);
JRect cpos = jwidget_get_child_rect(window); JRect cpos = jwidget_get_child_rect(window);

View File

@ -422,19 +422,19 @@ public:
int color_selected(); int color_selected();
int color_background(); int color_background();
void draw_box(Box* widget, JRect clip); void paintBox(PaintEvent& ev);
void draw_button(ButtonBase* widget, JRect clip); void paintButton(PaintEvent& ev);
void draw_check(ButtonBase* widget, JRect clip); void paintCheckBox(PaintEvent& ev);
void draw_entry(Entry* widget, JRect clip); void paintEntry(PaintEvent& ev);
void draw_grid(JWidget widget, JRect clip); void paintGrid(PaintEvent& ev);
void draw_label(JWidget widget, JRect clip); void paintLabel(PaintEvent& ev);
void draw_link_label(JWidget widget, JRect clip); void paintLinkLabel(PaintEvent& ev);
void draw_listbox(JWidget widget, JRect clip); void draw_listbox(JWidget widget, JRect clip);
void draw_listitem(JWidget widget, JRect clip); void draw_listitem(JWidget widget, JRect clip);
void draw_menu(JWidget widget, JRect clip); void draw_menu(JWidget widget, JRect clip);
void draw_menuitem(JWidget widget, JRect clip); void draw_menuitem(JWidget widget, JRect clip);
void draw_panel(JWidget widget, JRect clip); void draw_panel(JWidget widget, JRect clip);
void draw_radio(ButtonBase* widget, JRect clip); void paintRadioButton(PaintEvent& ev);
void draw_separator(JWidget widget, JRect clip); void draw_separator(JWidget widget, JRect clip);
void paintSlider(PaintEvent& ev); void paintSlider(PaintEvent& ev);
void draw_combobox_entry(Entry* widget, JRect clip); void draw_combobox_entry(Entry* widget, JRect clip);
@ -443,7 +443,7 @@ public:
void draw_view(JWidget widget, JRect clip); void draw_view(JWidget widget, JRect clip);
void draw_view_scrollbar(JWidget widget, JRect clip); void draw_view_scrollbar(JWidget widget, JRect clip);
void draw_view_viewport(JWidget widget, JRect clip); void draw_view_viewport(JWidget widget, JRect clip);
void draw_frame(Frame* frame, JRect clip); void paintFrame(PaintEvent& ev);
void draw_frame_button(ButtonBase* widget, JRect clip); void draw_frame_button(ButtonBase* widget, JRect clip);
int get_button_normal_text_color() const { return makecol(0, 0, 0); } int get_button_normal_text_color() const { return makecol(0, 0, 0); }