Skip to content

Commit 89f7156

Browse files
authored
Merge pull request #65 from MatzElectronics/master
OLED Library repairs
2 parents d713d2b + 8def9c7 commit 89f7156

File tree

7 files changed

+76
-410
lines changed

7 files changed

+76
-410
lines changed
382 Bytes
Binary file not shown.
2.17 KB
Binary file not shown.

Learn/Simple Libraries/Display/liboledc/oledc_clear.c

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,14 @@ void oledc_clear(int x0, int y0, int w, int h)
5454
}
5555

5656
// Boundary check
57-
if ((y0 >= TFTHEIGHT) && (y1 >= TFTHEIGHT))
57+
if ((y0 >= TFTHEIGHT) || (y1 < 0) || (x0 >= TFTWIDTH) || (x1 < 0)) {
58+
oledc_screenLockClr();
5859
return;
59-
if ((x0 >= TFTWIDTH) && (x1 >= TFTWIDTH))
60-
return;
61-
if (x0 >= TFTWIDTH)
62-
x0 = TFTWIDTH - 1;
63-
if (y0 >= TFTHEIGHT)
64-
y0 = TFTHEIGHT - 1;
65-
if (x1 >= TFTWIDTH)
66-
x1 = TFTWIDTH - 1;
67-
if (y1 >= TFTHEIGHT)
68-
y1 = TFTHEIGHT - 1;
60+
}
61+
if (x0 < 0) x0 = 0;
62+
if (y0 < 0) y0 = 0;
63+
if (x1 >= TFTWIDTH) x1 = TFTWIDTH - 1;
64+
if (y1 >= TFTHEIGHT) y1 = TFTHEIGHT - 1;
6965

7066
oledc_writeCommand(SSD1331_CMD_CLEAR, 0);
7167
oledc_writeCommand(x0, 0);

Learn/Simple Libraries/Display/liboledc/oledc_copy.c

Lines changed: 61 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "oledc.h"
1818

1919
char TFTROTATION;
20+
int _width, _height;
2021

2122
void oledc_copy(int x0, int y0, int w, int h, int x2, int y2)
2223
{
@@ -25,15 +26,67 @@ void oledc_copy(int x0, int y0, int w, int h, int x2, int y2)
2526

2627
int x1 = x0 + w - 1;
2728
int y1 = y0 + h - 1;
29+
30+
int x3 = x2 + w - 1;
31+
int y3 = y2 + h - 1;
32+
33+
if (x0 >= _width || y0 >= _height || x1 < 0 || y1 < 0 || w <= 0 || h <= 0 ||
34+
x2 >= _width || y2 >= _height || x3 < 0 || y3 < 0)
35+
{
36+
oledc_screenLockClr();
37+
return;
38+
}
39+
40+
if (x1 >= _width)
41+
{
42+
x1 = _width - 1;
43+
w = x1 - x0 + 1;
44+
}
45+
if (y1 >= _height)
46+
{
47+
y1 = _height - 1;
48+
h = y1 - y0 + 1;
49+
}
50+
51+
if (x0 < 0)
52+
{
53+
x2 = x2 - x0;
54+
x0 = 0;
55+
}
56+
if (y0 < 0)
57+
{
58+
y2 = y2 - y0;
59+
y0 = 0;
60+
}
61+
62+
x3 = x2 + w - 1;
63+
y3 = y2 + h - 1;
64+
65+
if(x3 >= _width)
66+
{
67+
x3 = _width - 1;
68+
w = x3 - x2 + 1;
69+
x1 = x0 + w - 1;
70+
}
71+
if(y3 >= _height)
72+
{
73+
y3 = _height - 1;
74+
h = y3 - y2 + 1;
75+
y1 = y0 + h - 1;
76+
}
77+
2878

2979
// check rotation, move pixel around if necessary
3080
switch (TFTROTATION) {
3181
case 1:
3282
gfx_swap(x0, y0);
3383
gfx_swap(x1, y1);
84+
gfx_swap(x2, y2);
85+
gfx_swap(x3, y3);
3486
x0 = TFTWIDTH - x0 - 1;
3587
x1 = TFTWIDTH - x1 - 1;
3688
x2 = TFTWIDTH - x2 - 1;
89+
x3 = TFTWIDTH - x3 - 1;
3790
break;
3891
case 2:
3992
x0 = TFTWIDTH - x0 - 1;
@@ -42,35 +95,26 @@ void oledc_copy(int x0, int y0, int w, int h, int x2, int y2)
4295
y1 = TFTHEIGHT - y1 - 1;
4396
x2 = TFTWIDTH - x2 - 1;
4497
y2 = TFTHEIGHT - y2 - 1;
98+
x3 = TFTWIDTH - x3 - 1;
99+
y3 = TFTHEIGHT - y3 - 1;
45100
gfx_swap(x0, x1);
46101
gfx_swap(y0, y1);
102+
gfx_swap(x2, x3);
103+
gfx_swap(y2, y3);
47104
break;
48105
case 3:
49106
gfx_swap(x0, y0);
50107
gfx_swap(x1, y1);
108+
gfx_swap(x2, y2);
109+
gfx_swap(x3, y3);
51110
y0 = TFTHEIGHT - y0 - 1;
52111
y1 = TFTHEIGHT - y1 - 1;
53112
y2 = TFTHEIGHT - y2 - 1;
113+
y3 = TFTHEIGHT - y3 - 1;
54114
break;
55115
}
56116

57-
// Boundary check
58-
if ((y0 >= TFTHEIGHT) && (y1 >= TFTHEIGHT))
59-
return;
60-
if ((x0 >= TFTWIDTH) && (x1 >= TFTWIDTH))
61-
return;
62-
if (x0 >= TFTWIDTH)
63-
x0 = TFTWIDTH - 1;
64-
if (y0 >= TFTHEIGHT)
65-
y0 = TFTHEIGHT - 1;
66-
if (x1 >= TFTWIDTH)
67-
x1 = TFTWIDTH - 1;
68-
if (y1 >= TFTHEIGHT)
69-
y1 = TFTHEIGHT - 1;
70-
if (x2 >= TFTWIDTH)
71-
x2 = TFTWIDTH - 1;
72-
if (y2 >= TFTHEIGHT)
73-
y2 = TFTHEIGHT - 1;
117+
74118

75119
oledc_writeCommand(SSD1331_CMD_COPY, 0);
76120
oledc_writeCommand(x0, 0);

Learn/Simple Libraries/Display/liboledc/oledc_fillRect.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,17 @@ int _width, _height;
2222

2323
void oledc_fillRectPrimative(int x0, int y0, int w, int h, unsigned int color)
2424
{
25-
if (w < 0 || h < 0) return;
26-
25+
int x1 = x0 + w - 1;
26+
int y1 = y0 + h - 1;
27+
28+
if (x0 >= _width || y0 >= _height || x1 < 0 || y1 < 0 || w <= 0 || h <= 0) return;
29+
30+
if (x1 >= _width) x1 = _width - 1;
31+
if (y1 >= _height) y1 = _height - 1;
32+
2733
if (x0 < 0) x0 = 0;
28-
if (x0 >= _width) x0 = (_width-1);
2934
if (y0 < 0) y0 = 0;
30-
if (y0 >= _height) y0 = (_height-1);
31-
32-
if (x0 + w >= _width) w = (_width - x0);
33-
if (y0 + h >= _height) h = (_height - y0);
3435

35-
int x1 = x0 + w - 1;
36-
int y1 = y0 + h - 1;
3736

3837
switch (TFTROTATION) {
3938
case 1:

0 commit comments

Comments
 (0)