From 4d7c04ee3b5d70c0bcff149e0d2023aea4eb07af Mon Sep 17 00:00:00 2001
From: "p.kosyh"
Date: Thu, 11 Mar 2010 10:23:32 +0000
Subject: [PATCH] filter up/down clicks and menu clicks
---
src/sdl-instead/game.c | 124 ++++++++++++++++++++++-------------------
1 file changed, 67 insertions(+), 57 deletions(-)
diff --git a/src/sdl-instead/game.c b/src/sdl-instead/game.c
index 8d1ee83..6f5c38a 100644
--- a/src/sdl-instead/game.c
+++ b/src/sdl-instead/game.c
@@ -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;