Boundary condition fixes to Arcs
Fix multiple display support for rounded boxes.
This commit is contained in:
parent
b86e6f4eb2
commit
c726de8521
1 changed files with 27 additions and 26 deletions
|
@ -1399,6 +1399,7 @@ void gdispGBlitArea(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, c
|
||||||
} else if (sbit < 0x80) {
|
} else if (sbit < 0x80) {
|
||||||
for(tbit=sbit<<1; tbit < ebit; tbit<<=1) full |= tbit;
|
for(tbit=sbit<<1; tbit < ebit; tbit<<=1) full |= tbit;
|
||||||
}
|
}
|
||||||
|
tbit = start%45 == 0 ? sbit : 0;
|
||||||
|
|
||||||
MUTEX_ENTER(g);
|
MUTEX_ENTER(g);
|
||||||
g->p.color = color;
|
g->p.color = color;
|
||||||
|
@ -1433,7 +1434,7 @@ void gdispGBlitArea(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, c
|
||||||
if (full & 0x30) { g->p.x = x-a; g->p.y = y+b; drawpixel_clip(g); }
|
if (full & 0x30) { g->p.x = x-a; g->p.y = y+b; drawpixel_clip(g); }
|
||||||
if (full == 0xFF) {
|
if (full == 0xFF) {
|
||||||
autoflush(g);
|
autoflush(g);
|
||||||
MUTEX_EXIT;
|
MUTEX_EXIT();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1457,10 +1458,10 @@ void gdispGBlitArea(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, c
|
||||||
a = 1;
|
a = 1;
|
||||||
b = radius;
|
b = radius;
|
||||||
P = 4 - radius;
|
P = 4 - radius;
|
||||||
if ((sbit & 0x20) || (ebit & 0x40)) { g->p.x = x; g->p.y = y+b; drawpixel_clip(g); }
|
if ((sbit & 0x20) || (tbit & 0x40) || (ebit & 0x40)) { g->p.x = x; g->p.y = y+b; drawpixel_clip(g); }
|
||||||
if ((sbit & 0x02) || (ebit & 0x04)) { g->p.x = x; g->p.y = y-b; drawpixel_clip(g); }
|
if ((sbit & 0x02) || (tbit & 0x04) || (ebit & 0x04)) { g->p.x = x; g->p.y = y-b; drawpixel_clip(g); }
|
||||||
if ((sbit & 0x80) || (ebit & 0x01)) { g->p.x = x+b; g->p.y = y; drawpixel_clip(g); }
|
if ((sbit & 0x80) || (tbit & 0x01) || (ebit & 0x01)) { g->p.x = x+b; g->p.y = y; drawpixel_clip(g); }
|
||||||
if ((sbit & 0x08) || (ebit & 0x10)) { g->p.x = x-b; g->p.y = y; drawpixel_clip(g); }
|
if ((sbit & 0x08) || (tbit & 0x10) || (ebit & 0x10)) { g->p.x = x-b; g->p.y = y; drawpixel_clip(g); }
|
||||||
do {
|
do {
|
||||||
if (((sbit & 0x01) && a >= sedge) || ((ebit & 0x01) && a <= eedge)) { g->p.x = x+b; g->p.y = y-a; drawpixel_clip(g); }
|
if (((sbit & 0x01) && a >= sedge) || ((ebit & 0x01) && a <= eedge)) { g->p.x = x+b; g->p.y = y-a; drawpixel_clip(g); }
|
||||||
if (((sbit & 0x02) && a <= sedge) || ((ebit & 0x02) && a >= eedge)) { g->p.x = x+a; g->p.y = y-b; drawpixel_clip(g); }
|
if (((sbit & 0x02) && a <= sedge) || ((ebit & 0x02) && a >= eedge)) { g->p.x = x+a; g->p.y = y-b; drawpixel_clip(g); }
|
||||||
|
@ -1489,10 +1490,10 @@ void gdispGBlitArea(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, c
|
||||||
a = 1;
|
a = 1;
|
||||||
b = radius;
|
b = radius;
|
||||||
P = 4 - radius;
|
P = 4 - radius;
|
||||||
if (sbit & 0x60) { g->p.x = x; g->p.y = y+b; drawpixel_clip(g); }
|
if ((sbit & 0x60) || (tbit & 0xC0)) { g->p.x = x; g->p.y = y+b; drawpixel_clip(g); }
|
||||||
if (sbit & 0x06) { g->p.x = x; g->p.y = y-b; drawpixel_clip(g); }
|
if ((sbit & 0x06) || (tbit & 0x0C)) { g->p.x = x; g->p.y = y-b; drawpixel_clip(g); }
|
||||||
if (sbit & 0x81) { g->p.x = x+b; g->p.y = y; drawpixel_clip(g); }
|
if ((sbit & 0x81) || (tbit & 0x03)) { g->p.x = x+b; g->p.y = y; drawpixel_clip(g); }
|
||||||
if (sbit & 0x18) { g->p.x = x-b; g->p.y = y; drawpixel_clip(g); }
|
if ((sbit & 0x18) || (tbit & 0x30)) { g->p.x = x-b; g->p.y = y; drawpixel_clip(g); }
|
||||||
do {
|
do {
|
||||||
if ((sbit & 0x01) && (a >= sedge || a <= eedge)) { g->p.x = x+b; g->p.y = y-a; drawpixel_clip(g); }
|
if ((sbit & 0x01) && (a >= sedge || a <= eedge)) { g->p.x = x+b; g->p.y = y-a; drawpixel_clip(g); }
|
||||||
if ((sbit & 0x02) && (a <= sedge || a >= eedge)) { g->p.x = x+a; g->p.y = y-b; drawpixel_clip(g); }
|
if ((sbit & 0x02) && (a <= sedge || a >= eedge)) { g->p.x = x+a; g->p.y = y-b; drawpixel_clip(g); }
|
||||||
|
@ -2056,17 +2057,17 @@ void gdispGBlitArea(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, c
|
||||||
#if GDISP_NEED_ARC
|
#if GDISP_NEED_ARC
|
||||||
void gdispGDrawRoundedBox(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t radius, color_t color) {
|
void gdispGDrawRoundedBox(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t radius, color_t color) {
|
||||||
if (2*radius > cx || 2*radius > cy) {
|
if (2*radius > cx || 2*radius > cy) {
|
||||||
gdispDrawBox(x, y, cx, cy, color);
|
gdispGDrawBox(g, x, y, cx, cy, color);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gdispDrawArc(x+radius, y+radius, radius, 90, 180, color);
|
gdispGDrawArc(g, x+radius, y+radius, radius, 90, 180, color);
|
||||||
gdispDrawLine(x+radius+1, y, x+cx-2-radius, y, color);
|
gdispGDrawLine(g, x+radius+1, y, x+cx-2-radius, y, color);
|
||||||
gdispDrawArc(x+cx-1-radius, y+radius, radius, 0, 90, color);
|
gdispGDrawArc(g, x+cx-1-radius, y+radius, radius, 0, 90, color);
|
||||||
gdispDrawLine(x+cx-1, y+radius+1, x+cx-1, y+cy-2-radius, color);
|
gdispGDrawLine(g, x+cx-1, y+radius+1, x+cx-1, y+cy-2-radius, color);
|
||||||
gdispDrawArc(x+cx-1-radius, y+cy-1-radius, radius, 270, 360, color);
|
gdispGDrawArc(g, x+cx-1-radius, y+cy-1-radius, radius, 270, 360, color);
|
||||||
gdispDrawLine(x+radius+1, y+cy-1, x+cx-2-radius, y+cy-1, color);
|
gdispGDrawLine(g, x+radius+1, y+cy-1, x+cx-2-radius, y+cy-1, color);
|
||||||
gdispDrawArc(x+radius, y+cy-1-radius, radius, 180, 270, color);
|
gdispGDrawArc(g, x+radius, y+cy-1-radius, radius, 180, 270, color);
|
||||||
gdispDrawLine(x, y+radius+1, x, y+cy-2-radius, color);
|
gdispGDrawLine(g, x, y+radius+1, x, y+cy-2-radius, color);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2076,16 +2077,16 @@ void gdispGBlitArea(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, c
|
||||||
|
|
||||||
radius2 = radius*2;
|
radius2 = radius*2;
|
||||||
if (radius2 > cx || radius2 > cy) {
|
if (radius2 > cx || radius2 > cy) {
|
||||||
gdispFillArea(x, y, cx, cy, color);
|
gdispGFillArea(g, x, y, cx, cy, color);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gdispFillArc(x+radius, y+radius, radius, 90, 180, color);
|
gdispGFillArc(g, x+radius, y+radius, radius, 90, 180, color);
|
||||||
gdispFillArea(x+radius+1, y, cx-radius2, radius, color);
|
gdispGFillArea(g, x+radius+1, y, cx-radius2, radius, color);
|
||||||
gdispFillArc(x+cx-1-radius, y+radius, radius, 0, 90, color);
|
gdispGFillArc(g, x+cx-1-radius, y+radius, radius, 0, 90, color);
|
||||||
gdispFillArc(x+cx-1-radius, y+cy-1-radius, radius, 270, 360, color);
|
gdispGFillArc(g, x+cx-1-radius, y+cy-1-radius, radius, 270, 360, color);
|
||||||
gdispFillArea(x+radius+1, y+cy-radius, cx-radius2, radius, color);
|
gdispGFillArea(g, x+radius+1, y+cy-radius, cx-radius2, radius, color);
|
||||||
gdispFillArc(x+radius, y+cy-1-radius, radius, 180, 270, color);
|
gdispGFillArc(g, x+radius, y+cy-1-radius, radius, 180, 270, color);
|
||||||
gdispFillArea(x, y+radius, cx, cy-radius2, color);
|
gdispGFillArea(g, x, y+radius, cx, cy-radius2, color);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue