Disable closer zoom levels for software rendering

This commit is contained in:
Ted John 2020-08-22 15:39:58 +01:00
parent 609cde2304
commit a1cd02c61c
5 changed files with 30 additions and 4 deletions

View File

@ -535,6 +535,8 @@ namespace OpenRCT2
}
}
}
window_check_all_valid_zoom();
}
void DisposeDrawingEngine() final override

View File

@ -17,6 +17,7 @@
#include "../core/Guard.hpp"
#include "../core/JobPool.hpp"
#include "../drawing/Drawing.h"
#include "../drawing/IDrawingEngine.h"
#include "../paint/Paint.h"
#include "../peep/Staff.h"
#include "../ride/Ride.h"
@ -1926,3 +1927,15 @@ void viewport_set_saved_view()
gSavedViewRotation = get_current_rotation();
}
}
ZoomLevel ZoomLevel::min()
{
if (drawing_engine_get_type() == DRAWING_ENGINE_OPENGL)
{
return -2;
}
else
{
return 0;
}
}

View File

@ -1001,6 +1001,19 @@ void window_viewport_centre_tile_around_cursor(rct_window* w, int16_t map_x, int
centreLoc->y + rebased_y + (offset_y / w->viewport->zoom) };
}
/**
* For all windows with viewports, ensure they do not have a zoom level less than the minimum.
*/
void window_check_all_valid_zoom()
{
window_visit_each([](rct_window* w) {
if (w->viewport != nullptr && w->viewport->zoom < ZoomLevel::min())
{
window_zoom_set(w, ZoomLevel::min(), false);
}
});
}
void window_zoom_set(rct_window* w, ZoomLevel zoomLevel, bool atCursor)
{
rct_viewport* v = w->viewport;

View File

@ -724,6 +724,7 @@ void window_rotate_camera(rct_window* w, int32_t direction);
void window_viewport_get_map_coords_by_cursor(
rct_window* w, int16_t* map_x, int16_t* map_y, int16_t* offset_x, int16_t* offset_y);
void window_viewport_centre_tile_around_cursor(rct_window* w, int16_t map_x, int16_t map_y, int16_t offset_x, int16_t offset_y);
void window_check_all_valid_zoom();
void window_zoom_set(rct_window* w, ZoomLevel zoomLevel, bool atCursor);
void window_zoom_in(rct_window* w, bool atCursor);
void window_zoom_out(rct_window* w, bool atCursor);

View File

@ -136,10 +136,7 @@ public:
return lhs >> rhs._level;
}
static constexpr ZoomLevel min()
{
return -2;
}
static ZoomLevel min();
static constexpr ZoomLevel max()
{