diff --git a/repos/gems/include/gems/gui_buffer.h b/repos/gems/include/gems/gui_buffer.h index 77bfab4348..5fc015dc5b 100644 --- a/repos/gems/include/gems/gui_buffer.h +++ b/repos/gems/include/gems/gui_buffer.h @@ -15,14 +15,8 @@ #define _INCLUDE__GEMS__GUI_BUFFER_H_ /* Genode includes */ -#include #include -#include #include -#include -#include -#include -#include struct Gui_buffer : Genode::Noncopyable @@ -38,76 +32,36 @@ struct Gui_buffer : Genode::Noncopyable using size_t = Genode::size_t; using uint8_t = Genode::uint8_t; - Genode::Ram_allocator &ram; - Genode::Region_map &rm; + Genode::Ram_allocator &_ram; + Genode::Region_map &_rm; - Gui::Connection &gui; + Gui::Connection &_gui; Framebuffer::Mode const mode; + /* + * Make the GUI mode twice as high as the requested mode. The upper part + * of the GUI framebuffer contains the front buffer, the lower part + * contains the back buffer. + */ + Framebuffer::Mode const _gui_mode { .area = { mode.area.w, mode.area.h*2 }, + .alpha = mode.alpha }; + + Genode::Surface_window const _backbuffer { .y = mode.area.h, .h = mode.area.h }; + Pixel_rgb888 const reset_color; - /** - * Return dataspace capability for virtual framebuffer - */ - Genode::Dataspace_capability _ds_cap(Gui::Connection &gui) - { - /* - * Setup virtual framebuffer, the upper part containing the front - * buffer, the lower part containing the back buffer. - */ - gui.buffer({ .area = { mode.area.w, mode.area.h*2 }, - .alpha = mode.alpha }); - - return gui.framebuffer.dataspace(); - } - - Genode::Attached_dataspace _fb_ds { rm, _ds_cap(gui) }; - - size_t _pixel_num_bytes() const { return size().count()*sizeof(Pixel_rgb888); } - size_t _alpha_num_bytes() const { return mode.alpha ? size().count() : 0; } - size_t _input_num_bytes() const { return mode.alpha ? size().count() : 0; } - - void _with_pixel_ptr(auto const &fn) - { - /* skip pixel front buffer */ - uint8_t * const ptr = _fb_ds.local_addr() + _pixel_num_bytes(); - fn((Pixel_rgb888 *)ptr); - } - - void _with_alpha_ptr(auto const &fn) - { - if (!mode.alpha) - return; - - /* skip pixel front buffer, pixel back buffer, and alpha front buffer */ - uint8_t * const ptr = _fb_ds.local_addr() - + _pixel_num_bytes()*2 + _alpha_num_bytes(); - fn((Pixel_alpha8 *)ptr); - } - - void _with_input_ptr(auto const &fn) - { - if (!mode.alpha) - return; - - /* skip pixel buffers, alpha buffers, and input front buffer */ - uint8_t * const ptr = _fb_ds.local_addr() - + _pixel_num_bytes()*2 + _alpha_num_bytes()*2 + _input_num_bytes(); - fn(ptr); - } + Genode::Attached_dataspace _fb_ds { + _rm, ( _gui.buffer(_gui_mode), _gui.framebuffer.dataspace() ) }; enum class Alpha { OPAQUE, ALPHA }; - static Genode::Color default_reset_color() - { - /* - * Do not use black by default to limit the bleeding of black into - * antialiased drawing operations applied onto an initially transparent - * background. - */ - return Genode::Color(127, 127, 127, 255); - } + /* + * Do not use black by default to limit the bleeding of black into + * antialiased drawing operations applied onto an initially transparent + * background. + */ + static constexpr Genode::Color default_reset_color = { 127, 127, 127, 255 }; /** * Constructor @@ -115,9 +69,9 @@ struct Gui_buffer : Genode::Noncopyable Gui_buffer(Gui::Connection &gui, Area size, Genode::Ram_allocator &ram, Genode::Region_map &rm, Alpha alpha = Alpha::ALPHA, - Genode::Color reset_color = default_reset_color()) + Genode::Color reset_color = default_reset_color) : - ram(ram), rm(rm), gui(gui), + _ram(ram), _rm(rm), _gui(gui), mode({ .area = { Genode::max(1U, size.w), Genode::max(1U, size.h) }, .alpha = (alpha == Alpha::ALPHA) }), @@ -133,16 +87,21 @@ struct Gui_buffer : Genode::Noncopyable void with_alpha_surface(auto const &fn) { - _with_alpha_ptr([&] (Pixel_alpha8 *ptr) { - Alpha_surface alpha { ptr, size() }; - fn(alpha); }); + if (!_gui_mode.alpha) { + Alpha_surface dummy { nullptr, Gui::Area { } }; + fn(dummy); + return; + } + _gui_mode.with_alpha_surface(_fb_ds, [&] (Alpha_surface &surface) { + surface.with_window(_backbuffer, [&] (Alpha_surface &surface) { + fn(surface); }); }); } void with_pixel_surface(auto const &fn) { - _with_pixel_ptr([&] (Pixel_rgb888 *ptr) { - Pixel_surface pixel { ptr, size() }; - fn(pixel); }); + _gui_mode.with_pixel_surface(_fb_ds, [&] (Pixel_surface &surface) { + surface.with_window(_backbuffer, [&] (Pixel_surface &surface) { + fn(surface); }); }); } void apply_to_surface(auto const &fn) @@ -155,7 +114,7 @@ struct Gui_buffer : Genode::Noncopyable void reset_surface() { with_alpha_surface([&] (Alpha_surface &alpha) { - Genode::memset(alpha.addr(), 0, _alpha_num_bytes()); }); + Genode::memset(alpha.addr(), 0, alpha.size().count()); }); with_pixel_surface([&] (Pixel_surface &pixel) { @@ -169,20 +128,28 @@ struct Gui_buffer : Genode::Noncopyable void _update_input_mask() { - _with_alpha_ptr([&] (Pixel_alpha8 const * const alpha_ptr) { - _with_input_ptr([&] (uint8_t *dst) { + with_alpha_surface([&] (Alpha_surface &alpha) { - /* - * Set input mask for all pixels where the alpha value is above - * a given threshold. The threshold is defined such that - * typical drop shadows are below the value. - */ - uint8_t const threshold = 100; - uint8_t const * src = (uint8_t const *)alpha_ptr; - size_t const num_pixels = size().count(); + using Input_surface = Genode::Surface; - for (unsigned i = 0; i < num_pixels; i++) - *dst++ = (*src++) > threshold; + _gui_mode.with_input_surface(_fb_ds, [&] (Input_surface &input) { + input.with_window(_backbuffer, [&] (Input_surface &input) { + + uint8_t const * src = (uint8_t *)alpha.addr(); + uint8_t * dst = (uint8_t *)input.addr(); + + /* + * Set input mask for all pixels where the alpha value is + * above a given threshold. The threshold is defined such + * that typical drop shadows are below the value. + */ + uint8_t const threshold = 100; + size_t const num_pixels = Genode::min(alpha.size().count(), + input.size().count()); + + for (unsigned i = 0; i < num_pixels; i++) + *dst++ = (*src++) > threshold; + }); }); }); } @@ -192,7 +159,7 @@ struct Gui_buffer : Genode::Noncopyable _update_input_mask(); /* copy lower part of virtual framebuffer to upper part */ - gui.framebuffer.blit({ { 0, int(size().h) }, size() }, { 0, 0 }); + _gui.framebuffer.blit({ { 0, int(size().h) }, size() }, { 0, 0 }); } }; diff --git a/repos/gems/src/app/backdrop/main.cc b/repos/gems/src/app/backdrop/main.cc index 3fae2b405b..ff2da6a43c 100644 --- a/repos/gems/src/app/backdrop/main.cc +++ b/repos/gems/src/app/backdrop/main.cc @@ -66,11 +66,6 @@ struct Backdrop::Main Attached_dataspace fb_ds; - Genode::size_t surface_num_bytes() const - { - return size().count()*mode.bytes_per_pixel(); - } - Attached_ram_dataspace surface_ds; /** @@ -79,7 +74,7 @@ struct Backdrop::Main Buffer(Genode::Env &env, Gui::Connection &gui, Framebuffer::Mode mode) : gui(gui), mode(mode), fb_ds(env.rm(), _ds_cap(gui)), - surface_ds(env.ram(), env.rm(), surface_num_bytes()) + surface_ds(env.ram(), env.rm(), mode.num_bytes()) { } /** @@ -100,11 +95,10 @@ struct Backdrop::Main void flush_surface() { /* blit back to front buffer */ - blit(surface_ds.local_addr(), - (unsigned)surface_num_bytes(), - fb_ds.local_addr(), - (unsigned)surface_num_bytes(), - (unsigned)surface_num_bytes(), 1); + unsigned const num_bytes = unsigned(mode.num_bytes()); + blit(surface_ds.local_addr(), num_bytes, + fb_ds.local_addr(), num_bytes, + num_bytes, 1); } }; diff --git a/repos/gems/src/app/themed_decorator/window.h b/repos/gems/src/app/themed_decorator/window.h index d3eba1e7a1..7abdf8fb02 100644 --- a/repos/gems/src/app/themed_decorator/window.h +++ b/repos/gems/src/app/themed_decorator/window.h @@ -286,8 +286,6 @@ class Decorator::Window : public Window_base, public Animator::Item }); buffer.flush_surface(); - - buffer.gui.framebuffer.refresh({ { 0, 0 }, buffer.size() }); } void _repaint_decorations() diff --git a/repos/os/include/framebuffer_session/framebuffer_session.h b/repos/os/include/framebuffer_session/framebuffer_session.h index dae6a89fc1..9b6137fb59 100644 --- a/repos/os/include/framebuffer_session/framebuffer_session.h +++ b/repos/os/include/framebuffer_session/framebuffer_session.h @@ -19,6 +19,8 @@ #include #include #include +#include +#include namespace Framebuffer { @@ -36,9 +38,66 @@ namespace Framebuffer { Area area; bool alpha; - size_t bytes_per_pixel() const { return 4; } - void print(Output &out) const { Genode::print(out, area); } + + /* + * If using an alpha channel, the alpha buffer follows the pixel + * buffer. The alpha buffer is followed by an input-mask buffer. + * + * The input-mask buffer contains a byte value per texture pixel, + * which describes the policy of handling user input referring to the + * pixel. If set to zero, the input is passed through the view such + * that it can be handled by one of the subsequent views in the view + * stack. If set to one, the input is consumed by the view. + */ + + void with_pixel_surface(auto &ds, auto const &fn) const + { + Surface surface { ds.bytes(), area }; + fn(surface); + } + + void with_alpha_bytes(auto &ds, auto const &fn) const + { + if (!alpha) + return; + + size_t const offset = area.count()*sizeof(Pixel_rgb888); + ds.bytes().with_skipped_bytes(offset, [&] (Byte_range_ptr const &bytes) { + fn(bytes); }); + } + + void with_alpha_surface(auto &ds, auto const &fn) const + { + with_alpha_bytes(ds, [&] (Byte_range_ptr const &bytes) { + Surface surface { bytes, area }; + fn(surface); }); + } + + void with_input_bytes(auto &ds, auto const &fn) const + { + if (!alpha) + return; + + size_t const offset = area.count()*sizeof(Pixel_rgb888) + area.count(); + ds.bytes().with_skipped_bytes(offset, [&] (Byte_range_ptr const &bytes) { + fn(bytes); }); + } + + void with_input_surface(auto &ds, auto const &fn) const + { + with_input_bytes(ds, [&] (Byte_range_ptr const &bytes) { + Surface surface { bytes, area }; + fn(surface); }); + } + + size_t num_bytes() const + { + size_t const bytes_per_pixel = + sizeof(Pixel_rgb888) + alpha*(sizeof(Pixel_alpha8) + sizeof(Pixel_input8)); + + return area.count()*bytes_per_pixel; + } }; struct Transfer diff --git a/repos/os/include/gui_session/gui_session.h b/repos/os/include/gui_session/gui_session.h index ffae8ec999..5b7456d947 100644 --- a/repos/os/include/gui_session/gui_session.h +++ b/repos/os/include/gui_session/gui_session.h @@ -274,7 +274,7 @@ struct Gui::Session : Genode::Session * If alpha blending is used, each pixel requires an additional byte * for the alpha value and a byte holding the input mask. */ - return (mode.bytes_per_pixel() + 2*mode.alpha)*mode.area.count(); + return (sizeof(Pixel_rgb888) + 2*mode.alpha)*mode.area.count(); } diff --git a/repos/os/include/os/surface.h b/repos/os/include/os/surface.h index 9f31250b92..7c8ceb6d7a 100644 --- a/repos/os/include/os/surface.h +++ b/repos/os/include/os/surface.h @@ -126,15 +126,32 @@ class Genode::Surface : public Surface_base PT *_addr; /* base address of pixel buffer */ + static Area _sanitized(Area area, size_t const num_bytes) + { + /* prevent division by zero */ + if (area.w == 0) + return { }; + + size_t const bytes_per_line = area.w*sizeof(PT); + + return { .w = area.w, + .h = unsigned(min(num_bytes/bytes_per_line, area.h)) }; + } + public: PT *addr() { return _addr; } - /** - * Constructor + /* + * \deprecated */ - Surface(PT *addr, Area size) - : Surface_base(size, PT::format()), _addr(addr) { } + Surface(PT *addr, Area size) : Surface_base(size, PT::format()), _addr(addr) { } + + Surface(Byte_range_ptr const &bytes, Area const area) + : + Surface_base(_sanitized(area, bytes.num_bytes), PT::format()), + _addr((PT *)bytes.start) + { } /** * Call 'fn' with a sub-window surface as argument diff --git a/repos/os/src/server/nitpicker/buffer.h b/repos/os/src/server/nitpicker/buffer.h index 5a792edc39..e00f976a78 100644 --- a/repos/os/src/server/nitpicker/buffer.h +++ b/repos/os/src/server/nitpicker/buffer.h @@ -25,33 +25,22 @@ namespace Nitpicker { class Buffer; } -class Nitpicker::Buffer +struct Nitpicker::Buffer : private Attached_ram_dataspace { - private: + /** + * Constructor - allocate and map dataspace for virtual frame buffer + * + * \throw Out_of_ram + * \throw Out_of_caps + * \throw Region_map::Region_conflict + */ + Buffer(Ram_allocator &ram, Region_map &rm, size_t num_bytes) + : + Attached_ram_dataspace(ram, rm, num_bytes) + { } - Area _size; - Attached_ram_dataspace _ram_ds; - - public: - - /** - * Constructor - allocate and map dataspace for virtual frame buffer - * - * \throw Out_of_ram - * \throw Out_of_caps - * \throw Region_map::Region_conflict - */ - Buffer(Ram_allocator &ram, Region_map &rm, Area size, size_t bytes) - : - _size(size), _ram_ds(ram, rm, bytes) - { } - - /** - * Accessors - */ - Ram_dataspace_capability ds_cap() const { return _ram_ds.cap(); } - Area size() const { return _size; } - void *local_addr() const { return _ram_ds.local_addr(); } + using Attached_ram_dataspace::bytes; + using Attached_ram_dataspace::cap; }; diff --git a/repos/os/src/server/nitpicker/chunky_texture.h b/repos/os/src/server/nitpicker/chunky_texture.h index dcc6a949fd..04427c8a61 100644 --- a/repos/os/src/server/nitpicker/chunky_texture.h +++ b/repos/os/src/server/nitpicker/chunky_texture.h @@ -15,8 +15,6 @@ #define _CHUNKY_TEXTURE_H_ /* Genode includes */ -#include -#include #include /* local includes */ @@ -26,69 +24,36 @@ namespace Nitpicker { template class Chunky_texture; } template -class Nitpicker::Chunky_texture : public Buffer, public Texture +class Nitpicker::Chunky_texture : Buffer, public Texture { private: + Framebuffer::Mode const _mode; + /** * Return base address of alpha channel or 0 if no alpha channel exists */ - unsigned char *_alpha_base(Framebuffer::Mode mode) + static uint8_t *_alpha_base(Buffer &buffer, Framebuffer::Mode mode) { - if (!mode.alpha) return nullptr; - - /* alpha values come right after the pixel values */ - return (unsigned char *)local_addr() - + calc_num_bytes({ .area = mode.area, .alpha = false }); - } - - Area _area() const { return Texture::size(); } - - void _with_pixel_surface(auto const &fn) - { - Surface pixel { (Pixel_rgb888 *)local_addr(), _area() }; - fn(pixel); - } - - static void _with_alpha_ptr(auto &obj, auto const &fn) - { - Pixel_alpha8 * const ptr = (Pixel_alpha8 *)(obj.Texture::alpha()); - if (ptr) - fn(ptr); - } - - void _with_alpha_surface(auto const &fn) - { - _with_alpha_ptr(*this, [&] (Pixel_alpha8 * const ptr) { - Surface alpha { ptr, _area() }; - fn(alpha); }); + uint8_t *result = nullptr; + mode.with_alpha_bytes(buffer, [&] (Byte_range_ptr const &bytes) { + result = (uint8_t *)bytes.start; }); + return result; } void _with_alpha_texture(auto const &fn) const { - _with_alpha_ptr(*this, [&] (Pixel_alpha8 * const ptr) { - Texture texture { ptr, nullptr, _area() }; + Buffer const &buffer = *this; + _mode.with_alpha_bytes(buffer, [&] (Byte_range_ptr const &bytes) { + Texture texture { (Pixel_alpha8 *)bytes.start, nullptr, _mode.area }; fn(texture); }); } - static void _with_input_ptr(auto &obj, auto const &fn) - { - Pixel_alpha8 * const ptr = (Pixel_alpha8 *)(obj.input_mask_buffer()); - if (ptr) - fn(ptr); - } - - void _with_input_surface(auto const &fn) - { - _with_input_ptr(*this, [&] (Pixel_alpha8 * const ptr) { - Surface input { ptr, _area() }; - fn(input); }); - } - void _with_input_texture(auto const &fn) const { - _with_input_ptr(*this, [&] (Pixel_alpha8 * const ptr) { - Texture texture { ptr, nullptr, _area() }; + Buffer const &buffer = *this; + _mode.with_input_bytes(buffer, [&] (Byte_range_ptr const &bytes) { + Texture texture { (Pixel_input8 *)bytes.start, nullptr, _mode.area }; fn(texture); }); } @@ -102,47 +67,36 @@ class Nitpicker::Chunky_texture : public Buffer, public Texture public: - /** - * Constructor - */ + using Buffer::cap; + Chunky_texture(Ram_allocator &ram, Region_map &rm, Framebuffer::Mode mode) : - Buffer(ram, rm, mode.area, calc_num_bytes(mode)), - Texture((PT *)local_addr(), _alpha_base(mode), mode.area) + Buffer(ram, rm, mode.num_bytes()), + Texture((PT *)Buffer::bytes().start, _alpha_base(*this, mode), mode.area), + _mode(mode) { } - static size_t calc_num_bytes(Framebuffer::Mode mode) + void with_input_mask(auto const &fn) const { - /* - * If using an alpha channel, the alpha buffer follows the - * pixel buffer. The alpha buffer is followed by an input - * mask buffer. Hence, we have to account one byte per - * alpha value and one byte for the input mask value. - */ - size_t bytes_per_pixel = sizeof(PT) + (mode.alpha ? 2 : 0); - return bytes_per_pixel*mode.area.count(); - } - - uint8_t const *input_mask_buffer() const - { - if (!Texture::alpha()) return 0; - - /* input-mask values come right after the alpha values */ - Framebuffer::Mode const mode { .area = _area(), .alpha = false }; - return (uint8_t const *)local_addr() + calc_num_bytes(mode) + _area().count(); + Buffer const &buffer = *this; + _mode.with_input_bytes(buffer, [&] (Byte_range_ptr const &bytes) { + Const_byte_range_ptr const_bytes { bytes.start, bytes.num_bytes }; + fn(const_bytes); }); } void blit(Rect from, Point to) { - _with_pixel_surface([&] (Surface &surface) { + Buffer &buffer = *this; + + _mode.with_pixel_surface(buffer, [&] (Surface &surface) { _blit_channel(surface, *this, from, to); }); - _with_alpha_surface([&] (Surface &surface) { + _mode.with_alpha_surface(buffer, [&] (Surface &surface) { _with_alpha_texture([&] (Texture &texture) { _blit_channel(surface, texture, from, to); }); }); - _with_input_surface([&] (Surface &surface) { - _with_input_texture([&] (Texture &texture) { + _mode.with_input_surface(buffer, [&] (Surface &surface) { + _with_input_texture([&] (Texture &texture) { _blit_channel(surface, texture, from, to); }); }); } }; diff --git a/repos/os/src/server/nitpicker/gui_session.cc b/repos/os/src/server/nitpicker/gui_session.cc index cddd083add..16cdcf927e 100644 --- a/repos/os/src/server/nitpicker/gui_session.cc +++ b/repos/os/src/server/nitpicker/gui_session.cc @@ -421,7 +421,7 @@ void Gui_session::focus(Capability session_cap) Dataspace_capability Gui_session::realloc_buffer(Framebuffer::Mode mode) { - Ram_quota const next_buffer_size { Chunky_texture::calc_num_bytes(mode) }; + Ram_quota const next_buffer_size { mode.num_bytes() }; Ram_quota const orig_buffer_size { _buffer_size }; /* @@ -440,7 +440,6 @@ Dataspace_capability Gui_session::realloc_buffer(Framebuffer::Mode mode) } _buffer_size = 0; - _input_mask = nullptr; Ram_quota const temporary_ram_upgrade = _texture.valid() ? next_buffer_size : Ram_quota{0}; @@ -470,7 +469,6 @@ Dataspace_capability Gui_session::realloc_buffer(Framebuffer::Mode mode) } _buffer_size = next_buffer_size.value; - _input_mask = _texture.input_mask_buffer(); return _texture.dataspace(); } diff --git a/repos/os/src/server/nitpicker/gui_session.h b/repos/os/src/server/nitpicker/gui_session.h index 3c057d7469..6021c6a17e 100644 --- a/repos/os/src/server/nitpicker/gui_session.h +++ b/repos/os/src/server/nitpicker/gui_session.h @@ -94,17 +94,6 @@ class Nitpicker::Gui_session : public Session_object, Domain_registry::Entry const *_domain = nullptr; View *_background = nullptr; - /* - * The input mask buffer containing a byte value per texture pixel, - * which describes the policy of handling user input referring to the - * pixel. If set to zero, the input is passed through the view such - * that it can be handled by one of the subsequent views in the view - * stack. If set to one, the input is consumed by the view. If - * 'input_mask' is a null pointer, user input is unconditionally - * consumed by the view. - */ - unsigned char const *_input_mask = nullptr; - bool _visible = true; Sliced_heap _session_alloc; @@ -289,20 +278,22 @@ class Nitpicker::Gui_session : public Session_object, bool origin_pointer() const override { return _domain && _domain->origin_pointer(); } - /** * Return input mask value at specified buffer position */ - unsigned char input_mask_at(Point p) const override + bool input_mask_at(Point const p) const override { - if (!_input_mask || !_texture.valid()) return 0; + bool result = false; + _texture.with_input_mask([&] (Const_byte_range_ptr const &bytes) { - /* check boundaries */ - if ((unsigned)p.x >= _texture.size().w - || (unsigned)p.y >= _texture.size().h) - return 0; + unsigned const x = p.x % _texture.size().w, + y = p.y % _texture.size().h; - return _input_mask[p.y*_texture.size().w + p.x]; + size_t const offset = y*_texture.size().w + x; + if (offset < bytes.num_bytes) + result = bytes.start[offset]; + }); + return result; } void submit_input_event(Input::Event e) override; diff --git a/repos/os/src/server/nitpicker/resizeable_texture.h b/repos/os/src/server/nitpicker/resizeable_texture.h index f616b40f14..6f8c4a097e 100644 --- a/repos/os/src/server/nitpicker/resizeable_texture.h +++ b/repos/os/src/server/nitpicker/resizeable_texture.h @@ -105,13 +105,13 @@ class Nitpicker::Resizeable_texture Dataspace_capability dataspace() { - return valid() ? _textures[_current]->ds_cap() : Ram_dataspace_capability(); + return valid() ? _textures[_current]->cap() : Ram_dataspace_capability(); } - unsigned char const *input_mask_buffer() const + void with_input_mask(auto const &fn) const { - return valid() ? _textures[_current]->input_mask_buffer() - : nullptr; + if (valid()) + _textures[_current]->with_input_mask(fn); } void blit(Rect from, Point to) diff --git a/repos/os/src/server/nitpicker/types.h b/repos/os/src/server/nitpicker/types.h index c23723a6fd..9ec5042c94 100644 --- a/repos/os/src/server/nitpicker/types.h +++ b/repos/os/src/server/nitpicker/types.h @@ -18,7 +18,6 @@ #include #include #include -#include #include namespace Nitpicker { diff --git a/repos/os/src/server/nitpicker/view.cc b/repos/os/src/server/nitpicker/view.cc index ed233f6909..694a73e406 100644 --- a/repos/os/src/server/nitpicker/view.cc +++ b/repos/os/src/server/nitpicker/view.cc @@ -11,8 +11,6 @@ * under the terms of the GNU Affero General Public License version 3. */ -#include - #include #include diff --git a/repos/os/src/server/nitpicker/view_owner.h b/repos/os/src/server/nitpicker/view_owner.h index 81b57609bc..57f2cfac38 100644 --- a/repos/os/src/server/nitpicker/view_owner.h +++ b/repos/os/src/server/nitpicker/view_owner.h @@ -82,7 +82,7 @@ struct Nitpicker::View_owner : Interface /** * Return input-mask value at given position */ - virtual unsigned char input_mask_at(Point) const { return 0; } + virtual bool input_mask_at(Point) const { return false; } virtual void submit_input_event(Input::Event) { } diff --git a/repos/os/src/test/fb_bench/main.cc b/repos/os/src/test/fb_bench/main.cc index 96dfe86e8c..dc052f4207 100644 --- a/repos/os/src/test/fb_bench/main.cc +++ b/repos/os/src/test/fb_bench/main.cc @@ -107,7 +107,7 @@ struct Blit_test : Test { unsigned kib = 0; uint64_t const start_ms = timer.elapsed_ms(); - unsigned const w = (unsigned)(fb_mode.area.w * fb_mode.bytes_per_pixel()); + unsigned const w = unsigned(fb_mode.area.w * sizeof(Pixel_rgb888)); unsigned const h = fb_mode.area.h; for (unsigned i = 0; timer.elapsed_ms() - start_ms < DURATION_MS; i++) { blit(buf[i % 2], w, fb_ds.local_addr(), w, w, h); @@ -125,7 +125,7 @@ struct Unaligned_blit_test : Test { unsigned kib = 0; uint64_t const start_ms = timer.elapsed_ms(); - unsigned const w = (unsigned)(fb_mode.area.w * fb_mode.bytes_per_pixel()); + unsigned const w = unsigned(fb_mode.area.w * sizeof(Pixel_rgb888)); unsigned const h = fb_mode.area.h; for (unsigned i = 0; timer.elapsed_ms() - start_ms < DURATION_MS; i++) { blit(buf[i % 2] + 2, w, fb_ds.local_addr() + 2, w, w - 2, h);