Skip to content

Commit

Permalink
Merge pull request #24 from lovyan03/unstable
Browse files Browse the repository at this point in the history
0.1.15
  • Loading branch information
lovyan03 authored Jul 8, 2020
2 parents a095fde + 092d3c9 commit 8ca789e
Show file tree
Hide file tree
Showing 10 changed files with 231 additions and 117 deletions.
15 changes: 8 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ This library has the following advantages.
- ILI9341 (ODROID-GO, ESP-WROVER-KIT, WioTerminal)
- ILI9486
- ILI9488
- ST7735 (M5StickC, TTGO TS, LoLin D32 Pro)
- ST7735 (M5StickC, TTGO T-Wristband, TTGO TS, LoLin D32 Pro)
- ST7789 (TTGO T-Watch, DSTIKE D-duino-32 XS, ESP-WROVER-KIT)
- SSD1351

Expand Down Expand Up @@ -81,20 +81,20 @@ This library is also compatible with the above models and LCD panels with a simi
// ヘッダをincludeします。
#include <LovyanGFX.hpp>

// 対応機種をArduino環境で使う場合は、特別な設定は不要です。
static LGFX lcd; // LGFXのインスタンスを作成。
static LGFX lcd; // LGFXのインスタンスを作成。
static LGFX_Sprite sprite(&lcd); // スプライトを使う場合はLGFX_Spriteのインスタンスを作成。

// ESP-IDF環境で使う場合や、Arduino環境でもSPIバスやパネルを設定したい場合は、
// examples/HowToUse/2_spi_setting.ino を参照してください。


// もし現在 TFT_eSPI を使用中で、ソースをなるべく変更したくない場合は、こちらのヘッダを利用できます。
// #include <LGFX_TFT_eSPI.hpp>
// static TFT_eSPI lcd; // TFT_eSPIがLGFXの別名として定義されます。
// static TFT_eSprite sprite(&lcd); // TFT_eSpriteがLGFX_Spriteの別名として定義されます。


// 対応機種に無い構成で使う場合は、 examples/HowToUse/2_spi_setting.ino を参照してください。
// configフォルダのLGFX_Config_Custom.hppをコピーして環境に合わせて編集して、
// ここでincludeをするか、ファイルの内容をそのまま貼り付けて使用してください。


