81 lines
2.0 KiB
ActionScript 3
81 lines
2.0 KiB
ActionScript 3
vec2i prev_size;
|
|
const vec2i min_resolution(1280, 720);
|
|
const double[] ui_zoom_factors = {0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0};
|
|
const int ui_default_zoom_index = 5;
|
|
int ui_zoom_index = ui_default_zoom_index;
|
|
bool canZoom = true;
|
|
|
|
int get_max_zoom_index() {
|
|
for(int i = 0, cnt = ui_zoom_factors.length; i < cnt; ++i) {
|
|
if(double(windowSize.x) / ui_zoom_factors[i] < min_resolution.x
|
|
|| double(windowSize.y) / ui_zoom_factors[i] < min_resolution.y) {
|
|
return max(i - 1, 0);
|
|
}
|
|
}
|
|
return ui_zoom_factors.length - 1;
|
|
}
|
|
|
|
void ui_zoom_in(bool pressed) {
|
|
if(!pressed) {
|
|
if(!canZoom)
|
|
return;
|
|
if(ui_zoom_index >= max_zoom_index)
|
|
return;
|
|
ui_zoom_index += 1;
|
|
uiScale = ui_zoom_factors[ui_zoom_index];
|
|
}
|
|
}
|
|
|
|
void ui_zoom_out(bool pressed) {
|
|
if(!pressed) {
|
|
if(!canZoom)
|
|
return;
|
|
if(ui_zoom_index == 0)
|
|
return;
|
|
ui_zoom_index -= 1;
|
|
uiScale = ui_zoom_factors[ui_zoom_index];
|
|
}
|
|
}
|
|
|
|
void ui_zoom_reset(bool pressed) {
|
|
if(!pressed) {
|
|
ui_zoom_index = ui_default_zoom_index;
|
|
uiScale = ui_zoom_factors[ui_zoom_index];
|
|
}
|
|
}
|
|
|
|
void init() {
|
|
keybinds::Global.addBind(KB_UI_ZOOM_IN, "ui_zoom_in");
|
|
keybinds::Global.addBind(KB_UI_ZOOM_OUT, "ui_zoom_out");
|
|
keybinds::Global.addBind(KB_UI_ZOOM_RESET, "ui_zoom_reset");
|
|
}
|
|
|
|
void tick(double time) {
|
|
if(windowSize != prev_size) {
|
|
//Calculate the default zoom
|
|
if(windowSize.x < min_resolution.x || windowSize.y < min_resolution.y) {
|
|
double xzoom = double(windowSize.x) / double(min_resolution.x);
|
|
double yzoom = double(windowSize.y) / double(min_resolution.y);
|
|
double factor = round(min(xzoom, yzoom) * 100.0) / 100.0;
|
|
if(factor >= 0.1 && factor <= 10.0) {
|
|
canZoom = false;
|
|
uiScale = factor;
|
|
}
|
|
}
|
|
else {
|
|
if(!canZoom) {
|
|
canZoom = true;
|
|
uiScale = ui_zoom_factors[ui_zoom_index];
|
|
}
|
|
|
|
int max = max_zoom_index;
|
|
if(ui_zoom_index > max) {
|
|
ui_zoom_index = max;
|
|
uiScale = ui_zoom_factors[ui_zoom_index];
|
|
}
|
|
}
|
|
|
|
prev_size = windowSize;
|
|
}
|
|
}
|