static void draw_color(ui::Graphics* g, const Rect& rc, const app::Color& color) { if (rc.w < 1 || rc.h < 1) return; app::Color::Type type = color.getType(); if (type == app::Color::MaskType) { rectgrid(g, rc, gfx::Size(rc.w/4, rc.h/2)); return; } else if (type == app::Color::IndexType) { int index = color.getIndex(); if (index >= 0 && index < get_current_palette()->size()) { g->fillRect(color_utils::color_for_ui(color), rc); } else { g->fillRect(gfx::rgba(0, 0, 0), rc); g->drawLine(gfx::rgba(255, 255, 255), gfx::Point(rc.x+rc.w-2, rc.y+1), gfx::Point(rc.x+1, rc.y+rc.h-2)); } return; } g->fillRect(color_utils::color_for_ui(color), rc); }
int color_utils::color_for_allegro(const app::Color& color, int depth) { int c = -1; switch (color.getType()) { case app::Color::MaskType: c = get_mask_for_bitmap(depth); break; case app::Color::RgbType: case app::Color::HsvType: c = makeacol_depth(depth, color.getRed(), color.getGreen(), color.getBlue(), 255); break; case app::Color::GrayType: c = color.getGray(); if (depth != 8) c = makeacol_depth(depth, c, c, c, 255); break; case app::Color::IndexType: c = color.getIndex(); if (depth != 8) { ASSERT(c >= 0 && c < (int)get_current_palette()->size()); uint32_t _c = get_current_palette()->getEntry(c); c = makeacol_depth(depth, rgba_getr(_c), rgba_getg(_c), rgba_getb(_c), 255); } break; } return c; }
void ColorPopup::setColor(const app::Color& color, const SetColorOptions options) { m_color = color; if (m_simpleColors) { int r = color.getRed(); int g = color.getGreen(); int b = color.getBlue(); int a = color.getAlpha(); int i = g_simplePal->findExactMatch(r, g, b, a, -1); if (i >= 0) m_simpleColors->selectColor(i); else m_simpleColors->deselect(); } if (color.getType() == app::Color::IndexType) { if (m_colorPalette) { m_colorPalette->deselect(); m_colorPalette->selectColor(color.getIndex()); } } m_sliders.setColor(m_color); if (!m_disableHexUpdate) m_hexColorEntry.setColor(m_color); if (options == ChangeType) selectColorType(m_color.getType()); // Set the new color Shade shade = m_oldAndNew.getShade(); shade.resize(2); shade[1] = (color.getType() == app::Color::IndexType ? color.toRgb(): color); if (!m_insideChange) shade[0] = shade[1]; m_oldAndNew.setShade(shade); }
ui::Color color_utils::color_for_ui(const app::Color& color) { ui::Color c = ui::ColorNone; switch (color.getType()) { case app::Color::MaskType: c = ui::ColorNone; break; case app::Color::RgbType: case app::Color::HsvType: c = ui::rgba(color.getRed(), color.getGreen(), color.getBlue(), 255); break; case app::Color::GrayType: c = ui::rgba(color.getGray(), color.getGray(), color.getGray(), 255); break; case app::Color::IndexType: { int i = color.getIndex(); ASSERT(i >= 0 && i < (int)get_current_palette()->size()); uint32_t _c = get_current_palette()->getEntry(i); c = ui::rgba(rgba_getr(_c), rgba_getg(_c), rgba_getb(_c), 255); break; } } return c; }
raster::color_t color_utils::color_for_image(const app::Color& color, PixelFormat format) { if (color.getType() == app::Color::MaskType) return 0; raster::color_t c = -1; switch (format) { case IMAGE_RGB: c = rgba(color.getRed(), color.getGreen(), color.getBlue(), 255); break; case IMAGE_GRAYSCALE: c = graya(color.getGray(), 255); break; case IMAGE_INDEXED: if (color.getType() == app::Color::IndexType) c = color.getIndex(); else c = get_current_palette()->findBestfit(color.getRed(), color.getGreen(), color.getBlue()); break; } return c; }
void ColorBar::onColorButtonChange(const app::Color& color) { if (color.getType() == app::Color::IndexType) m_paletteView.selectColor(color.getIndex()); }