Files
scummvm/engines/ags/engine/gui/new_control.cpp
T
Walter Agazzi 72888a7a8c AGS: Engine: move cursor and cursor-over-gui updates to the game update fn
This is necessary for the touch-to-mouse emulation to work
properly (and perhaps true touch controls in the future).
The order of updates is a bit wrong historically, where cursor
position and gui control focus is updated later than the
handling of button events. This means, for example, that if the
cursor was positioned over button in game frame 1, then the
mouse click will only trigger button press not later than the frame 2.

Changes:
* moved "cursor over gui" poll from draw_gui_and_overlays()
to update_cursor_over_gui(), call it in the main game update fn.
* moved update_mouse_cursor() call from
construct_game_screen_overlay() to the game update fn
(renamed to update_cursor_view().
* picked out "cursor over location" trigger out of the "render"
function into update_cursor_over_location(), call it explicitly in
the main game update fn.

Effect on user script callbacks:
* the cursor position (and gui focus) will now be updated prior
to `late_repeatedly_execute_always()` callback. Other callbacks
will not be affected, as their relative order won't change
compared with these updates.

From upstream 23493a681d4f66ae0b1088cddb82241b0bc80dbb
2023-04-29 13:11:41 +02:00

75 lines
1.8 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "ags/engine/gui/new_control.h"
#include "ags/engine/gui/gui_dialog.h"
#include "ags/engine/gui/gui_dialog_internal_defs.h"
#include "ags/globals.h"
namespace AGS3 {
NewControl::NewControl(int xx, int yy, int wi, int hi) {
x = xx;
y = yy;
wid = wi;
hit = hi;
state = 0;
typeandflags = 0;
wlevel = 0;
visible = 1;
enabled = 1;
needredraw = 1;
}
NewControl::NewControl() {
x = y = wid = hit = 0;
state = 0;
typeandflags = 0;
wlevel = 0;
visible = 1;
enabled = 1;
needredraw = 1;
}
int NewControl::mouseisinarea(int mx, int my) {
if (_G(topwindowhandle) != wlevel)
return 0;
if ((mx > x) &(mx < x + wid) &(my > y) &(my < y + hit))
return 1;
return 0;
}
void NewControl::drawifneeded() {
if (_G(topwindowhandle) != wlevel)
return;
if (needredraw) {
needredraw = 0;
draw(get_gui_screen());
}
}
void NewControl::drawandmouse() {
draw(get_gui_screen());
}
} // namespace AGS3