diff --git a/data/widgets/canvas_size.xml b/data/widgets/canvas_size.xml index 49bb59533..9d178387b 100644 --- a/data/widgets/canvas_size.xml +++ b/data/widgets/canvas_size.xml @@ -1,5 +1,5 @@ - + @@ -7,9 +7,9 @@ @@ -28,16 +28,16 @@ diff --git a/data/widgets/new_sprite.xml b/data/widgets/new_sprite.xml index 5d4e8dee0..9512ece6b 100644 --- a/data/widgets/new_sprite.xml +++ b/data/widgets/new_sprite.xml @@ -7,9 +7,9 @@ diff --git a/src/app/commands/cmd_switch_colors.cpp b/src/app/commands/cmd_switch_colors.cpp index 0132ec0af..3aa7f000f 100644 --- a/src/app/commands/cmd_switch_colors.cpp +++ b/src/app/commands/cmd_switch_colors.cpp @@ -59,8 +59,12 @@ void SwitchColorsCommand::onExecute(Context* context) ColorBar* colorbar = ColorBar::instance(); app::Color fg = colorbar->getFgColor(); app::Color bg = colorbar->getBgColor(); - colorbar->setFgColor(bg); + + // Change the background and then the foreground color so the color + // spectrum and color wheel shows the foreground color as the + // selected one. colorbar->setBgColor(fg); + colorbar->setFgColor(bg); } Command* CommandFactory::createSwitchColorsCommand() diff --git a/src/app/ui/color_bar.cpp b/src/app/ui/color_bar.cpp index 3f41f11d7..f1649f92d 100644 --- a/src/app/ui/color_bar.cpp +++ b/src/app/ui/color_bar.cpp @@ -318,6 +318,7 @@ void ColorBar::setColorSelector(ColorSelector selector) if (!m_spectrum) { m_spectrum = new ColorSpectrum; m_spectrum->setExpansive(true); + m_spectrum->selectColor(m_fgColor.getColor()); m_spectrum->ColorChange.connect(&ColorBar::onPickSpectrum, this); m_selectorPlaceholder.addChild(m_spectrum); } @@ -772,6 +773,9 @@ void ColorBar::onColorButtonChange(const app::Color& color) m_paletteView.invalidate(); } + if (m_spectrum && m_spectrum->isVisible()) + m_spectrum->selectColor(color); + if (m_wheel && m_wheel->isVisible()) m_wheel->selectColor(color); } diff --git a/src/app/ui/color_spectrum.cpp b/src/app/ui/color_spectrum.cpp index 86af87527..bf9574336 100644 --- a/src/app/ui/color_spectrum.cpp +++ b/src/app/ui/color_spectrum.cpp @@ -14,6 +14,7 @@ #include "app/color_utils.h" #include "app/ui/skin/skin_theme.h" #include "app/ui/status_bar.h" +#include "she/surface.h" #include "ui/graphics.h" #include "ui/message.h" #include "ui/paint_event.h" @@ -69,6 +70,12 @@ app::Color ColorSpectrum::pickColor(const gfx::Point& pos) const MID(0, val, 100)); } +void ColorSpectrum::selectColor(const app::Color& color) +{ + m_color = color; + invalidate(); +} + void ColorSpectrum::onPreferredSize(PreferredSizeEvent& ev) { ev.setPreferredSize(gfx::Size(32*ui::guiscale(), 32*ui::guiscale())); @@ -122,6 +129,20 @@ void ColorSpectrum::onPaint(ui::PaintEvent& ev) g->putPixel(color, rc.x+x, rc.y+y); } } + + if (m_color.getType() != app::Color::MaskType) { + int hue = m_color.getHue(); + int sat = m_color.getSaturation(); + int val = m_color.getValue(); + int lit = (200 - sat) * val / 200; + gfx::Point pos(rc.x + hue * rc.w / 360, + rc.y + rc.h - (lit * rc.h / 100)); + + she::Surface* icon = theme->parts.colorWheelIndicator()->getBitmap(0); + g->drawRgbaSurface(icon, + pos.x-icon->width()/2, + pos.y-icon->height()/2); + } } bool ColorSpectrum::onProcessMessage(ui::Message* msg) diff --git a/src/app/ui/color_spectrum.h b/src/app/ui/color_spectrum.h index a8bd8941f..82939eb57 100644 --- a/src/app/ui/color_spectrum.h +++ b/src/app/ui/color_spectrum.h @@ -22,6 +22,7 @@ namespace app { ~ColorSpectrum(); app::Color pickColor(const gfx::Point& pos) const; + void selectColor(const app::Color& color); // Signals Signal2 ColorChange; @@ -31,6 +32,9 @@ namespace app { void onResize(ui::ResizeEvent& ev) override; void onPaint(ui::PaintEvent& ev) override; bool onProcessMessage(ui::Message* msg) override; + + private: + app::Color m_color; }; } // namespace app diff --git a/src/app/ui/skin/skin_theme.cpp b/src/app/ui/skin/skin_theme.cpp index a26f23a79..748171152 100644 --- a/src/app/ui/skin/skin_theme.cpp +++ b/src/app/ui/skin/skin_theme.cpp @@ -901,8 +901,7 @@ void SkinTheme::paintEntry(PaintEvent& ev) gfx::Rect bounds = widget->getClientBounds(); bool password = widget->isPassword(); int scroll, caret, state, selbeg, selend; - std::string textString = widget->getText() + widget->getSuffix(); - int suffixIndex = widget->getTextLength(); + const std::string& textString = widget->getText(); int c, ch, x, y, w; int caret_x; @@ -929,7 +928,6 @@ void SkinTheme::paintEntry(PaintEvent& ev) base::utf8_const_iterator utf8_it = base::utf8_const_iterator(textString.begin()); int textlen = base::utf8_length(textString); - if (scroll < textlen) utf8_it += scroll; @@ -955,15 +953,6 @@ void SkinTheme::paintEntry(PaintEvent& ev) fg = colors.disabled(); } - // Suffix - if (c >= suffixIndex) { - if (widget->hasFocus()) - break; - - bg = ColorNone; - fg = colors.entrySuffix(); - } - w = g->measureChar(ch).w; if (x+w > bounds.x2()-3) return; @@ -977,6 +966,20 @@ void SkinTheme::paintEntry(PaintEvent& ev) drawEntryCaret(g, widget, caret_x, y); } + // Draw suffix if there is enough space + if (!widget->getSuffix().empty()) { + Rect sufBounds(x, y, + bounds.x2()-3*guiscale()-x, + widget->getTextHeight()); + IntersectClip clip(g, sufBounds); + if (clip) { + drawTextString( + g, widget->getSuffix().c_str(), + colors.entrySuffix(), ColorNone, + widget, sufBounds, 0); + } + } + // Draw the caret if it is next of the last character if ((c == caret) && (state) && (widget->hasFocus()) &&