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 ColorSliders::onSetColor(const app::Color& color) { setAbsSliderValue(Channel::Red, color.getRed()); setAbsSliderValue(Channel::Green, color.getGreen()); setAbsSliderValue(Channel::Blue, color.getBlue()); setAbsSliderValue(Channel::HsvHue, int(color.getHsvHue())); setAbsSliderValue(Channel::HsvSaturation, int(color.getHsvSaturation() * 100.0)); setAbsSliderValue(Channel::HsvValue, int(color.getHsvValue() * 100.0)); setAbsSliderValue(Channel::HslHue, int(color.getHslHue())); setAbsSliderValue(Channel::HslSaturation, int(color.getHslSaturation() * 100.0)); setAbsSliderValue(Channel::HslLightness, int(color.getHslLightness() * 100.0)); setAbsSliderValue(Channel::Gray, color.getGray()); setAbsSliderValue(Channel::Alpha, color.getAlpha()); }
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; }
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 GraySlider::onSetColor(const app::Color& color) { setAbsSliderValue(0, color.getGray()); setAbsSliderValue(1, color.getAlpha()); }
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; } }
void GraySlider::onSetColor(const app::Color& color) { setSliderValue(0, color.getGray()); }