Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 17:1bcdc92af126, committed 2016-12-10
- Comitter:
- messi1
- Date:
- Sat Dec 10 22:51:06 2016 +0000
- Parent:
- 16:7984718638fc
- Commit message:
- removed wait(0.05); Add boundingRect function
Changed in this revision
--- a/include/Point.h Thu Dec 08 22:08:16 2016 +0000
+++ b/include/Point.h Sat Dec 10 22:51:06 2016 +0000
@@ -8,23 +8,25 @@
Point():
_x(0),
_y(0)
- {};
+ {}
Point(T x, T y):
_x(x),
_y(y)
- {};
+ {}
- T x(){reurn _x;}
+ T x(){return _x;}
T y(){return _y;}
T& rx(){return _x;}
T& ry(){return _y;}
void setX(T x){_x = x;}
void setY(T y){_y = y;}
bool isNull()const{return (_x==0 && _y==0);}
+
Point& operator*=(T factor){_x*=factor; _y*=factor; return *this;}
Point& operator+=(const Point& point){_x+=p._x; _y+=p._y; return *this;}
Point& operator-=(const Point& point){_x-=p._x; _y-=p._y; return *this;}
+
friend inline bool operator==( const Point &p1, const Point &p2 ){ return p1._x == p2._x && p1._y == p2._y; }
friend inline bool operator!=( const Point &p1, const Point &p2 ){ return p1._x != p2._x || p1._y != p2._y; }
friend inline const Point operator+( const Point &p1, const Point &p2 ){ return Point(p1._x+p2._x, p1._y+p2._y); }
--- a/include/SGL.h Thu Dec 08 22:08:16 2016 +0000
+++ b/include/SGL.h Sat Dec 10 22:51:06 2016 +0000
@@ -45,6 +45,7 @@
public:
SGL(T width, T height);
+ virtual void clearArea(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1) = 0;
virtual void drawPixel(T x, T y, uint16_t color) = 0; // implemented by subclass
virtual void drawLine(T x0, T y0, T x1, T y1, uint16_t color);
virtual void drawVLine(T x, T y, T length,uint16_t color);
@@ -58,8 +59,8 @@
// The zoom factor works at the moment only with integer values. Float values will create bad fonts
virtual void drawChar(uint8_t ascii, T x, T y, uint16_t color, float zoom=1);
-/* virtual void drawString(const char *string, T x, T y, uint16_t color, float zoom=1, uint8_t fontSpace=6);*/
- virtual Rect<T> drawString(const char *string, T x, T y, uint16_t color, float zoom=1, uint8_t fontSpace=6);
+ virtual void drawString(const char *string, T x, T y, uint16_t color, float zoom=1, int8_t fontSpace=0);
+ virtual Rect<T> boundingRect(const char *string, T x, T y, float zoom=1, int8_t fontSpace=0);
virtual void drawBitMap(T x, T y, const uint8_t *bitmap, T width, T height, uint16_t color);
virtual void fillScreen(uint16_t color);
@@ -70,8 +71,8 @@
T t = *a; *a = *b; *b = t;
};
- T _width;
- T _height;
+ T _displayWidth;
+ T _displayHeight;
FontType _currentFont;
uint8_t _fontWidth;
uint8_t _fontHeight;
--- a/src/SGL.cpp Thu Dec 08 22:08:16 2016 +0000
+++ b/src/SGL.cpp Sat Dec 10 22:51:06 2016 +0000
@@ -37,7 +37,7 @@
//---------------------------------------------------------------------------------------
template <class T>
SGL<T>::SGL(T width, T height):
- _width(width), _height(height),
+ _displayWidth(width), _displayHeight(height),
_currentFont(0),
_fontWidth(0),
_fontHeight(0),
@@ -73,7 +73,7 @@
template <class T>
void SGL<T>::drawVLine(T x, T y, T length,uint16_t color)
{
- T y1 = MIN(y+length,_height-1);
+ T y1 = MIN(y+length,_displayHeight-1);
for(T i = y; i < y1; ++i)
{
drawPixel(x, i, color);
@@ -84,7 +84,7 @@
template <class T>
void SGL<T>::drawHLine(T x, T y, T length, uint16_t color)
{
- T x1 = MIN(x+length,_width-1);
+ T x1 = MIN(x+length,_displayWidth-1);
for(T i = x; i < x1; ++i)
{
drawPixel(i, y, color);
@@ -223,6 +223,8 @@
if((ascii < _fontStart)||(ascii > _fontStop)){
return;
}
+
+ clearArea(x, y, x+_fontWidth, y+_fontHeight);
for(uint8_t i = 0; i < _fontWidth; ++i )
{
@@ -269,28 +271,33 @@
}
//---------------------------------------------------------------------------------------
-/*template <class T>
-void SGL<T>::drawString(const char *string, T x, T y, uint16_t color, float zoom, uint8_t fontSpace)
+template <class T>
+void SGL<T>::drawString(const char *string, T x, T y, uint16_t color, float zoom, int8_t fontSpace)
{
if(!_currentFont && !*_currentFont)
return;
+ T tempX = x;
+ T tempY = y;
+
while(*string)
- {
- drawChar(*string, x, y, color, zoom);
+ {
+ drawChar(*string, tempX, tempY, color, zoom);
*string++;
- x += fontSpace*zoom;
- if(x >= _width-1)
+ tempX += _fontWidth+fontSpace;
+
+ // New line when end of display reached
+ if(tempX >= _displayWidth-1)
{
- y += _fontHeight*zoom;
- x = 0;
+ tempY += _fontHeight*zoom;
+ tempX = 0;
}
}
-}*/
+}
//---------------------------------------------------------------------------------------
template <class T>
-Rect<T> SGL<T>::drawString(const char *string, T x, T y, uint16_t color, float zoom, uint8_t fontSpace)
+Rect<T> SGL<T>::boundingRect(const char *string, T x, T y, float zoom, int8_t fontSpace)
{
if(!_currentFont && !*_currentFont)
return Rect<T>();
@@ -299,18 +306,20 @@
while(*string)
{
- boundingWidth += _fontWidth;
- drawChar(*string, x, y, color, zoom);
+ boundingWidth += (_fontWidth+fontSpace*zoom);
*string++;
- x += fontSpace*zoom;
- if(x >= _width-1)
- {
- y += _fontHeight*zoom;
- x = 0;
- }
}
- return Rect<T>(x, y, boundingWidth, _fontHeight );
+ T rectX = x-2;
+ T rectY = y-2;
+
+ if(rectX > _displayWidth)
+ rectX = 0;
+
+ if(rectY > _displayHeight)
+ rectY = 0;
+
+ return Rect<T>(rectX, rectY, boundingWidth, _fontHeight+3 );
}
//---------------------------------------------------------------------------------------
@@ -335,7 +344,7 @@
template <class T>
void SGL<T>::fillScreen(uint16_t color)
{
- fillRect(0, 0, _width, _height, color);
+ fillRect(0, 0, _displayWidth, _displayHeight, color);
}
//---------------------------------------------------------------------------------------
--- a/src/SSD1331.cpp Thu Dec 08 22:08:16 2016 +0000
+++ b/src/SSD1331.cpp Sat Dec 10 22:51:06 2016 +0000
@@ -157,7 +157,6 @@
sendCmd(CMD_FILL_WINDOW, ENABLE_FILL);//fill window
sendCmd(cmd, 11);
- wait(0.05);
}
//------------------------------------------------------------------------------------
@@ -172,7 +171,6 @@
uint8_t cmd[7] = { CMD_COPY_WINDOW, x0, y0, x1, y1, x2, y2};
sendCmd(cmd, 7);
- wait(0.05);
}
//------------------------------------------------------------------------------------
@@ -185,7 +183,6 @@
uint8_t cmdBuffer[5] = { CMD_DIM_WINDOW, x0, y0, x1, y1 };
sendCmd(cmdBuffer, 5); //Send buffer
- wait(0.05);
}
//------------------------------------------------------------------------------------
@@ -197,8 +194,7 @@
if (y1 >= RGB_OLED_HEIGHT) y1 = RGB_OLED_YMAX;
uint8_t cmdBuffer[5] = { CMD_CLEAR_WINDOW, x0, y0, x1, y1 };
- sendCmd(cmdBuffer, 5); //Send buffer
- wait(0.05);
+ sendCmd(cmdBuffer, 5); //Send buffer
}
//------------------------------------------------------------------------------------
@@ -218,7 +214,7 @@
void SSD1331::setScrolling(ScrollDirection direction, uint8_t rowAddr, uint8_t rowNum, ScrollInterval interval)
{
uint8_t scolling_horizontal = 0x0;
- uint8_t scolling_vertical = 0x0;
+ uint8_t scolling_vertical = 0x0;
switch(direction){
case SD_Horizontal:
scolling_horizontal = 0x01;