Chesto 0.9
A declarative and element-based library for creating GUIs on homebrew'd consoles
ProgressBar.cpp
1#include "ProgressBar.hpp"
2#include "RootDisplay.hpp"
3
4ProgressBar::ProgressBar()
5{
6 // total width of full progress bar
7 this->width = 450;
8 this->height = 5; //HACKY: progress bars are 9 px tall and erroneously extend 4 px above their y-position (other elements use y-position as top, not center)
9 this->color = 0x56c1dfff;
10}
11
13{
14 // if we're hidden, don't render
15 if (hidden) return;
16
17 if (this->percent < 0)
18 return;
19
20 auto renderer = getRenderer();
21
22 if (dimBg)
23 {
24 // draw a big dim layer around the entire window before drawing this progress bar
25 CST_Rect dim = { 0, 0, RootDisplay::screenWidth, RootDisplay::screenHeight };
26
27 CST_SetDrawBlend(renderer, true);
28 CST_SetDrawColorRGBA(renderer, 0x00, 0x00, 0x00, 0xbb);
29 CST_FillRect(renderer, &dim);
30 }
31
32 this->recalcPosition(parent);
33
34 int blue = this->color;
35 // int gray = 0x989898ff;
36
37 // draw full grayed out bar first
38 CST_Rect gray_rect;
39 gray_rect.x = this->xAbs;
40 gray_rect.y = this->yAbs - 4;
41 gray_rect.w = this->width;
42 gray_rect.h = 9;
43
44 CST_SetDrawColorRGBA(renderer, 0x98, 0x98, 0x98, 0xff); //gray2
45 CST_FillRect(renderer, &gray_rect);
46
47 // draw ending "circle"
48 CST_filledCircleRGBA(renderer, this->xAbs + this->width, this->yAbs, 4, 0x98, 0x98, 0x98, 0xff);
49
50 // draw left "circle" (rounded part of bar)
51 CST_filledCircleRGBA(renderer, this->xAbs, this->yAbs, 4, 0x56, 0xc1, 0xdf, 0xff);
52
53 // draw blue progress bar so far
54 CST_Rect blue_rect;
55 blue_rect.x = this->xAbs;
56 blue_rect.y = this->yAbs - 4;
57 blue_rect.w = this->width * this->percent;
58 blue_rect.h = 9;
59
60 CST_SetDrawColorRGBA(renderer, 0x56, 0xc1, 0xdf, 0xff); // blue2
61 CST_FillRect(renderer, &blue_rect);
62
63 // draw right "circle" (rounded part of bar, and ending)
64 CST_filledCircleRGBA(renderer, this->xAbs + width * this->percent, this->yAbs, 4, 0x56, 0xc1, 0xdf, 0xff);
65}
bool hidden
whether this element should skip rendering or not
Definition: Element.hpp:105
Element * parent
the parent element (can sometimes be null if it isn't set)
Definition: Element.hpp:102
void render(Element *parent)
display the current state of the display
Definition: ProgressBar.cpp:12