diff --git a/python/port/mod/kandinsky/modkandinsky.cpp b/python/port/mod/kandinsky/modkandinsky.cpp index 97b070e51..cf1b326d3 100644 --- a/python/port/mod/kandinsky/modkandinsky.cpp +++ b/python/port/mod/kandinsky/modkandinsky.cpp @@ -31,7 +31,7 @@ mp_obj_t modkandinsky_color(size_t n_args, const mp_obj_t *args) { assert(n_args == 3); color = mp_obj_new_tuple(n_args, args); } - return TupleForKDColor(MicroPython::ColorParser::ParseColor(color)); + return TupleForKDColor(MicroPython::Color::Parse(color)); } /* Calling ExecutionEnvironment::displaySandbox() hides the console and switches @@ -48,7 +48,7 @@ mp_obj_t modkandinsky_get_pixel(mp_obj_t x, mp_obj_t y) { mp_obj_t modkandinsky_set_pixel(mp_obj_t x, mp_obj_t y, mp_obj_t input) { KDPoint point(mp_obj_get_int(x), mp_obj_get_int(y)); - KDColor kdColor = MicroPython::ColorParser::ParseColor(input); + KDColor kdColor = MicroPython::Color::Parse(input); MicroPython::ExecutionEnvironment::currentExecutionEnvironment()->displaySandbox(); KDIonContext::sharedContext()->setPixel(point, kdColor); return mp_const_none; @@ -58,8 +58,8 @@ mp_obj_t modkandinsky_set_pixel(mp_obj_t x, mp_obj_t y, mp_obj_t input) { mp_obj_t modkandinsky_draw_string(size_t n_args, const mp_obj_t * args) { const char * text = mp_obj_str_get_str(args[0]); KDPoint point(mp_obj_get_int(args[1]), mp_obj_get_int(args[2])); - KDColor textColor = (n_args >= 4) ? MicroPython::ColorParser::ParseColor(args[3]) : KDColorBlack; - KDColor backgroundColor = (n_args >= 5) ? MicroPython::ColorParser::ParseColor(args[4]) : KDColorWhite; + KDColor textColor = (n_args >= 4) ? MicroPython::Color::Parse(args[3]) : KDColorBlack; + KDColor backgroundColor = (n_args >= 5) ? MicroPython::Color::Parse(args[4]) : KDColorWhite; MicroPython::ExecutionEnvironment::currentExecutionEnvironment()->displaySandbox(); KDIonContext::sharedContext()->drawString(text, point, KDFont::LargeFont, textColor, backgroundColor); /* Before and after execution of "modkandinsky_draw_string", @@ -89,7 +89,7 @@ mp_obj_t modkandinsky_fill_rect(size_t n_args, const mp_obj_t * args) { y = y - height; } KDRect rect(x, y, width, height); - KDColor color = MicroPython::ColorParser::ParseColor(args[4]); + KDColor color = MicroPython::Color::Parse(args[4]); MicroPython::ExecutionEnvironment::currentExecutionEnvironment()->displaySandbox(); KDIonContext::sharedContext()->fillRect(rect, color); // Cf comment on modkandinsky_draw_string diff --git a/python/port/mod/turtle/modturtle.cpp b/python/port/mod/turtle/modturtle.cpp index e6bafba70..4d48fe17b 100644 --- a/python/port/mod/turtle/modturtle.cpp +++ b/python/port/mod/turtle/modturtle.cpp @@ -139,7 +139,7 @@ mp_obj_t modturtle_pencolor(size_t n_args, const mp_obj_t *args) { // pencolor() KDColor c = sTurtle.color(); mp_obj_t mp_col[3]; - if(sTurtle.colorMode() == MicroPython::ColorParser::ColorMode::MaxIntensity255){ + if(sTurtle.colorMode() == MicroPython::Color::Mode::MaxIntensity255){ mp_col[0] = mp_obj_new_int_from_uint(c.red()); mp_col[1] = mp_obj_new_int_from_uint(c.green()); mp_col[2] = mp_obj_new_int_from_uint(c.blue()); @@ -161,7 +161,7 @@ mp_obj_t modturtle_pencolor(size_t n_args, const mp_obj_t *args) { assert(n_args == 3); color = mp_obj_new_tuple(n_args, args); } - sTurtle.setColor(MicroPython::ColorParser::ParseColor(color, sTurtle.colorMode())); + sTurtle.setColor(MicroPython::Color::Parse(color, sTurtle.colorMode())); return mp_const_none; } @@ -170,12 +170,12 @@ mp_obj_t modturtle_colormode(size_t n_args, const mp_obj_t *args) { return mp_obj_new_int_from_uint(static_cast(sTurtle.colorMode())); } else{ int colorMode = mp_obj_get_int(args[0]); - if (colorMode != static_cast(MicroPython::ColorParser::ColorMode::MaxIntensity1) && - colorMode != static_cast(MicroPython::ColorParser::ColorMode::MaxIntensity255)) { + if (colorMode != static_cast(MicroPython::Color::Mode::MaxIntensity1) && + colorMode != static_cast(MicroPython::Color::Mode::MaxIntensity255)) { mp_raise_ValueError("Colormode can be 1 or 255"); return mp_const_none; } - sTurtle.setColorMode(static_cast(colorMode)); + sTurtle.setColorMode(static_cast(colorMode)); return mp_const_none; } } diff --git a/python/port/mod/turtle/turtle.h b/python/port/mod/turtle/turtle.h index 2c49c6b1d..55a1c5e3c 100644 --- a/python/port/mod/turtle/turtle.h +++ b/python/port/mod/turtle/turtle.h @@ -30,7 +30,7 @@ public: m_y(0), m_heading(0), m_color(k_defaultColor), - m_colorMode(MicroPython::ColorParser::ColorMode::MaxIntensity255), + m_colorMode(MicroPython::Color::Mode::MaxIntensity255), m_penDown(true), m_visible(true), m_speed(k_defaultSpeed), @@ -73,8 +73,8 @@ public: void setColor(uint8_t r, uint8_t g, uint8_t b) { m_color = KDColor::RGB888(r, g, b); } - MicroPython::ColorParser::ColorMode colorMode() const {return m_colorMode; } - void setColorMode(MicroPython::ColorParser::ColorMode colorMode){ + MicroPython::Color::Mode colorMode() const {return m_colorMode; } + void setColorMode(MicroPython::Color::Mode colorMode){ m_colorMode = colorMode; } @@ -141,7 +141,7 @@ private: mp_float_t m_heading; KDColor m_color; - MicroPython::ColorParser::ColorMode m_colorMode; + MicroPython::Color::Mode m_colorMode; bool m_penDown; bool m_visible; diff --git a/python/port/port.cpp b/python/port/port.cpp index 0a2ebc4b7..e4dae7789 100644 --- a/python/port/port.cpp +++ b/python/port/port.cpp @@ -179,32 +179,32 @@ void MicroPython::collectRootsAtAddress(char * address, int byteLength) { gc_collect_root((void **)alignedAddress, byteLength / sizeof(uintptr_t)); } -KDColor MicroPython::ColorParser::ParseColor(mp_obj_t input, ColorMode ColorMode){ - static constexpr int maxColorIntensity = static_cast(ColorMode::MaxIntensity255); +KDColor MicroPython::Color::Parse(mp_obj_t input, Mode mode){ + static constexpr int maxColorIntensity = static_cast(Mode::MaxIntensity255); if (mp_obj_is_str(input)) { size_t l; const char * color = mp_obj_str_get_data(input, &l); // TODO add cyan - constexpr NameColorPair pairs[] = { - NameColorPair("blue", KDColorBlue), - NameColorPair("b", KDColorBlue), - NameColorPair("red", KDColorRed), - NameColorPair("r", KDColorRed), - NameColorPair("green", Palette::Green), - NameColorPair("g", Palette::Green), - NameColorPair("yellow", KDColorYellow), - NameColorPair("y", KDColorYellow), - NameColorPair("brown", Palette::Brown), - NameColorPair("black", KDColorBlack), - NameColorPair("k", KDColorBlack), - NameColorPair("white", KDColorWhite), - NameColorPair("w", KDColorWhite), - NameColorPair("pink", Palette::Pink), - NameColorPair("orange", Palette::Orange), - NameColorPair("purple", Palette::Purple), - NameColorPair("grey", Palette::GreyDark) + constexpr NamedColor pairs[] = { + NamedColor("blue", KDColorBlue), + NamedColor("b", KDColorBlue), + NamedColor("red", KDColorRed), + NamedColor("r", KDColorRed), + NamedColor("green", Palette::Green), + NamedColor("g", Palette::Green), + NamedColor("yellow", KDColorYellow), + NamedColor("y", KDColorYellow), + NamedColor("brown", Palette::Brown), + NamedColor("black", KDColorBlack), + NamedColor("k", KDColorBlack), + NamedColor("white", KDColorWhite), + NamedColor("w", KDColorWhite), + NamedColor("pink", Palette::Pink), + NamedColor("orange", Palette::Orange), + NamedColor("purple", Palette::Purple), + NamedColor("grey", Palette::GreyDark) }; - for (NameColorPair p : pairs) { + for (NamedColor p : pairs) { if (strcmp(p.name(), color) == 0) { return p.color(); } @@ -237,7 +237,7 @@ KDColor MicroPython::ColorParser::ParseColor(mp_obj_t input, ColorMode ColorMode if (len != 3) { mp_raise_TypeError("Color needs 3 components"); } - int intensityFactor = maxColorIntensity/static_cast(ColorMode); + int intensityFactor = maxColorIntensity/static_cast(mode); return KDColor::RGB888( intensityFactor * mp_obj_get_float(elem[0]), intensityFactor * mp_obj_get_float(elem[1]), diff --git a/python/port/port.h b/python/port/port.h index 3cef6ec0a..24a7524bd 100644 --- a/python/port/port.h +++ b/python/port/port.h @@ -42,11 +42,18 @@ void deinit(); void registerScriptProvider(ScriptProvider * s); void collectRootsAtAddress(char * address, int len); -class ColorParser { - private: - class NameColorPair { +class Color { +public: + enum class Mode { + MaxIntensity1 = 1, + MaxIntensity255 = 255, + }; + + static KDColor Parse(mp_obj_t input, Mode Mode = Mode::MaxIntensity255); +private: + class NamedColor { public: - constexpr NameColorPair(const char * name, KDColor color) : + constexpr NamedColor(const char * name, KDColor color) : m_name(name), m_color(color) {} @@ -56,14 +63,6 @@ class ColorParser { const char * m_name; KDColor m_color; }; - - public: - enum class ColorMode { - MaxIntensity1 = 1, - MaxIntensity255 = 255, - }; - - static KDColor ParseColor(mp_obj_t input, ColorMode ColorMode = ColorMode::MaxIntensity255); };