[python/turtle] Added write method

Allows user to print strings with the turtle

Change-Id: I06a3832f6fa36d29506be10c48a1b2fb34cb69fb
This commit is contained in:
Arthur
2020-05-19 17:48:37 +02:00
committed by Émilie Feral
parent 7cd0b7e0e0
commit fe7c4b1a8a
5 changed files with 27 additions and 0 deletions

View File

@@ -193,3 +193,9 @@ mp_obj_t modturtle_hideturtle() {
mp_obj_t modturtle_isvisible() {
return sTurtle.isVisible() ? mp_const_true : mp_const_false;
}
mp_obj_t modturtle_write(mp_obj_t s) {
const char * string = mp_obj_str_get_str(s);
sTurtle.write(string);
return mp_const_none;
}

View File

@@ -23,6 +23,7 @@ mp_obj_t modturtle_penup();
mp_obj_t modturtle_isdown();
mp_obj_t modturtle_pensize(size_t n_args, const mp_obj_t *args);
mp_obj_t modturtle_isvisible();
mp_obj_t modturtle_write(mp_obj_t s);
mp_obj_t modturtle_pencolor(size_t n_args, const mp_obj_t *args);
mp_obj_t modturtle_colormode(size_t n_args, const mp_obj_t *args);

View File

@@ -25,6 +25,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(modturtle_reset_obj, modturtle_reset);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(modturtle_showturtle_obj, modturtle_showturtle);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(modturtle_hideturtle_obj, modturtle_hideturtle);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(modturtle_isvisible_obj, modturtle_isvisible);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(modturtle_write_obj, modturtle_write);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(modturtle___init___obj, modturtle___init__);
@@ -74,6 +75,7 @@ STATIC const mp_rom_map_elem_t modturtle_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_hideturtle), (mp_obj_t)&modturtle_hideturtle_obj },
{ MP_ROM_QSTR(MP_QSTR_ht), (mp_obj_t)&modturtle_hideturtle_obj },
{ MP_ROM_QSTR(MP_QSTR_isvisible), (mp_obj_t)&modturtle_isvisible_obj },
{ MP_ROM_QSTR(MP_QSTR_write), (mp_obj_t)&modturtle_write_obj },
};
STATIC MP_DEFINE_CONST_DICT(modturtle_module_globals, modturtle_module_globals_table);

View File

@@ -175,6 +175,21 @@ void Turtle::setVisible(bool visible) {
}
}
void Turtle::write(const char * string) {
// To prevent overlapping between the text and the turtle, force redraw
m_drawn = false;
MicroPython::ExecutionEnvironment::currentExecutionEnvironment()->displaySandbox();
KDContext * ctx = KDIonContext::sharedContext();
static constexpr KDCoordinate headOffsetLength = 6;
KDCoordinate headOffsetX = headOffsetLength * std::cos(m_heading * k_headingScale);
KDCoordinate headOffsetY = k_invertedYAxisCoefficient * headOffsetLength * std::sin(m_heading * k_headingScale);
KDPoint headOffset(headOffsetX, headOffsetY);
KDPoint head(-k_iconHeadSize, -k_iconHeadSize);
KDPoint stringOffset = KDPoint(0,-k_font->glyphSize().height());
ctx->drawString(string, position().translatedBy(headOffset).translatedBy(head).translatedBy(stringOffset));
draw(true);
}
void Turtle::viewDidDisappear() {
m_drawn = false;

View File

@@ -78,6 +78,8 @@ public:
m_colorMode = colorMode;
}
void write(const char * string);
void viewDidDisappear();
private:
@@ -91,6 +93,7 @@ private:
static constexpr uint8_t k_maxSpeed = 10;
static constexpr KDColor k_defaultColor = KDColorBlack;
static constexpr uint8_t k_defaultPenSize = 1;
static constexpr const KDFont * k_font = KDFont::LargeFont;
enum class PawType : uint8_t {
FrontRight = 0,