Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user