void setup(void)
{
// 最初に初期化関数を呼び出します。
Expand Down Expand Up @@ -345,6 +345,7 @@ LovyanGFX has been created to add these features and optimize performance.
TFT_eSPIのベースとなった、[AdafruitGFX](https://github.com/adafruit/Adafruit-GFX-Library)を公開している[Adafruit Industries](https://github.com/adafruit/)へ感謝いたします。
[TJpgDec](http://elm-chan.org/fsw/tjpgd/00index.html) (Tiny JPEG Decompressor) の作者 [ChaN](http://elm-chan.org/)氏へ感謝いたします。
[Pngle](https://github.com/kikuchan/pngle) (PNG Loader for Embedding) の作者 [kikuchan](https://github.com/kikuchan/)氏へ感謝いたします。
[QRCode](https://github.com/ricmoo/QRCode/) (QR code generation library) の作者 [Richard Moore](https://github.com/ricmoo/)氏へ感謝いたします。
多くの技術的なアドバイスやESP-IDF環境での検証に協力してくれた[ciniml](https://github.com/ciniml)氏へ感謝いたします。
不具合の多い開発初期からの動作検証および多数の助言をくださった[mongonta0716](https://github.com/mongonta0716)氏へ感謝いたします。
多数のボードでの動作検証や英語への翻訳および多数の助言をくださった[tobozo](https://github.com/tobozo)氏へ感謝いたします。
Expand Down
12 changes: 6 additions & 6 deletions examples/HowToUse/1_simple_use/1_simple_use.ino
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,20 @@
// ヘッダをincludeします。
#include <LovyanGFX.hpp>

// 対応機種をArduino環境で使う場合は、特別な設定は不要です。
static LGFX lcd; // LGFXのインスタンスを作成。
static LGFX lcd; // LGFXのインスタンスを作成。
static LGFX_Sprite sprite(&lcd); // スプライトを使う場合はLGFX_Spriteのインスタンスを作成。

// ESP-IDF環境で使う場合や、Arduino環境でもSPIバスやパネルを設定したい場合は、
// examples/HowToUse/2_spi_setting.ino を参照してください。


// もし現在 TFT_eSPI を使用中で、ソースをなるべく変更したくない場合は、こちらのヘッダを利用できます。
// #include <LGFX_TFT_eSPI.hpp>
// static TFT_eSPI lcd; // TFT_eSPIがLGFXの別名として定義されます。
// static TFT_eSprite sprite(&lcd); // TFT_eSpriteがLGFX_Spriteの別名として定義されます。


// 対応機種に無い構成で使う場合は、 examples/HowToUse/2_spi_setting.ino を参照してください。
// configフォルダのLGFX_Config_Custom.hppをコピーして環境に合わせて編集して、
// ここでincludeをするか、ファイルの内容をそのまま貼り付けて使用してください。


void setup(void)
{
// 最初に初期化関数を呼び出します。
Expand Down
2 changes: 1 addition & 1 deletion examples/Sprite/MovingCircles/MovingCircles.ino
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ void loop(void)
}
std::int32_t len = sprites[flip].bufferLength() >> 1;
if (y + sprite_height > lcd_height) {
len = (lcd_height - y) * lcd_width * lcd.getColorConverter()->bytes;
len = (lcd_height - y) * lcd_width;
}
lcd.pushPixelsDMA(sprites[flip].getBuffer(), len);
}
Expand Down
2 changes: 1 addition & 1 deletion examples/Sprite/MovingIcons/MovingIcons.ino
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ void loop(void)
}
size_t len = sprites[flip].bufferLength() >> 1;
if (y + sprite_height > tft_height) {
len = (tft_height - y) * tft_width * lcd.getColorConverter()->bytes;
len = (tft_height - y) * tft_width;
}
lcd.pushPixelsDMA(sprites[flip].getBuffer(), len);
}
Expand Down
4 changes: 2 additions & 2 deletions library.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
"type": "git",
"url": "https://github.com/lovyan03/LovyanGFX"
},
"version": "0.1.14",
"framework": "arduino",
"version": "0.1.15",
"framework": "arduino, espidf",
"platforms": "espressif32, atmelsam",
"build": {
"libArchive": false
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=LovyanGFX
version=0.1.14
version=0.1.15
author=lovyan03
maintainer=Lovyan <[email protected]>
sentence=LCD Graphics driver for ESP32 and SAMD51
Expand Down
73 changes: 68 additions & 5 deletions src/lgfx/LGFXBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -701,6 +701,69 @@ namespace lgfx
}
}

void LGFXBase::drawBezier( std::int32_t x0, std::int32_t y0, std::int32_t x1, std::int32_t y1, std::int32_t x2, std::int32_t y2, std::int32_t x3, std::int32_t y3)
{
std::int32_t w = x0-x1;
std::int32_t h = y0-y1;
std::int32_t len = w*w+h*h;
w = x1-x2;
h = y1-y2;
std::int32_t len2 = w*w+h*h;
if (len < len2) len = len2;
w = x2-x3;
h = y2-y3;
len2 = w*w+h*h;
if (len < len2) len = len2;
len = (std::int32_t)round(sqrt(len)) >> 2;

float fx0 = x0;
float fy0 = y0;
float fx1 = x1;
float fy1 = y1;
float fx2 = x2;
float fy2 = y2;
float fx3 = x3;
float fy3 = y3;

std::int32_t i = 0;
startWrite();
//drawLine(x0, y0, x1, y1);
//drawLine(x1, y1, x2, y2);
//drawLine(x2, y2, x3, y3);
//drawCircle(x0, y0, 3);
//drawCircle(x1, y1, 3);
//drawCircle(x2, y2, 3);
//drawCircle(x3, y3, 3);
do {
float t = i;
t = t / (len<<1);
float tr = 1 - t;
float f0 = tr * tr;
float f1 = f0 * t * 3;
f0 = f0 * tr;
float f3 = t * t;
float f2 = tr * f3 * 3;
f3 = f3 * t;
x1 = round( fx0 * f0 + fx1 * f1 + fx2 * f2 + fx3 * f3);
y1 = round( fy0 * f0 + fy1 * f1 + fy2 * f2 + fy3 * f3);
if (x0 != x1 || y0 != y1) {
drawLine(x0, y0, x1, y1);
//drawCircle(x1, y1, 3);
x0 = x1;
y0 = y1;
}
x2 = round( fx0 * f3 + fx1 * f2 + fx2 * f1 + fx3 * f0);
y2 = round( fy0 * f3 + fy1 * f2 + fy2 * f1 + fy3 * f0);
if (x3 != x2 || y3 != y2) {
drawLine(x3, y3, x2, y2);
//drawCircle(x2, y2, 3);
x3 = x2;
y3 = y2;
}
} while (++i <= len);
endWrite();
}

void LGFXBase::drawGradientLine( std::int32_t x0, std::int32_t y0, std::int32_t x1, std::int32_t y1, bgr888_t colorstart, bgr888_t colorend )
{
if ( colorstart == colorend || (x0 == x1 && y0 == y1)) {
Expand Down Expand Up @@ -1120,9 +1183,8 @@ namespace lgfx
std::int32_t cl = _clip_l;
int w = _clip_r - cl + 1;
std::uint8_t bufIdx = 0;
bool buf0[w], buf1[w], buf2[w];
bool* linebufs[3] = { buf0, buf1, buf2 };
std::int32_t bufY[3] = {-2, -2, -2}; // default is out of range.
bool* linebufs[3] = { new bool[w], new bool[w], new bool[w] };
std::int32_t bufY[3] = {-2, -2, -2}; // 3 line buffer (default: out of range.)
bufY[0] = y;
read_rect(cl, y, w, 1, linebufs[0], &p);
std::list<paint_point_t> points;
Expand Down Expand Up @@ -1177,7 +1239,7 @@ namespace lgfx
if (newy < _clip_t) continue;
if (newy > _clip_b) continue;
int bidx = 0;
for (; bidx < 3; ++bidx) if (newy == bufY[bidx]) break;
while (newy != bufY[bidx] && ++bidx != 3);
if (bidx == 3) {
for (bidx = 0; bidx < 2 && (abs(bufY[bidx] - ly) <= 1); ++bidx);
bufY[bidx] = newy;
Expand All @@ -1192,8 +1254,9 @@ namespace lgfx
}
} while ((newy += 2) < ly + 2);
}
int i = 0;
do { delete[] linebufs[i]; } while (++i != 3);
endWrite();
}

}

2 changes: 2 additions & 0 deletions src/lgfx/LGFXBase.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ namespace lgfx
void fillTriangle ( std::int32_t x0, std::int32_t y0, std::int32_t x1, std::int32_t y1, std::int32_t x2, std::int32_t y2);
template<typename T> inline void drawBezier ( std::int32_t x0, std::int32_t y0, std::int32_t x1, std::int32_t y1, std::int32_t x2, std::int32_t y2, const T& color) { setColor(color); drawBezier(x0, y0, x1, y1, x2, y2); }
void drawBezier ( std::int32_t x0, std::int32_t y0, std::int32_t x1, std::int32_t y1, std::int32_t x2, std::int32_t y2);
template<typename T> inline void drawBezier ( std::int32_t x0, std::int32_t y0, std::int32_t x1, std::int32_t y1, std::int32_t x2, std::int32_t y2, std::int32_t x3, std::int32_t y3, const T& color) { setColor(color); drawBezier(x0, y0, x1, y1, x2, y2, x3, y3); }
void drawBezier ( std::int32_t x0, std::int32_t y0, std::int32_t x1, std::int32_t y1, std::int32_t x2, std::int32_t y2, std::int32_t x3, std::int32_t y3);
template<typename T> inline void drawBezierHelper(std::int32_t x0, std::int32_t y0, std::int32_t x1, std::int32_t y1, std::int32_t x2, std::int32_t y2, const T& color) { setColor(color); drawBezierHelper(x0, y0, x1, y1, x2, y2); }
void drawBezierHelper(std::int32_t x0, std::int32_t y0, std::int32_t x1, std::int32_t y1, std::int32_t x2, std::int32_t y2);
template<typename T> inline void drawArc ( std::int32_t x, std::int32_t y, std::int32_t r0, std::int32_t r1, float angle0, float angle1, const T& color) { setColor(color); drawArc( x, y, r0, r1, angle0, angle1); }
Expand Down
7 changes: 4 additions & 3 deletions src/lgfx/LGFX_Sprite.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -763,13 +763,14 @@ return;

void pushPixelsDMA_impl(const void* data, std::int32_t length) override
{
auto src = static_cast<const uint8_t*>(data);
auto k = _bitwidth * _write_conv.bits >> 3;
std::int32_t linelength;
do {
linelength = std::min<int>(_xe - _xptr + 1, length);
auto len = length * _write_conv.bits >> 3;
memcpy(&_img[(_xptr * _write_conv.bits >> 3) + _yptr * k], data, len);
data += len;
auto len = linelength * _write_conv.bits >> 3;
memcpy(&_img[(_xptr * _write_conv.bits >> 3) + _yptr * k], src, len);
src += len;
ptr_advance(linelength);
} while (length -= linelength);
}
Expand Down
Loading

0 comments on commit 8ca789e

Please sign in to comment.