mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-23 15:32:25 +00:00
parent
99bfc3c0e2
commit
81862a41e1
@ -34,7 +34,9 @@ namespace Decorator {
|
|||||||
TEXTURE_ID_WINDOWED
|
TEXTURE_ID_WINDOWED
|
||||||
};
|
};
|
||||||
|
|
||||||
Genode::Texture_base const &texture_by_id(Texture_id);
|
Genode::Texture_base const &texture_by_id(Texture_id,
|
||||||
|
Genode::Ram_session &,
|
||||||
|
Genode::Region_map &);
|
||||||
|
|
||||||
class Canvas_base;
|
class Canvas_base;
|
||||||
template <typename PT> class Canvas;
|
template <typename PT> class Canvas;
|
||||||
@ -60,11 +62,14 @@ class Decorator::Canvas : public Decorator::Canvas_base
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Genode::Surface<PT> _surface;
|
Genode::Ram_session &_ram;
|
||||||
|
Genode::Region_map &_rm;
|
||||||
|
Genode::Surface<PT> _surface;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Canvas(PT *base, Area size) : _surface(base, size) { }
|
Canvas(PT *base, Area size, Genode::Ram_session &ram, Genode::Region_map &rm)
|
||||||
|
: _ram(ram), _rm(rm), _surface(base, size) { }
|
||||||
|
|
||||||
Rect clip() const override { return _surface.clip(); }
|
Rect clip() const override { return _surface.clip(); }
|
||||||
|
|
||||||
@ -84,7 +89,7 @@ class Decorator::Canvas : public Decorator::Canvas_base
|
|||||||
void draw_texture(Point pos, Texture_id id)
|
void draw_texture(Point pos, Texture_id id)
|
||||||
{
|
{
|
||||||
Genode::Texture<PT> const &texture =
|
Genode::Texture<PT> const &texture =
|
||||||
static_cast<Genode::Texture<PT> const &>(texture_by_id(id));
|
static_cast<Genode::Texture<PT> const &>(texture_by_id(id, _ram, _rm));
|
||||||
|
|
||||||
unsigned const alpha = 255;
|
unsigned const alpha = 255;
|
||||||
|
|
||||||
|
@ -48,7 +48,8 @@ struct Decorator::Main : Window_factory_base
|
|||||||
_nitpicker.framebuffer()->dataspace()) };
|
_nitpicker.framebuffer()->dataspace()) };
|
||||||
|
|
||||||
Canvas<Pixel_rgb565> _canvas = { _fb_ds.local_addr<Pixel_rgb565>(),
|
Canvas<Pixel_rgb565> _canvas = { _fb_ds.local_addr<Pixel_rgb565>(),
|
||||||
Area(_mode.width(), _mode.height()) };
|
Area(_mode.width(), _mode.height()),
|
||||||
|
_env.ram(), _env.rm() };
|
||||||
|
|
||||||
Window_stack _window_stack = { *this };
|
Window_stack _window_stack = { *this };
|
||||||
|
|
||||||
@ -74,11 +75,11 @@ struct Decorator::Main : Window_factory_base
|
|||||||
|
|
||||||
Window_base::Hover _hover;
|
Window_base::Hover _hover;
|
||||||
|
|
||||||
Reporter _hover_reporter = { "hover" };
|
Reporter _hover_reporter = { _env, "hover" };
|
||||||
|
|
||||||
bool _window_layout_update_needed = false;
|
bool _window_layout_update_needed = false;
|
||||||
|
|
||||||
Reporter _decorator_margins_reporter = { "decorator_margins" };
|
Reporter _decorator_margins_reporter = { _env, "decorator_margins" };
|
||||||
|
|
||||||
Animator _animator;
|
Animator _animator;
|
||||||
|
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
/* local includes */
|
/* local includes */
|
||||||
#include "canvas.h"
|
#include "canvas.h"
|
||||||
|
|
||||||
|
using namespace Genode;
|
||||||
|
|
||||||
|
|
||||||
template <typename PT>
|
template <typename PT>
|
||||||
class Icon_texture : public Chunky_texture<PT>
|
class Icon_texture : public Chunky_texture<PT>
|
||||||
@ -31,12 +33,13 @@ class Icon_texture : public Chunky_texture<PT>
|
|||||||
*/
|
*/
|
||||||
enum { WIDTH = 14, HEIGHT = 14 };
|
enum { WIDTH = 14, HEIGHT = 14 };
|
||||||
|
|
||||||
Icon_texture(Genode::Ram_session &ram, unsigned char rgba_data[])
|
Icon_texture(Ram_session &ram, Region_map &rm,
|
||||||
|
unsigned char rgba_data[])
|
||||||
:
|
:
|
||||||
Chunky_texture<PT>(ram, Genode::Surface_base::Area(WIDTH, HEIGHT))
|
Chunky_texture<PT>(ram, rm, Surface_base::Area(WIDTH, HEIGHT))
|
||||||
{
|
{
|
||||||
unsigned char const *src = rgba_data;
|
unsigned char const *src = rgba_data;
|
||||||
Genode::size_t const src_line_bytes = WIDTH*4;
|
size_t const src_line_bytes = WIDTH*4;
|
||||||
|
|
||||||
for (unsigned y = 0; y < HEIGHT; y++, src += src_line_bytes)
|
for (unsigned y = 0; y < HEIGHT; y++, src += src_line_bytes)
|
||||||
Chunky_texture<PT>::rgba(src, WIDTH, y);
|
Chunky_texture<PT>::rgba(src, WIDTH, y);
|
||||||
@ -56,15 +59,14 @@ extern unsigned char _binary_windowed_rgba_start[];
|
|||||||
/**
|
/**
|
||||||
* Return texture for the specified texture ID
|
* Return texture for the specified texture ID
|
||||||
*/
|
*/
|
||||||
Genode::Texture_base const &Decorator::texture_by_id(Texture_id id)
|
Texture_base const &
|
||||||
|
Decorator::texture_by_id(Texture_id id, Ram_session &ram, Region_map &rm)
|
||||||
{
|
{
|
||||||
Genode::Ram_session &ram = *Genode::env()->ram_session();
|
static Icon_texture<Pixel_rgb565> const icons[4] {
|
||||||
|
{ ram, rm, _binary_closer_rgba_start },
|
||||||
static Icon_texture<Genode::Pixel_rgb565> const icons[4] {
|
{ ram, rm, _binary_minimize_rgba_start },
|
||||||
{ ram, _binary_closer_rgba_start },
|
{ ram, rm, _binary_maximize_rgba_start },
|
||||||
{ ram, _binary_minimize_rgba_start },
|
{ ram, rm, _binary_windowed_rgba_start } };
|
||||||
{ ram, _binary_maximize_rgba_start },
|
|
||||||
{ ram, _binary_windowed_rgba_start } };
|
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user