-
Notifications
You must be signed in to change notification settings - Fork 0
/
MikroSlider.c
130 lines (102 loc) · 4.4 KB
/
MikroSlider.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include "MikroSlider.h"
/* Macros */
#define SlideInColor RGB(190,190,190) /* Grey */
#define SlideOutColor RGB(100,100,100) /* Dark Grey */
#define SliderBoarderSize 2
#define SliderKnobSize 5
#define DetectOutline 5
/* Function Prototypes */
void DisplaySlider(Slider* MySlider);
void DrawCircle(uint16 x0, uint16 y0, uint16 rad, uint8 Color);
/*
* Creates Slider
* 0 < posx < 320
* 0 < posy < 240
* 0 < size
* ort = hrz or vrt
*/
void StartSlider(Slider* MySlider, uint16 posx, uint16 posy, uint16 size, enum orientation ort){
MySlider->visible = 1; /* Initialized to shown */
MySlider->posx = posx;
MySlider->posy = posy;
MySlider->size = size;
MySlider->ort = ort;
MySlider->value = 0;
MySlider->scaledvalue = 0;
DisplaySlider(MySlider);
}
void CheckSlider(Slider* MySlider){
if (MySlider->ort){
if(DetectRectangle(MySlider->posx-DetectOutline, MySlider->posy - MySlider->size,
MySlider->posx+1+DetectOutline, MySlider->posy)){
if(tsy != (MySlider->posy - MySlider->value)){
MySlider->value = MySlider->posy - tsy;
DisplaySlider(MySlider);
MySlider->scaledvalue = ((float)(MySlider->value)/MySlider->size)*255;
}
}
} else {
if(DetectRectangle(MySlider->posx, MySlider->posy - DetectOutline,
MySlider->posx+MySlider->size, MySlider->posy+1+DetectOutline)){
if(tsx != (MySlider->posx + MySlider->value)){
MySlider->value = (tsx - MySlider->posx);
DisplaySlider(MySlider);
MySlider->scaledvalue = ((float)(MySlider->value)/MySlider->size)*255;
}
}
}
}
void DisplaySlider(Slider* MySlider){
if (MySlider->ort){
/* Vertical Orientation */
/* Erases Slider */
DrawRectangle(MySlider->posx-SliderKnobSize+1, MySlider->posy - MySlider->size - SliderKnobSize,
MySlider->posx+SliderKnobSize, MySlider->posy + SliderKnobSize, BKGD);
/* Draws Outline of Slider */
DrawRectangle(MySlider->posx-SliderBoarderSize, MySlider->posy - MySlider->size,
MySlider->posx+1+SliderBoarderSize, MySlider->posy, SlideOutColor);
/* Draws Inline of Slider */
DrawRectangle(MySlider->posx, MySlider->posy - MySlider->size,
MySlider->posx+1, MySlider->posy, SlideInColor);
/* Draws Slider */
DrawRectangle(MySlider->posx-SliderKnobSize+1, MySlider->posy-SliderKnobSize - (MySlider->value),
MySlider->posx+SliderKnobSize, MySlider->posy+SliderKnobSize - (MySlider->value), BLACK);
} else {
/* Horizontal Orientation */
/* Erases Slider */
DrawRectangle(MySlider->posx-SliderKnobSize, MySlider->posy - SliderKnobSize-1,
MySlider->posx+MySlider->size+SliderKnobSize, MySlider->posy+SliderKnobSize, BKGD);
DrawRectangle(MySlider->posx, MySlider->posy - SliderBoarderSize,
MySlider->posx+MySlider->size, MySlider->posy+SliderBoarderSize, SlideOutColor);
DrawRectangle(MySlider->posx, MySlider->posy - 1,
MySlider->posx + MySlider->size, MySlider->posy, SlideInColor);
DrawRectangle(MySlider->posx-SliderKnobSize+1 + (MySlider->value), MySlider->posy-SliderKnobSize,
MySlider->posx+SliderKnobSize + (MySlider->value), MySlider->posy+SliderKnobSize, BLACK);
}
}
void DrawCircle(uint16 x0, uint16 y0, uint16 rad, uint8 Color){
uint16 x = rad;
uint16 y = 0;
uint16 xChange = 1 - (rad << 1);
uint16 yChange = 0;
uint16 radError = 0;
while (x >= y){
WritePixelAt(x + x0, y + y0, Color);
WritePixelAt(y + x0, x + y0, Color);
WritePixelAt(-x + x0, y + y0, Color);
WritePixelAt(-y + x0, x + y0, Color);
WritePixelAt(-x + x0, -y + y0, Color);
WritePixelAt(-y + x0, -x + y0, Color);
WritePixelAt(x + x0, -y + y0, Color);
WritePixelAt(y + x0, -x + y0, Color);
y++;
radError += yChange;
yChange += 2;
if(((radError << 1) + xChange) > 0)
{
x--;
radError += xChange;
xChange += 2;
}
}
}