pxt-ev3/libs/core/screen.cpp

82 lines
1.7 KiB
C++
Raw Normal View History

2017-07-05 14:06:58 +02:00
#include "pxt.h"
#include "ev3.h"
/**
* Drawing modes
*/
enum class Draw {
2017-07-05 14:56:13 +02:00
Normal = 0, // set pixels to black, no fill
2017-07-05 14:06:58 +02:00
Clear = DRAW_OPT_CLEAR_PIXELS,
Xor = DRAW_OPT_LOGICAL_XOR,
Fill = DRAW_OPT_FILL_SHAPE,
};
2017-07-05 14:56:13 +02:00
enum class ScreenFont {
Normal = FONTTYPE_NORMAL,
Small = FONTTYPE_SMALL,
Large = FONTTYPE_LARGE,
Tiny = FONTTYPE_TINY,
};
2017-07-05 14:06:58 +02:00
#define XX(v) ((uint32_t)(v)&0xffff)
#define YY(v) ((uint32_t)(v) >> 16)
// We only support up to 4 arguments for C++ functions - need to pack them on the TS side
namespace screen {
2017-07-05 20:17:26 +02:00
extern "C" {
void DisplaySetPixel(byte X, byte Y);
void DisplayClrPixel(byte X, byte Y);
void DisplayXorPixel(byte X, byte Y);
}
void pokeScreen() {
DisplayXorPixel(0, 0);
DisplayXorPixel(0, 0);
}
2017-07-05 14:06:58 +02:00
//%
void _drawLine(uint32_t p0, uint32_t p1, Draw mode) {
2017-07-05 18:53:22 +02:00
DMESG("line %x %x %x", p0, p1, mode);
2017-07-05 14:06:58 +02:00
LineOutEx(XX(p0), YY(p0), XX(p1), YY(p1), (uint32_t)mode);
}
//%
void _drawRect(uint32_t p0, uint32_t p1, Draw mode) {
2017-07-05 18:53:22 +02:00
DMESG("rect %x %x %x", p0, p1, mode);
2017-07-05 14:06:58 +02:00
RectOutEx(XX(p0), YY(p0), XX(p1), YY(p1), (uint32_t)mode);
}
//%
void _drawEllipse(uint32_t p0, uint32_t p1, Draw mode) {
2017-07-05 18:53:22 +02:00
DMESG("ellip %x %x %x", p0, p1, mode);
2017-07-05 14:06:58 +02:00
EllipseOutEx(XX(p0), YY(p0), XX(p1), YY(p1), (uint32_t)mode);
}
/** Draw text. */
2017-07-05 14:56:13 +02:00
//% mode.defl=0
2017-07-05 14:06:58 +02:00
void drawText(int x, int y, String text, Draw mode) {
LcdText((int)mode & (int)Draw::Clear ? 0 : 1, x, y, text->data);
}
2017-07-05 14:56:13 +02:00
/** Clear screen and reset font to normal. */
//%
void clear() {
LcdClearDisplay();
}
/** Scroll screen vertically. */
//%
void scroll(int v) {
LcdScroll(v);
2017-07-05 20:17:26 +02:00
pokeScreen(); // missing in ev3-api
//LcdUpdate();
2017-07-05 14:56:13 +02:00
}
/** Set font for drawText() */
//%
void setFont(ScreenFont font) {
LcdSelectFont((uint8_t)font);
}
2017-07-05 14:06:58 +02:00
}