]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/mag-gfx/include/canvas
update
[l4.git] / l4 / pkg / mag-gfx / include / canvas
1 // vi:ft=cpp
2 /*
3  * (c) 2010 Alexander Warg <warg@os.inf.tu-dresden.de>
4  *     economic rights: Technische Universität Dresden (Germany)
5  *
6  * This file is part of TUD:OS and distributed under the terms of the
7  * GNU General Public License 2.
8  * Please see the COPYING-GPL-2 file for details.
9  */
10 #pragma once
11
12 #include <l4/mag-gfx/geometry>
13 #include <l4/mag-gfx/gfx_colors>
14
15 namespace Mag_gfx {
16
17 class Font;
18 class Pixel_info;
19 class Texture;
20
21 class Canvas
22 {
23 protected:
24   Rect _clip;
25   Area _size;
26
27   Canvas(Area const &sz) : _clip(Point(0,0), sz), _size(sz) {}
28   virtual void flush_pixels(Rect const &) {}
29
30 public:
31   enum Mix_mode { Solid, Mixed, Masked, Alpha };
32
33   void set_clipping(Rect const &c)
34   { _clip = Rect(Point(0,0), _size) & c; }
35
36   Rect const &clip() const { return _clip; }
37   bool clip_valid() const { return _clip.valid(); }
38
39   Area const &size() const { return _size; }
40
41   virtual ~Canvas() {}
42
43   virtual Pixel_info const *type() const = 0;
44   virtual void draw_box(Rect const &rect, Rgba32::Color color) = 0;
45   virtual void draw_string(Point const &pos, Font const *f, Rgba32::Color color, char const *str, unsigned len = -1) = 0;
46   virtual void draw_texture(Texture const *src, Rgb32::Color mix_color, Point const &pos, Mix_mode mode) = 0;
47
48   virtual void *buffer() const = 0;
49   virtual void buffer(void *buffer) = 0;
50   virtual int bytes_per_line() const = 0;
51
52   void draw_rect(Rect const &r, Rgba32::Color color);
53
54 };
55
56 }