1 #include <lib/gui/egauge.h>
5 #include <lib/base/erect.h>
6 #include <lib/gdi/fb.h>
7 #include <lib/gdi/lcd.h>
8 #include <lib/gui/eskin.h>
9 #include <lib/system/init.h>
10 #include <lib/system/init_num.h>
11 #include <lib/system/math.h>
14 * eGauge skin widget. Uses same syntax as eProgress
15 * - start parameter indicates start and end offset in degrees for the marker.
16 * - The 'start' parameter can be set in skin file
17 * - The 'pixmap' parameter can be used to specify a background pixmap
18 * - The 'sliderpixmap' parameter can be used to specify a png file as marker instead of the line.
19 * It is drawn just against the border.
20 * Note: The pixmap itself will not be rotated. So it is best to use a circular picture.
21 * - the egauge background is set to transparent
24 eGauge::eGauge(eWidget
*parent
, int takefocus
)
25 : eProgress(parent
, takefocus
)
33 void eGauge::redrawWidget(gPainter
*target
, const eRect
&area
)
37 target
->blit(*pixmap
, ePoint(0, 0), area
, gPixmap::blitAlphaTest
);
43 target
->setForegroundColor(getForegroundColor());
44 target
->fill(eRect(0, 0, size
.width(), border
));
45 target
->fill(eRect(0, border
, border
, size
.height()-border
));
46 target
->fill(eRect(border
, size
.height()-border
, size
.width()-border
, border
));
47 target
->fill(eRect(size
.width()-border
, border
, border
, size
.height()-border
));
51 int basex
= size
.width() >> 1;
52 int basey
= size
.height() >> 1;
54 //target->setForegroundColor(right);
55 //target->fill(eRect(border, border, size.width()-border*2, size.height()-border*2));
57 double angle
= (double) start
+ (double) perc
* (double)(360 - (start
<<1)) / 100.0;
58 double rads
= Radians(angle
);
64 endx
= basex
+ (int) (SIN(rads
) * (double)(size
.width() - (border
<<1))/2.0);
65 endy
= basey
- (int) (COS(rads
) * (double)(size
.height() - (border
<<1))/2.0);
69 endx
= basex
- (int) (SIN(rads
) * (double)(size
.width() - (border
<<1))/2.0);
70 endy
= basey
+ (int) (COS(rads
) * (double)(size
.height() - (border
<<1))/2.0);
72 target
->setForegroundColor(left
);
73 target
->line(ePoint(basex
, basey
), ePoint(endx
, endy
));
79 endx
= basex
+ (int) (SIN(rads
) * (double)(size
.width() - (border
<<1) - sliderPixmap
->x
) / 2.0) - (sliderPixmap
->x
>> 1);
80 endy
= basey
- (int) (COS(rads
) * (double)(size
.height() - (border
<<1) - sliderPixmap
->y
) / 2.0) - (sliderPixmap
->y
>> 1);
84 endx
= basex
- (int) (SIN(rads
) * (double)(size
.width() - (border
<<1) - sliderPixmap
->x
) / 2.0) - (sliderPixmap
->x
>> 1);
85 endy
= basey
+ (int) (COS(rads
) * (double)(size
.height() - (border
<<1) - sliderPixmap
->y
) / 2.0) - (sliderPixmap
->y
>> 1);
87 //eDebug("sliderPixmap %d,%d at %d,%d size=%d,%d border=%d offset=%d", basex, basey, endx, endy, sliderPixmap->x, sliderPixmap->y, border, pixmapoffset );
88 target
->blit(*sliderPixmap
, ePoint(endx
, endy
), area
, gPixmap::blitAlphaTest
);
92 static eWidget
*create_eGauge(eWidget
*parent
)
94 return new eGauge(parent
);
102 eSkin::addWidgetCreator("eGauge", create_eGauge
);
106 eSkin::removeWidgetCreator("eGauge", create_eGauge
);
110 eAutoInitP0
<eGaugeSkinInit
> init_eGaugeSkinInit(eAutoInitNumbers::guiobject
, "eGauge");