projects
/
retroray
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add relative mouse handling in mouse.asm
[retroray]
/
src
/
rtk.c
diff --git
a/src/rtk.c
b/src/rtk.c
index
88ce5af
..
b9d06d5
100644
(file)
--- a/
src/rtk.c
+++ b/
src/rtk.c
@@
-194,6
+194,11
@@
int rtk_win_has(rtk_widget *par, rtk_widget *child)
}
/* --- button functions --- */
}
/* --- 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)
{
void rtk_bn_set_icon(rtk_widget *w, rtk_icon *icon)
{
@@
-584,13
+589,20
@@
static void draw_window(rtk_widget *w)
static void draw_button(rtk_widget *w)
{
static void draw_button(rtk_widget *w)
{
+ int pressed;
rtk_rect rect;
widget_rect(w, &rect);
abs_pos(w, &rect.x, &rect.y);
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) {
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++;
rect.x++;
rect.y++;
@@
-677,9
+689,11
@@
static void setpress(rtk_widget *w)
static void click(rtk_widget *w, int x, int y)
{
switch(w->type) {
static void click(rtk_widget *w, int x, int y)
{
switch(w->type) {
- case RTK_CHECKBOX:
- w->any.value ^= 1;
case RTK_BUTTON:
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);
}
if(w->any.cbfunc) {
w->any.cbfunc(w, w->any.cbcls);
}
@@
-725,8
+739,6
@@
int rtk_input_mmotion(rtk_widget *w, int x, int y)
return res;
}
return res;
}
- sethover(w);
-
if(w->type == RTK_WIN) {
c = w->win.clist;
while(c) {
if(w->type == RTK_WIN) {
c = w->win.clist;
while(c) {
@@
-737,5
+749,9
@@
int rtk_input_mmotion(rtk_widget *w, int x, int y)
}
}
}
}
- return 1;
+ if(hover != w) {
+ sethover(w);
+ return 1;
+ }
+ return 0;
}
}