DisplayPainter¶
- class
The DisplayPainter draws shapes on a display, using the DisplayController interface.
You should use this class to draw shapes on the screen, and use it from inside view only. The standard view class has a reference to to an instance of this class.
The coordinate system used by the painter is the same as used by the display interface. This means all shape coords are relative to the display origo at the top left corner for the screen, when screen is in portrait mode.
A painter keeps track of an active foreground and background color. You can set new colors at any time, and the succeeding draw calls will paint in that color. The standard draw color is the active foreground color, but some draw routines might use the background color also. An example is the font drawing routines.
Like colors, the painter object keeps a active line width and textsize. When drawing shapes based on lines drawLine, drawPolygon, drawRect and drawEllipse, the line width used is the currently active line width property of the painter object.
When painting text characters the character size is dependend on the textsize property. Text painting is not affected by the current line width.
Public Functions
-
DisplayPainter::
DisplayPainter
(IDisplayController *displayController, bool assignRefreshHandler)¶ Construct a new painter object that are attached to a display. A painter object is automatically initialized by the view/UI system and shared among the view classes.
In most cases you should not have to initialize your own display painter.
- Parameters
displayController
-A pointer to the display controller of the active display
Take
-ownership of the DisplayControllers refresh callback handler
- template <typename Owner>
-
void mono::display::DisplayPainter::setRefreshCallback(Owner * obj, void(Owner::*)(void) memPtr)
Set/Overwrite the display tearing effect / refresh callback.
Set the Painters display refresh callback handler. The display refreshes the screen at a regular interval. To avoid graphical artifacts, you should restrict your paint calls to right after this callback gets triggered.
The default View painter already has a callback installed, that triggers the View’s re-paint queue. If you create you own painter object you can safely overwrite this callback.
- Parameters
obj
-The
this
pointer for the object who shoould have its member function calledmemPtr
-A pointer the the class’ member function.
-
void
DisplayPainter::
setForegroundColor
(Color color)¶ Set the painters foreground pencil color.
- Parameters
color
-The new foreground color
-
void
DisplayPainter::
setBackgroundColor
(Color color)¶ Sets the painters background pencil color.
- Parameters
color
-the new background color
-
Color
DisplayPainter::
ForegroundColor
()¶
const Gets the painters current foreground pencil color.
- Return
- The current foreground color
-
Color
DisplayPainter::
BackgroundColor
()¶
const Gets the painters current background pencil color.
- Return
- The current foreground color
-
void
DisplayPainter::
useAntialiasedDrawing
(bool enable)¶ Turn on/off anti-aliased line drawing.
You can enable or disable anti-aliased drawing if you need nicer graphics or faster rendering. Anti-aliasing smoothes lines edges, that can otherwise appear jagged.
- Parameters
enable
-Optional: Switch to turn on/off anti-aliasing. Deafult is enabled.
-
bool
DisplayPainter::
IsAntialiasedDrawing
()¶ Returns
true
if anti-aliased drawing is enabled.- See
- useAntialiasedDrawing
- Return
true
if enabled,false
otherwise.
-
uint16_t
DisplayPainter::
CanvasWidth
()¶
const Get the canvas width in pixels. This is the display display width as well.
- Return
- The canvas/display width in pixels
-
uint16_t
DisplayPainter::
CanvasHeight
()¶
const Get the canvas height in pixels. This is the display display height as well.
- Return
- The canvas/display height in pixels
-
IDisplayController *
DisplayPainter::
DisplayController
()¶
const Get a pointer to the painters current display controller You can use this method to obtain the display controller interface if you need to blit pixels directly to the display.
- Return
- A pointer to an object implementing the IDisplayController interface
-
void
DisplayPainter::
drawPixel
(uint16_t x, uint16_t y, bool background)¶ Draw a single pixel on a specific position on the display.
The pixel will be the active foreground color, unless you set the third parameter to true.
- Parameters
x
-The X-coordinate
y
-The Y coordinate
background
-Optional: Set to true to paint with active background color.
-
void
DisplayPainter::
drawPixel
(uint16_t x, uint16_t y, uint8_t intensity, bool background)¶ Draw a pixel and blend it with the background/foreground color.
Use this method to draw transparent pixels. You define an intensity of the pixel, that corrosponds to its Alpha value or opacity. 0 is totally transparent and 255 is fully opaque.
Only the foreground is influenced by the alpha value, the background is always treated as fully opaque.
- Parameters
x
-The pixels x coordinate
y
-The puxels y coordinate
intensity
-The alpha value, 0 to 255 where 0 is transparent.
Optionaluse
-the background color as foreground and vice versa
-
void
DisplayPainter::
drawFillRect
(uint16_t x, uint16_t y, uint16_t width, uint16_t height, bool background)¶ Draw a filled rectangle.
Paints a filled rectangle in the active foreground color. Coordinates a defining the point of the rectangles upper left corner and are given in screen coordinates. (Absolute coordinates)
- Parameters
x
-X coordinate of upper left corner, in screen coordinates.
y
-Y coordinate of upper left corner, in screen coordinates.
width
-The width of the rectangle
height
-The height of the rectangle
background
-Optional: Set to
true
to paint in active background color
-
void
DisplayPainter::
drawLine
(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool background)¶ Draw a straight line between two points.
Draw a line on the display. The line is defined by its two end points. End point coordinates are in absolute screen coordinates.
The line is not anti-aliased.
Based on Bresenham’s algorithm. But If the line you intend to draw is horizontal of vertical, this method will usemore efficient routines specialized for these cases.
- Parameters
x1
-The X coordinate of the lines first endpoint
y1
-The Y coordinate of the lines first endpoint
x2
-The X coordinate of the lines second endpoint
y2
-The Y coordinate of the lines second endpoint
background
-Optional: Set this to
true
to paint in active background color
-
void
DisplayPainter::
drawRect
(uint16_t x, uint16_t y, uint16_t width, uint16_t height, bool background)¶ Draw a outlined rectangle.
Draw an outlined rectangle with the current line width and the active color.
- Parameters
x
-Top left corner X coordinate
x
-Top left corner X coordinate
width
-The rectangles width
height
-The rectangles height
background
-Optional: Set this to
true
to paint in active background color
-
void
DisplayPainter::
drawChar
(uint16_t x, uint16_t y, char character)¶ Draw a single character on the display.
Paint a single ASCII character on the display. Characters are always painted in the foreground color, with the background color as background fill.
The character is painted in the currently selected text size. The text is a monospaced font, width a minimum size of (5,3) per character. The origo of a character is the upper left corner of the (5,3) rectangle.
If you want write text on the screen, you should use the TextLabel view, or the Console view.
- Parameters
x
-The X coordinate of the characters upper left corner
y
-The Y coordinate of the characters upper left corner
character
-The text character to draw
-
void
DisplayPainter::
drawVLine
(uint16_t x, uint16_t y1, uint16_t y2, bool background)¶ Helper function to draw a vertical line very fast. This method uses much less communication with the display.
*This method is automatically called by drawLine*
- Parameters
x
-The lines X coordinate (same for both end points)
y1
-The first end points Y coordinate
y2
-The second end points Y coordinate
background
-Optional: Set this to
true
to paint in active background color
-
void
DisplayPainter::
drawHLine
(uint16_t x1, uint16_t x2, uint16_t y, bool background)¶ Helper function to draw a horizontal line very fast. This method uses much less communication with the display.
*This method is automatically called by drawLine*
- Parameters
x1
-The first end points X coordinate
x2
-The second end points X coordinate
y
-The lines Y coordinate (same for both end points)
background
-Optional: Set this to
true
to paint in active background color
-
void
DisplayPainter::
drawCircle
(uint16_t x0, uint16_t y0, uint16_t r, bool background)¶ Paint an outlined circle.
Protected Functions
-
void
DisplayPainter::
swap
(uint16_t &a, uint16_t &b)¶ Inline swap of two numbers.
Protected Attributes
-
mbed::FunctionPointer
mono::display::DisplayPainter::
displayRefreshHandler
¶ Handler for the DisplayControllers action queue, that gets triggered when the display refreshes.
This handler is normally used by the first View that gets contructed, to enable the re-paint queue.
-