filter up/down clicks and menu clicks

This commit is contained in:
p.kosyh 2010-03-11 10:23:32 +00:00
parent fa54df42c3
commit 4d7c04ee3b

View file

@ -1245,64 +1245,7 @@ static void scroll_to_diff(const char *cmdstr, int cur_off)
int game_highlight(int x, int y, int on);
static int game_bg_coord(int x, int y, int *ox, int *oy)
{
struct game_theme *t = &game_theme;
if (x < t->xoff || y < t->yoff || x >= (t->w - t->xoff) || y >= (t->h - t->yoff))
return -1;
*ox = (int)((float)(x - t->xoff) / (float)t->scale);
*oy = (int)((float)(y - t->yoff) / (float)t->scale);
return 0;
}
static int game_pic_coord(int x, int y, int *ox, int *oy)
{
int xx, yy, ww, hh;
img_t img;
word_t word;
img = el_img(el_spic);
if (!img)
return -1;
if (game_theme.gfx_mode != GFX_MODE_EMBEDDED) {
xx = el(el_spic)->x;
yy = el(el_spic)->y;
ww = gfx_img_w(img);
hh = gfx_img_h(img);
goto out;
}
el_size(el_scene, &ww, &hh);
if (x < el(el_scene)->x || y < el(el_scene)->y || x >= el(el_scene)->x + ww ||
y >= el(el_scene)->y + hh)
return -1; /* no scene layout */
for (word = NULL; (word = txt_layout_words(txt_box_layout(el_box(el_scene)), word)); ) { /* scene */
if (word_image(word) != el_img(el_spic))
continue;
word_geom(word, &xx, &yy, &ww, &hh);
yy -= txt_box_off(el_box(el_scene));
xx += el(el_scene)->x;
yy += el(el_scene)->y;
goto out;
}
if (!word)
return -1;
out:
if (x >= xx && y >= yy && x < (xx + ww) && y < (yy + hh)) {
*ox = x - xx;
*oy = y - yy;
if (ww)
*ox = (int)((float)(*ox) * (float)game_pic_w / (float)ww);
else
*ox = 0;
if (hh)
*oy = (int)((float)(*oy) * (float)game_pic_h / (float)hh);
else
*oy = 0;
return 0;
}
return -1;
}
int game_cmd(char *cmd)
{
@ -2234,6 +2177,73 @@ static int is_key(struct inp_event *ev, const char *name)
return strcmp(ev->sym, name);
}
static int game_pic_coord(int x, int y, int *ox, int *oy)
{
int xx, yy, ww, hh;
img_t img;
word_t word;
img = el_img(el_spic);
if (!img)
return -1;
if (game_theme.gfx_mode != GFX_MODE_EMBEDDED) {
xx = el(el_spic)->x;
yy = el(el_spic)->y;
ww = gfx_img_w(img);
hh = gfx_img_h(img);
goto out;
}
el_size(el_scene, &ww, &hh);
if (x < el(el_scene)->x || y < el(el_scene)->y || x >= el(el_scene)->x + ww ||
y >= el(el_scene)->y + hh)
return -1; /* no scene layout */
for (word = NULL; (word = txt_layout_words(txt_box_layout(el_box(el_scene)), word)); ) { /* scene */
if (word_image(word) != el_img(el_spic))
continue;
word_geom(word, &xx, &yy, &ww, &hh);
yy -= txt_box_off(el_box(el_scene));
xx += el(el_scene)->x;
yy += el(el_scene)->y;
goto out;
}
if (!word)
return -1;
out:
if (x >= xx && y >= yy && x < (xx + ww) && y < (yy + hh)) {
*ox = x - xx;
*oy = y - yy;
if (ww)
*ox = (int)((float)(*ox) * (float)game_pic_w / (float)ww);
else
*ox = 0;
if (hh)
*oy = (int)((float)(*oy) * (float)game_pic_h / (float)hh);
else
*oy = 0;
return 0;
}
return -1;
}
static int game_bg_coord(int x, int y, int *ox, int *oy)
{
struct el *o;
struct game_theme *t = &game_theme;
if (x < t->xoff || y < t->yoff || x >= (t->w - t->xoff) || y >= (t->h - t->yoff))
return -1;
o = look_obj(x, y);
if (o && (o->id == el_sup || o->id == el_sdown ||
o->id == el_iup || o->id == el_idown ||
o->id == el_menu_button))
return -1; /* ask Odyssey for that ;) */
*ox = (int)((float)(x - t->xoff) / (float)t->scale);
*oy = (int)((float)(y - t->yoff) / (float)t->scale);
return 0;
}
static int game_input(int down, const char *key, int x, int y, int mb)
{
char *p;