Merge pull request #634 from MihailRis/display-mode-setting-selectbox
Display mode setting selectbox
This commit is contained in:
commit
209479be46
@ -53,10 +53,19 @@ function create_checkbox(id, name, tooltip)
|
|||||||
))
|
))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function on_open()
|
function on_open()
|
||||||
create_setting("camera.fov", "FOV", 1, "°")
|
create_setting("camera.fov", "FOV", 1, "°")
|
||||||
create_setting("display.framerate", "Framerate", 1, "", "", true)
|
create_setting("display.framerate", "Framerate", 1, "", "", true)
|
||||||
create_checkbox("display.fullscreen", "Fullscreen")
|
|
||||||
|
document.root:add(string.format(
|
||||||
|
"<select context='settings' onselect='function(opt) core.set_setting(\"display.window-mode\", tonumber(opt)) end' selected='%s'>"..
|
||||||
|
"<option value='0'>@Windowed</option>"..
|
||||||
|
"<option value='1'>@Fullscreen</option>"..
|
||||||
|
"<option value='2'>@Borderless</option>"..
|
||||||
|
"</select>", core.get_setting("display.window-mode"))
|
||||||
|
)
|
||||||
|
|
||||||
create_checkbox("camera.shaking", "Camera Shaking")
|
create_checkbox("camera.shaking", "Camera Shaking")
|
||||||
create_checkbox("camera.inertia", "Camera Inertia")
|
create_checkbox("camera.inertia", "Camera Inertia")
|
||||||
create_checkbox("camera.fov-effects", "Camera FOV Effects")
|
create_checkbox("camera.fov-effects", "Camera FOV Effects")
|
||||||
|
|||||||
@ -103,6 +103,8 @@ settings.Limit Background FPS=Ограничить фоновую частоту
|
|||||||
settings.Advanced render=Продвинутый рендер
|
settings.Advanced render=Продвинутый рендер
|
||||||
settings.Shadows quality=Качество теней
|
settings.Shadows quality=Качество теней
|
||||||
settings.Conflict=Найдены возможные конфликты
|
settings.Conflict=Найдены возможные конфликты
|
||||||
|
settings.Windowed=Оконный
|
||||||
|
settings.Borderless=Безрамочный
|
||||||
|
|
||||||
# Управление
|
# Управление
|
||||||
chunks.reload=Перезагрузить Чанки
|
chunks.reload=Перезагрузить Чанки
|
||||||
|
|||||||
@ -135,10 +135,11 @@ void Engine::initializeClient() {
|
|||||||
if (ENGINE_DEBUG_BUILD) {
|
if (ENGINE_DEBUG_BUILD) {
|
||||||
menus::create_version_label(*gui);
|
menus::create_version_label(*gui);
|
||||||
}
|
}
|
||||||
keepAlive(settings.display.fullscreen.observe(
|
keepAlive(settings.display.windowMode.observe(
|
||||||
[this](bool value) {
|
[this](int value) {
|
||||||
if (value != this->window->isFullscreen()) {
|
WindowMode mode = static_cast<WindowMode>(value);
|
||||||
this->window->toggleFullscreen();
|
if (mode != this->window->getMode()) {
|
||||||
|
this->window->setMode(mode);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
true
|
true
|
||||||
@ -237,7 +238,11 @@ void Engine::updateHotkeys() {
|
|||||||
gui->toggleDebug();
|
gui->toggleDebug();
|
||||||
}
|
}
|
||||||
if (input->jpressed(Keycode::F11)) {
|
if (input->jpressed(Keycode::F11)) {
|
||||||
settings.display.fullscreen.toggle();
|
if (settings.display.windowMode.get() != static_cast<int>(WindowMode::FULLSCREEN)) {
|
||||||
|
settings.display.windowMode.set(static_cast<int>(WindowMode::FULLSCREEN));
|
||||||
|
} else {
|
||||||
|
settings.display.windowMode.set(static_cast<int>(WindowMode::WINDOWED));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -49,8 +49,8 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) {
|
|||||||
builder.add("height", &settings.display.height);
|
builder.add("height", &settings.display.height);
|
||||||
builder.add("samples", &settings.display.samples);
|
builder.add("samples", &settings.display.samples);
|
||||||
builder.add("framerate", &settings.display.framerate);
|
builder.add("framerate", &settings.display.framerate);
|
||||||
builder.add("fullscreen", &settings.display.fullscreen);
|
|
||||||
builder.add("limit-fps-iconified", &settings.display.limitFpsIconified);
|
builder.add("limit-fps-iconified", &settings.display.limitFpsIconified);
|
||||||
|
builder.add("window-mode", &settings.display.windowMode);
|
||||||
|
|
||||||
builder.section("camera");
|
builder.section("camera");
|
||||||
builder.add("sensitivity", &settings.camera.sensitivity);
|
builder.add("sensitivity", &settings.camera.sensitivity);
|
||||||
|
|||||||
@ -19,8 +19,8 @@ struct AudioSettings {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct DisplaySettings {
|
struct DisplaySettings {
|
||||||
/// @brief Is window in full screen mode
|
/// @brief Window mode (windowed/fullscreen/borderless)
|
||||||
FlagSetting fullscreen {false};
|
IntegerSetting windowMode {0, 0, 2};
|
||||||
/// @brief Window width (pixels)
|
/// @brief Window width (pixels)
|
||||||
IntegerSetting width {1280};
|
IntegerSetting width {1280};
|
||||||
/// @brief Window height (pixels)
|
/// @brief Window height (pixels)
|
||||||
|
|||||||
@ -10,6 +10,12 @@ class ImageData;
|
|||||||
class Input;
|
class Input;
|
||||||
struct DisplaySettings;
|
struct DisplaySettings;
|
||||||
|
|
||||||
|
enum class WindowMode {
|
||||||
|
WINDOWED,
|
||||||
|
FULLSCREEN,
|
||||||
|
BORDERLESS
|
||||||
|
};
|
||||||
|
|
||||||
class Window {
|
class Window {
|
||||||
public:
|
public:
|
||||||
Window(glm::ivec2 size) : size(std::move(size)) {}
|
Window(glm::ivec2 size) : size(std::move(size)) {}
|
||||||
@ -25,8 +31,8 @@ public:
|
|||||||
virtual void setShouldClose(bool flag) = 0;
|
virtual void setShouldClose(bool flag) = 0;
|
||||||
|
|
||||||
virtual void setCursor(CursorShape shape) = 0;
|
virtual void setCursor(CursorShape shape) = 0;
|
||||||
virtual void toggleFullscreen() = 0;
|
virtual void setMode(WindowMode mode) = 0;
|
||||||
virtual bool isFullscreen() const = 0;
|
virtual WindowMode getMode() const = 0;
|
||||||
|
|
||||||
virtual void setIcon(const ImageData* image) = 0;
|
virtual void setIcon(const ImageData* image) = 0;
|
||||||
|
|
||||||
@ -51,6 +57,7 @@ public:
|
|||||||
> initialize(DisplaySettings* settings, std::string title);
|
> initialize(DisplaySettings* settings, std::string title);
|
||||||
protected:
|
protected:
|
||||||
glm::ivec2 size;
|
glm::ivec2 size;
|
||||||
|
WindowMode mode = WindowMode::WINDOWED;
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace display {
|
namespace display {
|
||||||
|
|||||||
@ -406,21 +406,28 @@ public:
|
|||||||
glfwSetCursor(window, standard_cursors[static_cast<int>(shape)]);
|
glfwSetCursor(window, standard_cursors[static_cast<int>(shape)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void toggleFullscreen() override {
|
void setMode(WindowMode mode) override {
|
||||||
fullscreen = !fullscreen;
|
Window::mode = mode;
|
||||||
|
|
||||||
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
|
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
|
||||||
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
|
const GLFWvidmode* glfwMode = glfwGetVideoMode(monitor);
|
||||||
|
|
||||||
if (input.isCursorLocked()){
|
if (input.isCursorLocked()){
|
||||||
input.toggleCursor();
|
input.toggleCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fullscreen) {
|
if (mode == WindowMode::FULLSCREEN) {
|
||||||
|
const int width = glfwMode->width;
|
||||||
|
const int height = glfwMode->height;
|
||||||
|
const int refreshRate = glfwMode->refreshRate;
|
||||||
glfwGetWindowPos(window, &posX, &posY);
|
glfwGetWindowPos(window, &posX, &posY);
|
||||||
glfwSetWindowMonitor(
|
glfwSetWindowMonitor(window, monitor, 0, 0, width, height, refreshRate);
|
||||||
window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate
|
}
|
||||||
);
|
else if(mode == WindowMode::BORDERLESS) {
|
||||||
|
glfwGetWindowPos(window, &posX, &posY);
|
||||||
|
glfwSetWindowAttrib(window, GLFW_DECORATED, GLFW_FALSE);
|
||||||
|
glfwSetWindowAttrib(window, GLFW_RESIZABLE, GLFW_FALSE);
|
||||||
|
glfwSetWindowSize(window, glfwMode->width, glfwMode->height);
|
||||||
|
glfwSetWindowPos(window, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
glfwSetWindowMonitor(
|
glfwSetWindowMonitor(
|
||||||
window,
|
window,
|
||||||
@ -431,6 +438,8 @@ public:
|
|||||||
settings->height.get(),
|
settings->height.get(),
|
||||||
GLFW_DONT_CARE
|
GLFW_DONT_CARE
|
||||||
);
|
);
|
||||||
|
glfwSetWindowAttrib(window, GLFW_DECORATED, GLFW_TRUE);
|
||||||
|
glfwSetWindowAttrib(window, GLFW_RESIZABLE, GLFW_TRUE);
|
||||||
window_size_callback(window, settings->width.get(), settings->height.get());
|
window_size_callback(window, settings->width.get(), settings->height.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -439,8 +448,8 @@ public:
|
|||||||
input.setCursorPosition(xPos, yPos);
|
input.setCursorPosition(xPos, yPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isFullscreen() const override {
|
WindowMode getMode() const override {
|
||||||
return fullscreen;
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setIcon(const ImageData* image) override {
|
void setIcon(const ImageData* image) override {
|
||||||
@ -459,7 +468,7 @@ public:
|
|||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
size = {width, height};
|
size = {width, height};
|
||||||
|
|
||||||
if (!isFullscreen() && !isMaximized()) {
|
if (mode == WindowMode::WINDOWED && !isMaximized()) {
|
||||||
settings->width.set(width);
|
settings->width.set(width);
|
||||||
settings->height.set(height);
|
settings->height.set(height);
|
||||||
}
|
}
|
||||||
@ -542,7 +551,6 @@ public:
|
|||||||
private:
|
private:
|
||||||
GLFWwindow* window;
|
GLFWwindow* window;
|
||||||
CursorShape cursor = CursorShape::ARROW;
|
CursorShape cursor = CursorShape::ARROW;
|
||||||
bool fullscreen = false;
|
|
||||||
int framerate = -1;
|
int framerate = -1;
|
||||||
std::stack<glm::vec4> scissorStack;
|
std::stack<glm::vec4> scissorStack;
|
||||||
glm::vec4 scissorArea;
|
glm::vec4 scissorArea;
|
||||||
@ -600,7 +608,7 @@ static void cursor_pos_callback(GLFWwindow* window, double xpos, double ypos) {
|
|||||||
|
|
||||||
static void iconify_callback(GLFWwindow* window, int iconified) {
|
static void iconify_callback(GLFWwindow* window, int iconified) {
|
||||||
auto handler = static_cast<GLFWWindow*>(glfwGetWindowUserPointer(window));
|
auto handler = static_cast<GLFWWindow*>(glfwGetWindowUserPointer(window));
|
||||||
if (handler->isFullscreen() && iconified == 0) {
|
if (handler->getMode() == WindowMode::FULLSCREEN && iconified == 0) {
|
||||||
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
|
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
|
||||||
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
|
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
|
||||||
glfwSetWindowMonitor(
|
glfwSetWindowMonitor(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user