}
/* --- button functions --- */
+void rtk_bn_mode(rtk_widget *w, int mode)
+{
+ RTK_ASSERT_TYPE(w, RTK_BUTTON);
+ w->bn.mode = mode;
+}
void rtk_bn_set_icon(rtk_widget *w, rtk_icon *icon)
{
static void draw_button(rtk_widget *w)
{
+ int pressed;
rtk_rect rect;
widget_rect(w, &rect);
abs_pos(w, &rect.x, &rect.y);
+ if(w->bn.mode == RTK_TOGGLEBN) {
+ pressed = w->any.value;
+ } else {
+ pressed = w->any.flags & PRESS;
+ }
+
if(rect.width > 2 && rect.height > 2) {
- draw_frame(&rect, w->any.flags & PRESS ? FRM_INSET : FRM_OUTSET);
+ draw_frame(&rect, pressed ? FRM_INSET : FRM_OUTSET);
rect.x++;
rect.y++;
static void click(rtk_widget *w, int x, int y)
{
switch(w->type) {
- case RTK_CHECKBOX:
- w->any.value ^= 1;
case RTK_BUTTON:
+ if(w->bn.mode == RTK_TOGGLEBN) {
+ case RTK_CHECKBOX:
+ w->any.value ^= 1;
+ }
if(w->any.cbfunc) {
w->any.cbfunc(w, w->any.cbcls);
}