// TODO this code is exactly the same as draw_alpha_slider() with a ui::Graphics void draw_alpha_slider(she::Surface* s, const gfx::Rect& rc, const app::Color& color) { const int xmax = MAX(1, rc.w-1); const doc::color_t c = (color.getType() != app::Color::MaskType ? doc::rgba(color.getRed(), color.getGreen(), color.getBlue(), 255): 0); for (int x=0; x<rc.w; ++x) { const int a = (255 * x / xmax); const doc::color_t c1 = doc::rgba_blender_normal(gridColor1, c, a); const doc::color_t c2 = doc::rgba_blender_normal(gridColor2, c, a); const int mid = rc.h/2; const int odd = (x / rc.h) & 1; s->drawVLine( app::color_utils::color_for_ui(app::Color::fromImage(IMAGE_RGB, odd ? c2: c1)), rc.x+x, rc.y, mid); s->drawVLine( app::color_utils::color_for_ui(app::Color::fromImage(IMAGE_RGB, odd ? c1: c2)), rc.x+x, rc.y+mid, rc.h-mid); } }
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); }
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); }
raster::color_t color_utils::color_for_layer(const app::Color& color, Layer* layer) { raster::color_t pixel_color; if (color.getType() == app::Color::MaskType) { pixel_color = layer->getSprite()->getTransparentColor(); } else { PixelFormat format = layer->getSprite()->getPixelFormat(); pixel_color = color_for_image(color, format); } return fixup_color_for_layer(layer, pixel_color); }
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; }
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; }
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; }
void ColorBar::onColorButtonChange(const app::Color& color) { if (color.getType() == app::Color::IndexType) m_paletteView.selectColor(color.getIndex()); }
void EyedropperCommand::pickSample(const doc::Site& site, const gfx::Point& pixelPos, app::Color& color) { // Check if we've to grab alpha channel or the merged color. Preferences& pref = Preferences::instance(); bool allLayers = (pref.eyedropper.sample() == app::gen::EyedropperSample::ALL_LAYERS); ColorPicker picker; picker.pickColor(site, pixelPos, (allLayers ? ColorPicker::FromComposition: ColorPicker::FromActiveLayer)); app::gen::EyedropperChannel channel = pref.eyedropper.channel(); app::Color picked = picker.color(); switch (channel) { case app::gen::EyedropperChannel::COLOR_ALPHA: color = picked; break; case app::gen::EyedropperChannel::COLOR: if (picked.getAlpha() > 0) color = app::Color::fromRgb(picked.getRed(), picked.getGreen(), picked.getBlue(), color.getAlpha()); break; case app::gen::EyedropperChannel::ALPHA: switch (color.getType()) { case app::Color::RgbType: case app::Color::IndexType: color = app::Color::fromRgb(color.getRed(), color.getGreen(), color.getBlue(), picked.getAlpha()); break; case app::Color::HsvType: color = app::Color::fromHsv(color.getHue(), color.getSaturation(), color.getValue(), picked.getAlpha()); break; case app::Color::GrayType: color = app::Color::fromGray(color.getGray(), picked.getAlpha()); break; } break; case app::gen::EyedropperChannel::RGBA: if (picked.getType() == app::Color::RgbType) color = picked; else color = app::Color::fromRgb(picked.getRed(), picked.getGreen(), picked.getBlue(), picked.getAlpha()); break; case app::gen::EyedropperChannel::RGB: if (picked.getAlpha() > 0) color = app::Color::fromRgb(picked.getRed(), picked.getGreen(), picked.getBlue(), color.getAlpha()); break; case app::gen::EyedropperChannel::HSVA: if (picked.getType() == app::Color::HsvType) color = picked; else color = app::Color::fromHsv(picked.getHue(), picked.getSaturation(), picked.getValue(), picked.getAlpha()); break; case app::gen::EyedropperChannel::HSV: if (picked.getAlpha() > 0) color = app::Color::fromHsv(picked.getHue(), picked.getSaturation(), picked.getValue(), color.getAlpha()); break; case app::gen::EyedropperChannel::GRAYA: if (picked.getType() == app::Color::GrayType) color = picked; else color = app::Color::fromGray(picked.getGray(), picked.getAlpha()); break; case app::gen::EyedropperChannel::GRAY: if (picked.getAlpha() > 0) color = app::Color::fromGray(picked.getGray(), color.getAlpha()); break; case app::gen::EyedropperChannel::INDEX: color = app::Color::fromIndex(picked.getIndex()); break; } }
static void update_cursor_color() { ui_cursor_color = color_utils::color_for_ui(cursor_color); is_cursor_mask = (cursor_color.getType() == app::Color::MaskType); }