Browse Source

Fix progressbar bounds checking and decrementing

spinbox_widget
inmarket 5 years ago
parent
commit
59917dbe1a
  1. 1
      docs/releases.txt
  2. 43
      src/gwin/gwin_progressbar.c

1
docs/releases.txt

@ -16,6 +16,7 @@ FIX: Fixed an issue with color formats in Linux-Framebuffer board files
FIX: Fixing and improving arc rendering functions
FIX: Preventing possible crash when no valid GWIN default font has been set
FIX: Updating Windows binaries of the font encoder to improve compatibility
FIX: Fix Progressbar bounds checking and decrementing
*** Release 2.6 ***

43
src/gwin/gwin_progressbar.c

@ -102,9 +102,17 @@ void gwinProgressbarSetRange(GHandle gh, int min, int max) {
if (min == max) // prevent divide by 0 errors.
max++;
gsw->min = min;
gsw->max = max;
gsw->pos = min;
if (min <= max) {
gsw->min = min;
gsw->max = max;
gsw->pos = min;
gsw->res = 1;
} else {
gsw->min = max;
gsw->max = min;
gsw->pos = min;
gsw->res = -1;
}
PBResetDisplayPos(gsw);
@ -117,15 +125,9 @@ void gwinProgressbarSetPosition(GHandle gh, int pos) {
if (gh->vmt != (gwinVMT *)&progressbarVMT)
return;
if (gsw->min <= gsw->max) {
if (pos < gsw->min) gsw->pos = gsw->min;
else if (pos > gsw->max) gsw->pos = gsw->max;
else gsw->pos = pos;
} else {
if (pos > gsw->min) gsw->pos = gsw->min;
else if (pos < gsw->max) gsw->pos = gsw->max;
else gsw->pos = pos;
}
if (pos < gsw->min) gsw->pos = gsw->min;
else if (pos > gsw->max) gsw->pos = gsw->max;
else gsw->pos = pos;
PBResetDisplayPos(gsw);
_gwinUpdate(gh);
@ -139,9 +141,6 @@ void gwinProgressbarSetResolution(GHandle gh, int resolution) {
if (gh->vmt != (gwinVMT *)&progressbarVMT)
return;
if (resolution <= 0)
resolution = 1;
gsw->res = resolution;
#undef gsw
@ -153,10 +152,9 @@ void gwinProgressbarIncrement(GHandle gh) {
if (gh->vmt != (gwinVMT *)&progressbarVMT)
return;
if (gsw->max - gsw->pos > gsw->res)
gsw->pos += gsw->res;
else
gsw->pos = gsw->max;
gsw->pos += gsw->res;
if (gsw->pos < gsw->min) gsw->pos = gsw->min;
else if (gsw->pos > gsw->max) gsw->pos = gsw->max;
PBResetDisplayPos(gsw);
_gwinUpdate(gh);
@ -170,12 +168,9 @@ void gwinProgressbarDecrement(GHandle gh) {
if (gh->vmt != (gwinVMT *)&progressbarVMT)
return;
if (gsw->pos > gsw->res)
gsw->pos -= gsw->min;
else
gsw->pos = gsw->min;
gsw->pos -= gsw->res;
if (gsw->pos < gsw->min) gsw->pos = gsw->min;
else if (gsw->pos > gsw->max) gsw->pos = gsw->max;
PBResetDisplayPos(gsw);
_gwinUpdate(gh);

Loading…
Cancel
Save