void ColorButton::onPaint(PaintEvent& ev) // TODO use "ev.getGraphics()" { struct jrect box, text, icon; jwidget_get_texticon_info(this, &box, &text, &icon, 0, 0, 0); int bg = getBgColor(); if (bg < 0) bg = ji_color_face(); jdraw_rectfill(this->rc, bg); Color color; // When the button is pushed, show the negative if (isSelected()) { color = Color::fromRgb(255-m_color.getRed(), 255-m_color.getGreen(), 255-m_color.getBlue()); } // When the button is not pressed, show the real color else color = this->m_color; draw_color_button (ji_screen, this->getBounds(), true, true, true, true, true, true, true, true, this->m_imgtype, color, this->hasMouseOver(), false); // Draw text std::string str = m_color.toFormalString(this->m_imgtype, false); setTextQuiet(str.c_str()); jwidget_get_texticon_info(this, &box, &text, &icon, 0, 0, 0); int textcolor = makecol(255, 255, 255); if (color.isValid()) textcolor = color_utils::blackandwhite_neg(color.getRed(), color.getGreen(), color.getBlue()); jdraw_text(ji_screen, getFont(), getText(), text.x1, text.y1, textcolor, -1, false, jguiscale()); }
void StatusBar::onPaint(ui::PaintEvent& ev) { SkinTheme* theme = static_cast<SkinTheme*>(this->getTheme()); ui::Color textColor = theme->getColorById(kStatusBarText); Rect rc = getClientBounds(); Graphics* g = ev.getGraphics(); g->fillRect(getBgColor(), rc); rc.shrink(Border(2, 1, 2, 2)*jguiscale()); int x = rc.x + 4*jguiscale(); // Color if (m_state == SHOW_COLOR) { // Draw eyedropper icon BITMAP* icon = theme->get_toolicon("eyedropper"); if (icon) { g->drawAlphaBitmap(icon, x, rc.y + rc.h/2 - icon->h/2); x += icon->w + 4*jguiscale(); } // Draw color draw_color_button(g, gfx::Rect(x, rc.y, 32*jguiscale(), rc.h), true, true, true, true, true, true, true, true, app_get_current_pixel_format(), m_color, false, false); x += (32+4)*jguiscale(); // Draw color description std::string str = m_color.toHumanReadableString(app_get_current_pixel_format(), app::Color::LongHumanReadableString); if (m_alpha < 255) { char buf[512]; usprintf(buf, ", Alpha %d", m_alpha); str += buf; } g->drawString(str, textColor, ColorNone, false, gfx::Point(x, rc.y + rc.h/2 - text_height(getFont())/2)); x += ji_font_text_len(getFont(), str.c_str()) + 4*jguiscale(); } // Show tool if (m_state == SHOW_TOOL) { // Draw eyedropper icon BITMAP* icon = theme->get_toolicon(m_tool->getId().c_str()); if (icon) { g->drawAlphaBitmap(icon, x, rc.y + rc.h/2 - icon->h/2); x += icon->w + 4*jguiscale(); } } // Status bar text if (getTextLength() > 0) { g->drawString(getText(), textColor, ColorNone, false, gfx::Point(x, rc.y + rc.h/2 - text_height(getFont())/2)); x += ji_font_text_len(getFont(), getText().c_str()) + 4*jguiscale(); } // Draw progress bar if (!m_progress.empty()) { int width = 64; int x = rc.x2() - (width+4); for (ProgressList::iterator it = m_progress.begin(); it != m_progress.end(); ++it) { Progress* progress = *it; theme->paintProgressBar(g, gfx::Rect(x, rc.y, width, rc.h), progress->getPos()); x -= width+4; } } updateSubwidgetsVisibility(); }