Files
starruler-linux/scripts/toolkit/gui_zoom.as
T
2018-07-17 14:15:37 +02:00

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;
}
}