From 476a3acfb21f58c69476e32d34eb1002dbc4ae28 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Fri, 15 Jan 2021 14:12:34 -0500 Subject: [PATCH] Utilities: Add "chres", a way to change the screen resolution from the command line --- Userland/Utilities/CMakeLists.txt | 1 + Userland/Utilities/chres.cpp | 50 +++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 Userland/Utilities/chres.cpp diff --git a/Userland/Utilities/CMakeLists.txt b/Userland/Utilities/CMakeLists.txt index a6cffdb6de..242754ac5d 100644 --- a/Userland/Utilities/CMakeLists.txt +++ b/Userland/Utilities/CMakeLists.txt @@ -18,6 +18,7 @@ endforeach() target_link_libraries(aplay LibAudio) target_link_libraries(avol LibAudio) target_link_libraries(checksum LibCrypto) +target_link_libraries(chres LibGUI) target_link_libraries(copy LibGUI) target_link_libraries(disasm LibX86) target_link_libraries(expr LibRegex) diff --git a/Userland/Utilities/chres.cpp b/Userland/Utilities/chres.cpp new file mode 100644 index 0000000000..a972e22c39 --- /dev/null +++ b/Userland/Utilities/chres.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021, Nico Weber + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include + +int main(int argc, char** argv) +{ + int width = -1; + int height = -1; + + Core::ArgsParser args_parser; + args_parser.set_general_help("Change the screen resolution."); + args_parser.add_positional_argument(width, "Width", "width"); + args_parser.add_positional_argument(height, "Height", "height"); + args_parser.parse(argc, argv); + + // A Core::EventLoop is all we need, but WindowServerConnection needs a full Application object. + char* dummy_argv[] = { argv[0] }; + auto app = GUI::Application::construct(1, dummy_argv); + auto result = GUI::WindowServerConnection::the().send_sync(Gfx::IntSize { width, height }); + if (!result->success()) { + warnln("failed to set resolution"); + return 1; + } +}