mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Call VideoDriver to change mouse position fix state.
This avoids the video driver needing to check if the state has changed.pull/13287/head
parent
1bf45cd6ef
commit
23ea9f138a
|
@ -332,7 +332,7 @@ static void LoadIntroGame(bool load_newgrfs = true)
|
||||||
|
|
||||||
FixTitleGameZoom();
|
FixTitleGameZoom();
|
||||||
_pause_mode = PM_UNPAUSED;
|
_pause_mode = PM_UNPAUSED;
|
||||||
_cursor.fix_at = false;
|
VideoDriver::GetInstance()->FixMousePointer(false);
|
||||||
|
|
||||||
CheckForMissingGlyphs();
|
CheckForMissingGlyphs();
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "core/backup_type.hpp"
|
#include "core/backup_type.hpp"
|
||||||
|
#include "video/video_driver.hpp"
|
||||||
#include "clear_map.h"
|
#include "clear_map.h"
|
||||||
#include "industry.h"
|
#include "industry.h"
|
||||||
#include "station_map.h"
|
#include "station_map.h"
|
||||||
|
@ -1866,7 +1867,9 @@ public:
|
||||||
|
|
||||||
void OnScroll(Point delta) override
|
void OnScroll(Point delta) override
|
||||||
{
|
{
|
||||||
if (_settings_client.gui.scroll_mode == VSM_VIEWPORT_RMB_FIXED || _settings_client.gui.scroll_mode == VSM_MAP_RMB_FIXED) _cursor.fix_at = true;
|
if (_settings_client.gui.scroll_mode == VSM_VIEWPORT_RMB_FIXED || _settings_client.gui.scroll_mode == VSM_MAP_RMB_FIXED) {
|
||||||
|
VideoDriver::GetInstance()->FixMousePointer(true);
|
||||||
|
}
|
||||||
|
|
||||||
/* While tile is at (delta.x, delta.y)? */
|
/* While tile is at (delta.x, delta.y)? */
|
||||||
int sub;
|
int sub;
|
||||||
|
|
|
@ -49,6 +49,7 @@ public:
|
||||||
void ClearSystemSprites() override;
|
void ClearSystemSprites() override;
|
||||||
void PopulateSystemSprites() override;
|
void PopulateSystemSprites() override;
|
||||||
|
|
||||||
|
void FixMousePointer(bool fix_at) override;
|
||||||
void EditBoxLostFocus() override;
|
void EditBoxLostFocus() override;
|
||||||
|
|
||||||
std::vector<int> GetListOfMonitorRefreshRates() override;
|
std::vector<int> GetListOfMonitorRefreshRates() override;
|
||||||
|
|
|
@ -240,6 +240,15 @@ bool VideoDriver_Cocoa::AfterBlitterChange()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VideoDriver_Cocoa::FixMousePointer(bool fix_at)
|
||||||
|
{
|
||||||
|
if (_cursor.fix_at == fix_at) return;
|
||||||
|
|
||||||
|
this->VideoDriver::FixMousePointer(fix_at);
|
||||||
|
|
||||||
|
CGAssociateMouseAndMouseCursorPosition(!_cursor.fix_at);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An edit box lost the input focus. Abort character compositing if necessary.
|
* An edit box lost the input focus. Abort character compositing if necessary.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -674,15 +674,6 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||||
HandleMouseEvents();
|
HandleMouseEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)internalMouseButtonEvent
|
|
||||||
{
|
|
||||||
bool cur_fix = _cursor.fix_at;
|
|
||||||
HandleMouseEvents();
|
|
||||||
|
|
||||||
/* Cursor fix mode was changed, synchronize with OS. */
|
|
||||||
if (cur_fix != _cursor.fix_at) CGAssociateMouseAndMouseCursorPosition(!_cursor.fix_at);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)emulateRightButton:(NSEvent *)event
|
- (BOOL)emulateRightButton:(NSEvent *)event
|
||||||
{
|
{
|
||||||
uint32_t keymask = 0;
|
uint32_t keymask = 0;
|
||||||
|
@ -708,7 +699,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||||
[ self rightMouseDown:event ];
|
[ self rightMouseDown:event ];
|
||||||
} else {
|
} else {
|
||||||
_left_button_down = true;
|
_left_button_down = true;
|
||||||
[ self internalMouseButtonEvent ];
|
HandleMouseEvents();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
- (void)mouseUp:(NSEvent *)event
|
- (void)mouseUp:(NSEvent *)event
|
||||||
|
@ -719,7 +710,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||||
} else {
|
} else {
|
||||||
_left_button_down = false;
|
_left_button_down = false;
|
||||||
_left_button_clicked = false;
|
_left_button_clicked = false;
|
||||||
[ self internalMouseButtonEvent ];
|
HandleMouseEvents();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -731,12 +722,12 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||||
{
|
{
|
||||||
_right_button_down = true;
|
_right_button_down = true;
|
||||||
_right_button_clicked = true;
|
_right_button_clicked = true;
|
||||||
[ self internalMouseButtonEvent ];
|
HandleMouseEvents();
|
||||||
}
|
}
|
||||||
- (void)rightMouseUp:(NSEvent *)event
|
- (void)rightMouseUp:(NSEvent *)event
|
||||||
{
|
{
|
||||||
_right_button_down = false;
|
_right_button_down = false;
|
||||||
[ self internalMouseButtonEvent ];
|
HandleMouseEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)scrollWheel:(NSEvent *)event
|
- (void)scrollWheel:(NSEvent *)event
|
||||||
|
|
|
@ -87,6 +87,11 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fix the mouse position position.
|
||||||
|
*/
|
||||||
|
virtual void FixMousePointer(bool fix_at) { _cursor.fix_at = fix_at; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get whether the mouse cursor is drawn by the video driver.
|
* Get whether the mouse cursor is drawn by the video driver.
|
||||||
* @return True if cursor drawing is done by the video driver.
|
* @return True if cursor drawing is done by the video driver.
|
||||||
|
|
|
@ -2365,7 +2365,7 @@ static EventState HandleViewportScroll()
|
||||||
if (_last_scroll_window == nullptr) _last_scroll_window = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y);
|
if (_last_scroll_window == nullptr) _last_scroll_window = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y);
|
||||||
|
|
||||||
if (_last_scroll_window == nullptr || !((_settings_client.gui.scroll_mode != VSM_MAP_LMB && _right_button_down) || scrollwheel_scrolling || (_settings_client.gui.scroll_mode == VSM_MAP_LMB && _left_button_down))) {
|
if (_last_scroll_window == nullptr || !((_settings_client.gui.scroll_mode != VSM_MAP_LMB && _right_button_down) || scrollwheel_scrolling || (_settings_client.gui.scroll_mode == VSM_MAP_LMB && _left_button_down))) {
|
||||||
_cursor.fix_at = false;
|
VideoDriver::GetInstance()->FixMousePointer(false);
|
||||||
_scrolling_viewport = false;
|
_scrolling_viewport = false;
|
||||||
_last_scroll_window = nullptr;
|
_last_scroll_window = nullptr;
|
||||||
return ES_NOT_HANDLED;
|
return ES_NOT_HANDLED;
|
||||||
|
@ -2820,7 +2820,7 @@ static void MouseLoop(MouseClick click, int mousewheel)
|
||||||
if (vp != nullptr) {
|
if (vp != nullptr) {
|
||||||
if (scrollwheel_scrolling && !(w->flags & WF_DISABLE_VP_SCROLL)) {
|
if (scrollwheel_scrolling && !(w->flags & WF_DISABLE_VP_SCROLL)) {
|
||||||
_scrolling_viewport = true;
|
_scrolling_viewport = true;
|
||||||
_cursor.fix_at = true;
|
VideoDriver::GetInstance()->FixMousePointer(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2831,7 +2831,7 @@ static void MouseLoop(MouseClick click, int mousewheel)
|
||||||
if (!(w->flags & WF_DISABLE_VP_SCROLL) &&
|
if (!(w->flags & WF_DISABLE_VP_SCROLL) &&
|
||||||
_settings_client.gui.scroll_mode == VSM_MAP_LMB) {
|
_settings_client.gui.scroll_mode == VSM_MAP_LMB) {
|
||||||
_scrolling_viewport = true;
|
_scrolling_viewport = true;
|
||||||
_cursor.fix_at = false;
|
VideoDriver::GetInstance()->FixMousePointer(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2840,8 +2840,7 @@ static void MouseLoop(MouseClick click, int mousewheel)
|
||||||
if (!(w->flags & WF_DISABLE_VP_SCROLL) &&
|
if (!(w->flags & WF_DISABLE_VP_SCROLL) &&
|
||||||
_settings_client.gui.scroll_mode != VSM_MAP_LMB) {
|
_settings_client.gui.scroll_mode != VSM_MAP_LMB) {
|
||||||
_scrolling_viewport = true;
|
_scrolling_viewport = true;
|
||||||
_cursor.fix_at = (_settings_client.gui.scroll_mode == VSM_VIEWPORT_RMB_FIXED ||
|
VideoDriver::GetInstance()->FixMousePointer(_settings_client.gui.scroll_mode == VSM_VIEWPORT_RMB_FIXED || _settings_client.gui.scroll_mode == VSM_MAP_RMB_FIXED);
|
||||||
_settings_client.gui.scroll_mode == VSM_MAP_RMB_FIXED);
|
|
||||||
DispatchRightClickEvent(w, x - w->left, y - w->top);
|
DispatchRightClickEvent(w, x - w->left, y - w->top);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue