X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fanim.c;h=9ab9f6dcf4356b4d9ec45300daed590a5103fa37;hp=e603a9d38a0e3760e616a83f623db24c2aac39d1;hb=1c7bb353048c08f4f49c31c81d480c94363bd9ce;hpb=d89a9ba5381e625d4e993d9ee5a69b9010b43180 diff --git a/src/anim.c b/src/anim.c index e603a9d3..9ab9f6dc 100644 --- a/src/anim.c +++ b/src/anim.c @@ -880,6 +880,11 @@ static boolean SetGlobalAnimPart_Viewport(struct GlobalAnimPartControlInfo *part int mx = MIN(MAX(0, gfx.mouse_x), WIN_XSIZE - 1); int my = MIN(MAX(0, gfx.mouse_y), WIN_YSIZE - 1); + // prevent displaying off-screen custom mouse cursor in upper left corner + if (gfx.mouse_x == POS_OFFSCREEN && + gfx.mouse_y == POS_OFFSCREEN) + mx = my = POS_OFFSCREEN; + viewport_x = mx - part->control_info.x; viewport_y = my - part->control_info.y; viewport_width = part->graphic_info.width; @@ -1129,7 +1134,7 @@ static boolean clickConsumed(struct GlobalAnimPartControlInfo *part) } static void InitGlobalAnim_Triggered(struct GlobalAnimPartControlInfo *part, - boolean *anything_clicked, + boolean *click_consumed, boolean *any_event_action, int event_value, char *info_text) { @@ -1153,13 +1158,13 @@ static void InitGlobalAnim_Triggered(struct GlobalAnimPartControlInfo *part, { struct GlobalAnimPartControlInfo *part2 = &anim2->part[part2_nr]; - if (part2->state != ANIM_STATE_RUNNING) + if (!(part2->state & ANIM_STATE_RUNNING)) continue; if (isClickablePart(part2, mask)) { part2->triggered = TRUE; - *anything_clicked = clickConsumed(part); // click was on "part"! + *click_consumed = clickConsumed(part); // click was on "part"! #if DEBUG_ANIM_EVENTS printf("::: => %d.%d TRIGGERED BY %s OF %d.%d\n", @@ -1209,11 +1214,11 @@ static void HandleGlobalAnimEvent(struct GlobalAnimPartControlInfo *part, printf("::: %d.%d %s\n", part->old_anim_nr + 1, part->old_nr + 1, info_text); #endif - boolean anything_clicked = FALSE; + boolean click_consumed = FALSE; boolean any_event_action = FALSE; // check if this event is defined to trigger other animations - InitGlobalAnim_Triggered(part, &anything_clicked, &any_event_action, + InitGlobalAnim_Triggered(part, &click_consumed, &any_event_action, event_value, info_text); } @@ -1754,7 +1759,7 @@ static void InitGlobalAnim_Clickable(void) static boolean InitGlobalAnim_Clicked(int mx, int my, int clicked_event) { - boolean anything_clicked = FALSE; + boolean click_consumed = FALSE; boolean any_part_clicked = FALSE; boolean any_event_action = FALSE; int mode_nr; @@ -1786,7 +1791,7 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, int clicked_event) if (!part->clickable) continue; - if (part->state != ANIM_STATE_RUNNING) + if (!(part->state & ANIM_STATE_RUNNING)) continue; // always handle "any" click events (clicking anywhere on screen) ... @@ -1799,7 +1804,7 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, int clicked_event) #endif part->clicked = TRUE; - anything_clicked = clickConsumed(part); + click_consumed = clickConsumed(part); } // always handle "unclick:any" events (releasing anywhere on screen) ... @@ -1812,7 +1817,7 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, int clicked_event) #endif part->clicked = TRUE; - anything_clicked = clickConsumed(part); + click_consumed = clickConsumed(part); } // ... but only handle the first (topmost) clickable animation @@ -1842,18 +1847,18 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, int clicked_event) #endif part->clicked = TRUE; - anything_clicked = clickConsumed(part); + click_consumed = clickConsumed(part); } // check if this click is defined to trigger other animations - InitGlobalAnim_Triggered(part, &anything_clicked, &any_event_action, + InitGlobalAnim_Triggered(part, &click_consumed, &any_event_action, ANIM_EVENT_CLICK, "CLICK"); } } } } - if (anything_clicked) + if (click_consumed) { handle_click = TRUE; @@ -1862,7 +1867,7 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, int clicked_event) handle_click = FALSE; } - return (anything_clicked || any_event_action); + return (click_consumed || any_event_action); } static void ResetGlobalAnim_Clickable(void)