upm/src/ili9341/ili9341_gfx.hpp
Noel Eck 922e0cc26b cpp_headers: Renamed C++ headers from .h -> .hpp
To make room for UPM C and C++ sensor code to coexist, all UPM
C++ headers have been renamed from h -> hpp.  This commit contains
updates to documentation, includes, cmake collateral, examples, and
swig interface files.

    * Renamed all cxx/cpp header files which contain the string
    'copyright intel' from .h -> .hpp (if not already hpp).

    * Replaced all references to .h with .hpp in documentation,
    source files, cmake collateral, example code, and swig interface
    files.

    * Replaced cmake variable module_h with module_hpp.

    * Intentionally left upm.h since this file currently does not
    contain code (documentation only).

Signed-off-by: Noel Eck <noel.eck@intel.com>
2016-04-28 14:00:54 -07:00

406 lines
15 KiB
C++

/**
* Author: Shawn Hymel
* Copyright (c) 2016 SparkFun Electronics
*
* Based on GFX interface by Yevgeniy Kiveisha and Adafruit Industries.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#pragma once
#include <mraa.hpp>
#define adagfxswap(a, b) { int16_t t = a; a = b; b = t; }
namespace upm
{
/**
* @brief GFX helper class
*/
class GFX {
public:
/**
* Creates a GFX object
*
* @param w Screen width
* @param h Screen height
*/
GFX(int16_t w, int16_t h);
/**
* Sends a pixel color (RGB) to the driver chip. This must be
* defined by the subclass (pure virtual function).
*
* @param x Axis on the horizontal scale
* @param y Axis on the vertical scale
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
/**
* Draw a line.
*
* @param x0 Start of line x coordinate
* @param y0 Start of line y coordinate
* @param x1 End of line x coordinate
* @param y1 End of line y coordinate
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
virtual void drawLine(int16_t x0,
int16_t y0,
int16_t x1,
int16_t y1,
uint16_t color);
/**
* Draws a vertical line using minimal SPI writes.
*
* @param x Axis on the horizontal scale to begin line
* @param y Axis on the vertical scale to begin line
* @param h Height of line in pixels
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
virtual void drawFastVLine(int16_t x,
int16_t y,
int16_t h,
uint16_t color);
/**
* Draws a horizontal line using minimal SPI writes.
*
* @param x Axis on the horizontal scale to begin line
* @param y Axis on the vertical scale to begin line
* @param w Width of line in pixels
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
virtual void drawFastHLine(int16_t x,
int16_t y,
int16_t w,
uint16_t color);
/**
* Draws a rectangle (not filled).
*
* @param x Position of upper left corner on horizontal axis
* @param y Position of upper left corner on vertical axis
* @param w Width of rectangle
* @param h Height of rectangle
* @color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
virtual void drawRect(int16_t x,
int16_t y,
int16_t w,
int16_t h,
uint16_t color);
/**
* Draw a filled rectangle.
*
* @param x Axis on the horizontal scale of upper-left corner
* @param y Axis on the vertical scale of upper-left corner
* @param w Width of rectangle in pixels
* @param h Height of rectangle in pixels
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
virtual void fillRect(int16_t x,
int16_t y,
int16_t w,
int16_t h,
uint16_t color);
/**
* Fill the screen with a single color.
*
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
virtual void fillScreen(uint16_t color);
/**
* Invert colors on the display.
*
* @param i True or false to invert colors
*/
virtual void invertDisplay(bool i);
/**
* Draw a circle outline.
*
* @param x0 Center point of circle on x-axis
* @param y0 Center point of circle on y-axis
* @param r Radius of circle
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
/**
* Used to draw rounded corners.
*
* @param x0 Center point of circle on x-axis
* @param y0 Center point of circle on y-axis
* @param r Radius of circle
* @param cornername Mask of corner number (1, 2, 4, 8)
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
void drawCircleHelper(int16_t x0,
int16_t y0,
int16_t r,
uint8_t cornername,
uint16_t color);
/**
* Draws a filled circle.
*
* @param x0 Center point of circle on x-axis
* @param y0 Center point of circle on y-axis
* @param r Radius of circle
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
/**
* Used to draw a filled circle and rounded rectangles.
*
* @param x0 Center point of circle on x-axis
* @param y0 Center point of circle on y-axis
* @param r Radius of circle
* @param cornername Mask of corner number (1, 2, 4, 8)
* @param delta Line offset
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
void fillCircleHelper(int16_t x0,
int16_t y0,
int16_t r,
uint8_t cornername,
int16_t delta,
uint16_t color);
/**
* Draw a triangle.
*
* @param x0 First point coordinate on x-axis
* @param y0 First point coordinate on y-axis
* @param x1 Second point coordinate on x-axis
* @param y1 Second point coordinate on y-axis
* @param x2 Third point coordinate on x-axis
* @param y2 Third point coordinate on y-axis
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
void drawTriangle(int16_t x0,
int16_t y0,
int16_t x1,
int16_t y1,
int16_t x2,
int16_t y2,
uint16_t color);
/**
* Draw a filled triangle.
*
* @param x0 First point coordinate on x-axis
* @param y0 First point coordinate on y-axis
* @param x1 Second point coordinate on x-axis
* @param y1 Second point coordinate on y-axis
* @param x2 Third point coordinate on x-axis
* @param y2 Third point coordinate on y-axis
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
void fillTriangle(int16_t x0,
int16_t y0,
int16_t x1,
int16_t y1,
int16_t x2,
int16_t y2,
uint16_t color);
/**
* Draw a rectangle with rounded corners
*
* @param x0 X-axis coordinate of top-left corner
* @param y0 Y-axis coordinate of top-left corner
* @param w Width of rectangle
* @param h height of rectangle
* @param radius Radius of rounded corners
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
void drawRoundRect(int16_t x0,
int16_t y0,
int16_t w,
int16_t h,
int16_t radius,
uint16_t color);
/**
* Draw a filled rectangle with rounded corners
*
* @param x0 X-axis coordinate of top-left corner
* @param y0 Y-axis coordinate of top-left corner
* @param w Width of rectangle
* @param h height of rectangle
* @param radius Radius of rounded corners
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
void fillRoundRect(int16_t x0,
int16_t y0,
int16_t w,
int16_t h,
int16_t radius,
uint16_t color);
/**
* Draw a character at the specified point.
*
* @param x X-axis coordinate of the top-left corner
* @param y Y-axis coordinate of the top-left corner
* @param c Character to draw
* @param color RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
* @param bg Background color (16-bit RGB)
* @param size Font size
*/
void drawChar(int16_t x,
int16_t y,
unsigned char c,
uint16_t color,
uint16_t bg,
uint8_t size);
/**
* Get the x-axis coordinate of the upper-left corner of the cursor.
*
* @return X-axis coordinate of the cursor
*/
int16_t getCursorX(void) const;
/**
* Get the y-axis coordinate of the upper-left corner of the cursor.
*
* @return Y-axis coordinate of the cursor
*/
int16_t getCursorY(void) const;
/**
* Set the cursor for writing text.
*
* @param x X-axis coordinate of the top-left corner of the cursor
* @param y Y-axis coordinate of the top-left corner of the cursor
*/
void setCursor(int16_t x, int16_t y);
/**
* Set the color for text.
*
* @param c RGB (16-bit) color (R[0-4], G[5-10], B[11-15]
*/
void setTextColor(uint16_t c);
/**
* Set the color for text and text background (highlight).
*
* @param c Text color (RGB, 16-bit)
* @param bg Background text color (RGB, 16-bit)
*/
void setTextColor(uint16_t c, uint16_t bg);
/**
* Set the size of the text.
*
* @param s Font size (multiples of 8 pixel text height)
*/
void setTextSize(uint8_t s);
/**
* Enable or disable text wrapping.
*
* @param w True to wrap text. False to truncate.
*/
void setTextWrap(bool w);
/**
* Get the current rotation configuration of the screen.
*
* @return current rotation 0-3
*/
uint8_t getRotation(void) const;
/**
* Sets the rotation of the screen. Can be overridden with another
* screen-specific definition.
*
* @param r Rotation 0-3
*/
void setRotation(uint8_t r);
/**
* Enable (or disable) Code Page 437-compatible charset.
*
* @param x True to enable CP437 charset. False to disable.
*/
void cp437(bool x);
/**
* Write a character at the current cursor position. Definition
* can be overridden with board-specific code.
*
* @param c Character to draw
*/
virtual void write(uint8_t c);
/**
* Prints a string to the screen.
*
* @param s Message to print
*/
void print(std::string msg);
/**
* Get the current width of the screen.
*
* @return the width in pixels
*/
int16_t width(void) const;
/**
* Get the current height of the screen.
*
* @return the height in pixels
*/
int16_t height(void) const;
protected:
const int16_t WIDTH;
const int16_t HEIGHT;
int16_t _width;
int16_t _height;
uint8_t rotation;
uint16_t textcolor;
uint16_t textbgcolor;
int16_t cursor_x;
int16_t cursor_y;
uint8_t textsize;
bool wrap;
bool _cp437;
static const unsigned char font[];
};
}