From c25de5dba35a940fb45010770cbe9d71a4c905e4 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 27 Jan 2020 17:55:34 +0100 Subject: [PATCH] backdrop: make width and height customizable --- repos/gems/src/app/backdrop/README | 8 ++++++++ repos/gems/src/app/backdrop/main.cc | 15 ++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/repos/gems/src/app/backdrop/README b/repos/gems/src/app/backdrop/README index ef0533282..62df86a48 100644 --- a/repos/gems/src/app/backdrop/README +++ b/repos/gems/src/app/backdrop/README @@ -68,6 +68,14 @@ covering the whole screen or as a single image. The supported attributes are viewport can be defined via the 'anchor', 'xpos', and 'ypos' attributes. +Customized size +--------------- + +By default, the backdrop adjusts itself to the physical screen size as +reported by the nitpicker GUI server. This default size can be overridden by +specifying a fixed size as '' attributes 'width' and 'height'. + + Example ~~~~~~~ diff --git a/repos/gems/src/app/backdrop/main.cc b/repos/gems/src/app/backdrop/main.cc index 69e4ae63b..4862f094c 100644 --- a/repos/gems/src/app/backdrop/main.cc +++ b/repos/gems/src/app/backdrop/main.cc @@ -53,8 +53,7 @@ struct Backdrop::Main { Nitpicker::Connection &nitpicker; - /* physical screen size */ - Framebuffer::Mode const mode = nitpicker.mode(); + Framebuffer::Mode const mode; /** * Return dataspace capability for virtual framebuffer @@ -84,8 +83,8 @@ struct Backdrop::Main /** * Constructor */ - Buffer(Genode::Env &env, Nitpicker::Connection &nitpicker) - : nitpicker(nitpicker), + Buffer(Genode::Env &env, Nitpicker::Connection &nitpicker, Framebuffer::Mode mode) + : nitpicker(nitpicker), mode(mode), fb_ds(env.rm(), _ds_cap(nitpicker)), surface_ds(env.ram(), env.rm(), surface_num_bytes()) { } @@ -325,7 +324,13 @@ void Backdrop::Main::_handle_config() { _config.update(); - _buffer.construct(_env, _nitpicker); + Framebuffer::Mode const phys_mode = _nitpicker.mode(); + Framebuffer::Mode const + mode(_config.xml().attribute_value("width", (unsigned)phys_mode.width()), + _config.xml().attribute_value("height", (unsigned)phys_mode.height()), + phys_mode.format()); + + _buffer.construct(_env, _nitpicker, mode); /* clear surface */ _apply_fill(Xml_node(""));