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

View File

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

View File

@ -86,15 +86,6 @@ bool ButtonBase::onProcessMessage(JMessage msg)
{
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_FOCUSLEAVE:
if (this->isEnabled()) {
@ -324,6 +315,15 @@ void ButtonBase::onPreferredSize(PreferredSizeEvent& ev)
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()
{
// Deselect

View File

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

View File

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

View File

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

View File

@ -378,10 +378,6 @@ bool Frame::onProcessMessage(JMessage msg)
}
break;
case JM_DRAW:
getTheme()->draw_frame(this, &msg->draw.rect);
return true;
}
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)
{
JWidget child;

View File

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

View File

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

View File

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

View File

@ -39,21 +39,21 @@ bool ImageView::onProcessMessage(JMessage msg)
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);
}
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:
bool onProcessMessage(JMessage msg);
void onPaint(PaintEvent& ev);
private:
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;
return true;
case JM_DRAW:
this->getTheme()->draw_label(this, &msg->draw.rect);
return true;
}
return Widget::onProcessMessage(msg);
}
void Label::onPaint(PaintEvent& ev)
{
getTheme()->paintLabel(ev);
}

View File

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

View File

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

View File

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

View File

@ -139,26 +139,6 @@ bool PopupFrame::onProcessMessage(JMessage msg)
}
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);
@ -192,3 +172,23 @@ void PopupFrame::onPreferredSize(PreferredSizeEvent& ev)
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:
bool onProcessMessage(JMessage msg);
void onPreferredSize(PreferredSizeEvent& ev);
void onPaint(PaintEvent& ev);
private:
bool m_close_on_buttonpressed;

View File

@ -12,7 +12,6 @@
struct BITMAP;
struct FONT;
class Box;
class ButtonBase;
class Entry;
class PaintEvent;
@ -47,19 +46,19 @@ public:
virtual int color_selected() = 0;
virtual int color_background() = 0;
virtual void draw_box(Box* widget, JRect clip) = 0;
virtual void draw_button(ButtonBase* widget, JRect clip) = 0;
virtual void draw_check(ButtonBase* widget, JRect clip) = 0;
virtual void draw_entry(Entry* widget, JRect clip) = 0;
virtual void draw_grid(JWidget widget, JRect clip) = 0;
virtual void draw_label(JWidget widget, JRect clip) = 0;
virtual void draw_link_label(JWidget widget, JRect clip) = 0;
virtual void paintBox(PaintEvent& ev) = 0;
virtual void paintButton(PaintEvent& ev) = 0;
virtual void paintCheckBox(PaintEvent& ev) = 0;
virtual void paintEntry(PaintEvent& ev) = 0;
virtual void paintGrid(PaintEvent& ev) = 0;
virtual void paintLabel(PaintEvent& ev) = 0;
virtual void paintLinkLabel(PaintEvent& ev) = 0;
virtual void draw_listbox(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_menuitem(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 paintSlider(PaintEvent& ev) = 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_scrollbar(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:
virtual void onRegenerate() = 0;

View File

@ -255,28 +255,6 @@ bool TipWindow::onProcessMessage(JMessage msg)
}
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);
@ -310,3 +288,25 @@ void TipWindow::onPreferredSize(PreferredSizeEvent& ev)
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:
bool onProcessMessage(JMessage msg);
void onPreferredSize(PreferredSizeEvent& ev);
void onPaint(PaintEvent& ev);
};
void jwidget_add_tooltip_text(Widget* widget, const char *text);

View File

@ -616,13 +616,16 @@ int SkinTheme::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();
int icon_align = widget->getButtonIconAlign();
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;
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();
int scroll, caret, state, selbeg, selend;
const char *text = widget->getText();
@ -831,8 +838,9 @@ void SkinTheme::draw_entry(Entry* widget, JRect clip)
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;
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);
}
void SkinTheme::draw_link_label(JWidget widget, JRect clip)
void SkinTheme::paintLinkLabel(PaintEvent& ev)
{
Widget* widget = static_cast<Widget*>(ev.getSource());
int bg = BGCOLOR;
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());
}
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;
int bg = BGCOLOR;
@ -1408,8 +1418,9 @@ void SkinTheme::draw_view_viewport(JWidget widget, JRect clip)
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 cpos = jwidget_get_child_rect(window);

View File

@ -422,19 +422,19 @@ public:
int color_selected();
int color_background();
void draw_box(Box* widget, JRect clip);
void draw_button(ButtonBase* widget, JRect clip);
void draw_check(ButtonBase* widget, JRect clip);
void draw_entry(Entry* widget, JRect clip);
void draw_grid(JWidget widget, JRect clip);
void draw_label(JWidget widget, JRect clip);
void draw_link_label(JWidget widget, JRect clip);
void paintBox(PaintEvent& ev);
void paintButton(PaintEvent& ev);
void paintCheckBox(PaintEvent& ev);
void paintEntry(PaintEvent& ev);
void paintGrid(PaintEvent& ev);
void paintLabel(PaintEvent& ev);
void paintLinkLabel(PaintEvent& ev);
void draw_listbox(JWidget widget, JRect clip);
void draw_listitem(JWidget widget, JRect clip);
void draw_menu(JWidget widget, JRect clip);
void draw_menuitem(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 paintSlider(PaintEvent& ev);
void draw_combobox_entry(Entry* widget, JRect clip);
@ -443,7 +443,7 @@ public:
void draw_view(JWidget widget, JRect clip);
void draw_view_scrollbar(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);
int get_button_normal_text_color() const { return makecol(0, 0, 0); }