2 #include <l4/scout-gfx/simple_window_deco>
3 #include <l4/scout-gfx/icon>
4 #include <l4/scout-gfx/factory>
6 #define SIZER_RGBA _binary_sizer_rgba_start
7 extern unsigned char SIZER_RGBA[];
14 class Deco_widget : public Parent_widget
20 Sizer_event_handler _sevh;
21 Mover_event_handler _mevh;
23 Deco_widget(Factory *f, Window *w)
26 _sizer = f->create_icon(SIZER_RGBA, Area(32, 32));
28 _sizer->event_handler(&_sevh);
32 Mag_gfx::Area preferred_size() const { return Mag_gfx::Area(0,0); }
33 Mag_gfx::Area min_size() const { return Mag_gfx::Area(0,0); }
34 Mag_gfx::Area max_size() const { return Mag_gfx::Area(Mag_gfx::Area::Max_w, Mag_gfx::Area::Max_h); }
35 Mag_gfx::Orientations expanding() const { return Mag_gfx::Horz; }
36 bool empty() const { return false; }
38 void draw(Mag_gfx::Canvas *c, Mag_gfx::Point const &p)
40 using namespace Mag_gfx;
41 static const Mag_gfx::Rgba32::Color grey(42, 62, 62);
42 static const Mag_gfx::Rgba32::Color black(0, 0, 0);
44 c->draw_box(Rect(p, Area(size().w(), th)), grey);
46 c->draw_box(Rect(p + Point(0, size().h() - 1), Area(size().w(), 1)), black);
47 Area hl(1, size().h() - th);
48 c->draw_box(Rect(p + Point(0, th), hl), black);
49 c->draw_box(Rect(p + Point(size().w() - 1, th), hl), black);
51 Parent_widget::draw(c, p);
53 // _sizer->draw(c, p + Point(size() - _sizer->size()));
56 Rect title_rect() const
59 r = Rect(r.p1(), Area(r.w(), th));
63 Widget *find(Point const &p)
65 if (!findable() || !geometry().contains(p))
68 if (title_rect().contains(p))
71 return _sizer->find(p - pos());
74 Widget *handle_event(Event const &e)
83 void set_geometry(Rect const &r)
85 Widget::set_geometry(r);
86 _sizer->set_geometry(Rect(Point(size() - _sizer->size()), _sizer->size()));
93 Simple_window_deco_policy::create_deco(Window *w) const
95 return new Deco_widget(_f, w);
99 Simple_window_deco_policy::set_deco_mode(Window::Mode mode, Widget *deco,
102 if (mode == Window::Fullscreen)
104 insets->tl = Area(0, 0);
105 insets->br = Area(0, 0);
106 deco->findable(false);
107 deco->visible(false);
111 insets->tl = Area(1, 16);
112 insets->br = Area(1, 1);
113 deco->findable(true);