void ks0108DrawRoundRect(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t radius, uint8_t color) { int16_t tSwitch, x1 = 0, y1 = radius; tSwitch = 3 - 2 * radius; while (x1 <= y1) { ks0108SetDot(x+radius - x1, y+radius - y1, color); ks0108SetDot(x+radius - y1, y+radius - x1, color); ks0108SetDot(x+width-radius + x1, y+radius - y1, color); ks0108SetDot(x+width-radius + y1, y+radius - x1, color); ks0108SetDot(x+width-radius + x1, y+height-radius + y1, color); ks0108SetDot(x+width-radius + y1, y+height-radius + x1, color); ks0108SetDot(x+radius - x1, y+height-radius + y1, color); ks0108SetDot(x+radius - y1, y+height-radius + x1, color); if (tSwitch < 0) { tSwitch += (4 * x1 + 6); } else { tSwitch += (4 * (x1 - y1) + 10); y1--; } x1++; } ks0108DrawHoriLine(x+radius, y, width-(2*radius), color); // top ks0108DrawHoriLine(x+radius, y+height, width-(2*radius), color); // bottom ks0108DrawVertLine(x, y+radius, height-(2*radius), color); // left ks0108DrawVertLine(x+width, y+radius, height-(2*radius), color); // right }
void drawBar(batteryBar *pb){ //Calculate plox uint8_t widthToFill = ((KS0108_SCREEN_WIDTH * pb->value) / pb->max); ks0108DrawHoriLine(0, pb->y, KS0108_SCREEN_WIDTH ,WHITE); ks0108DrawHoriLine(0, pb->y,widthToFill,BLACK); }
void ks0108DrawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t color) { uint8_t length, i, y, yAlt, xTmp, yTmp; int16_t m; // // vertical line // if(x1 == x2) { // x1|y1 must be the upper point if(y1 > y2) { yTmp = y1; y1 = y2; y2 = yTmp; } ks0108DrawVertLine(x1, y1, y2-y1, color); // // horizontal line // } else if(y1 == y2) { // x1|y1 must be the left point if(x1 > x2) { xTmp = x1; x1 = x2; x2 = xTmp; } ks0108DrawHoriLine(x1, y1, x2-x1, color); // // schiefe line :) // } else { // angle >= 45° if((y2-y1) >= (x2-x1) || (y1-y2) >= (x2-x1)) { // x1 must be smaller than x2 if(x1 > x2) { xTmp = x1; yTmp = y1; x1 = x2; y1 = y2; x2 = xTmp; y2 = yTmp; } length = x2-x1; // not really the length :) m = ((y2-y1)*200)/length; yAlt = y1; for(i=0; i<=length; i++) { y = ((m*i)/200)+y1; if((m*i)%200 >= 100) y++; else if((m*i)%200 <= -100) y--; ks0108DrawLine(x1+i, yAlt, x1+i, y, color); if(length <= (y2-y1) && y1 < y2) yAlt = y+1; else if(length <= (y1-y2) && y1 > y2) yAlt = y-1; else yAlt = y; } // angle < 45° } else { // y1 must be smaller than y2 if(y1 > y2) { xTmp = x1; yTmp = y1; x1 = x2; y1 = y2; x2 = xTmp; y2 = yTmp; } length = y2-y1; m = ((x2-x1)*200)/length; yAlt = x1; for(i=0; i<=length; i++) { y = ((m*i)/200)+x1; if((m*i)%200 >= 100) y++; else if((m*i)%200 <= -100) y--; ks0108DrawLine(yAlt, y1+i, y, y1+i, color); if(length <= (x2-x1) && x1 < x2) yAlt = y+1; else if(length <= (x1-x2) && x1 > x2) yAlt = y-1; else yAlt = y; } } } }
void ks0108DrawRect(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t color) { ks0108DrawHoriLine(x, y, width, color); // top ks0108DrawHoriLine(x, y+height, width, color); // bottom ks0108DrawVertLine(x, y, height, color); // left ks0108DrawVertLine(x+width, y, height, color); // right }