forked from jaildesigner-jailgames/jaildoctors_dilemma
screen: opcio d'establir el nivell de zoom directament
console: opcio d'establir el zoom directament
This commit is contained in:
@@ -194,6 +194,21 @@ auto Screen::incWindowZoom() -> bool {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Establece el zoom directamente; false si fuera del rango [1, max_zoom] o en pantalla completa
|
||||||
|
auto Screen::setWindowZoom(int zoom) -> bool {
|
||||||
|
if (Options::video.fullscreen) { return false; }
|
||||||
|
if (zoom < 1 || zoom > Options::window.max_zoom) { return false; }
|
||||||
|
if (zoom == Options::window.zoom) { return false; }
|
||||||
|
Options::window.zoom = zoom;
|
||||||
|
setVideoMode(Options::video.fullscreen);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Devuelve el zoom máximo permitido según la pantalla actual
|
||||||
|
auto Screen::getMaxZoom() const -> int {
|
||||||
|
return Options::window.max_zoom;
|
||||||
|
}
|
||||||
|
|
||||||
// Cambia el color del borde
|
// Cambia el color del borde
|
||||||
void Screen::setBorderColor(Uint8 color) {
|
void Screen::setBorderColor(Uint8 color) {
|
||||||
border_color_ = color;
|
border_color_ = color;
|
||||||
|
|||||||
@@ -39,8 +39,9 @@ class Screen {
|
|||||||
void toggleVideoMode(); // Cambia entre pantalla completa y ventana
|
void toggleVideoMode(); // Cambia entre pantalla completa y ventana
|
||||||
void toggleIntegerScale(); // Alterna entre activar y desactivar el escalado entero
|
void toggleIntegerScale(); // Alterna entre activar y desactivar el escalado entero
|
||||||
void toggleVSync(); // Alterna entre activar y desactivar el V-Sync
|
void toggleVSync(); // Alterna entre activar y desactivar el V-Sync
|
||||||
auto decWindowZoom() -> bool; // Reduce el tamaño de la ventana
|
auto decWindowZoom() -> bool; // Reduce el tamaño de la ventana
|
||||||
auto incWindowZoom() -> bool; // Aumenta el tamaño de la ventana
|
auto incWindowZoom() -> bool; // Aumenta el tamaño de la ventana
|
||||||
|
auto setWindowZoom(int zoom) -> bool; // Establece zoom directo; false si fuera de [1, max_zoom]
|
||||||
void show(); // Muestra la ventana
|
void show(); // Muestra la ventana
|
||||||
void hide(); // Oculta la ventana
|
void hide(); // Oculta la ventana
|
||||||
|
|
||||||
@@ -81,6 +82,7 @@ class Screen {
|
|||||||
[[nodiscard]] auto getGPUDriver() const -> const std::string& { return gpu_driver_; }
|
[[nodiscard]] auto getGPUDriver() const -> const std::string& { return gpu_driver_; }
|
||||||
[[nodiscard]] auto getLastFPS() const -> int { return fps_.last_value; }
|
[[nodiscard]] auto getLastFPS() const -> int { return fps_.last_value; }
|
||||||
[[nodiscard]] auto getZoomFactor() const -> float { return zoom_factor_; }
|
[[nodiscard]] auto getZoomFactor() const -> float { return zoom_factor_; }
|
||||||
|
[[nodiscard]] auto getMaxZoom() const -> int;
|
||||||
[[nodiscard]] auto getSsTextureSize() const -> std::pair<int, int>;
|
[[nodiscard]] auto getSsTextureSize() const -> std::pair<int, int>;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -298,7 +298,7 @@ static const std::vector<ConsoleCommand> COMMANDS = {
|
|||||||
|
|
||||||
// ZOOM UP/DOWN — Zoom de ventana (F1/F2)
|
// ZOOM UP/DOWN — Zoom de ventana (F1/F2)
|
||||||
{.keyword = "ZOOM", .execute = [](const std::vector<std::string>& args) -> std::string {
|
{.keyword = "ZOOM", .execute = [](const std::vector<std::string>& args) -> std::string {
|
||||||
if (args.empty()) { return "usage: zoom [up|down]"; }
|
if (args.empty()) { return "usage: zoom [up|down|<1-" + std::to_string(Screen::get()->getMaxZoom()) + ">]"; }
|
||||||
if (args[0] == "UP") {
|
if (args[0] == "UP") {
|
||||||
if (!Screen::get()->incWindowZoom()) { return "Max zoom reached"; }
|
if (!Screen::get()->incWindowZoom()) { return "Max zoom reached"; }
|
||||||
return "Zoom " + std::to_string(Options::window.zoom);
|
return "Zoom " + std::to_string(Options::window.zoom);
|
||||||
@@ -307,7 +307,18 @@ static const std::vector<ConsoleCommand> COMMANDS = {
|
|||||||
if (!Screen::get()->decWindowZoom()) { return "Min zoom reached"; }
|
if (!Screen::get()->decWindowZoom()) { return "Min zoom reached"; }
|
||||||
return "Zoom " + std::to_string(Options::window.zoom);
|
return "Zoom " + std::to_string(Options::window.zoom);
|
||||||
}
|
}
|
||||||
return "usage: zoom [up|down]";
|
// Zoom numérico directo
|
||||||
|
try {
|
||||||
|
const int N = std::stoi(args[0]);
|
||||||
|
const int MAX = Screen::get()->getMaxZoom();
|
||||||
|
if (N < 1 || N > MAX) {
|
||||||
|
return "Zoom must be between 1 and " + std::to_string(MAX);
|
||||||
|
}
|
||||||
|
if (N == Options::window.zoom) { return "Zoom already " + std::to_string(N); }
|
||||||
|
Screen::get()->setWindowZoom(N);
|
||||||
|
return "Zoom " + std::to_string(Options::window.zoom);
|
||||||
|
} catch (...) {}
|
||||||
|
return "usage: zoom [up|down|<1-" + std::to_string(Screen::get()->getMaxZoom()) + ">]";
|
||||||
},
|
},
|
||||||
.completions = {{"ZOOM", {"UP", "DOWN"}}}},
|
.completions = {{"ZOOM", {"UP", "DOWN"}}}},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user