aboutsummaryrefslogtreecommitdiff
path: root/src/tests/texturetest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/texturetest.cc')
-rw-r--r--src/tests/texturetest.cc135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/tests/texturetest.cc b/src/tests/texturetest.cc
new file mode 100644
index 0000000..0ba6741
--- /dev/null
+++ b/src/tests/texturetest.cc
@@ -0,0 +1,135 @@
1#include "ImageControl.hh"
2#include "Color.hh"
3#include "GContext.hh"
4#include "FbPixmap.hh"
5#include "Texture.hh"
6#include "FbWindow.hh"
7#include "EventHandler.hh"
8#include "EventManager.hh"
9#include "Theme.hh"
10#include "Font.hh"
11#include "App.hh"
12
13#include <memory>
14#include <iostream>
15#include <string>
16
17using namespace std;
18using namespace FbTk;
19
20class TestTheme: public Theme {
21public:
22 TestTheme(int screen):Theme(screen) { }
23 bool fallback(ThemeItem_base &item) { return false; }
24 void reconfigTheme() { }
25};
26
27class Application: public FbTk::FbWindow, public FbTk::EventHandler {
28public:
29 Application(int box_size, int num):
30 FbWindow(0, 0, 0, 640, box_size*num/8 - 3*5, ExposureMask | KeyPressMask),
31 m_box_size(box_size),
32 m_num(num),
33 m_font("fixed"),
34 m_imgctrl(screenNumber(), true, 8,
35 100, 100),
36 m_background(*this, 640, 480, depth()),
37 m_gc(m_background) {
38 setName("Texture Test");
39 setBackgroundPixmap(m_background.drawable());
40
41 FbTk::EventManager::instance()->add(*this, *this);
42
43 renderPixmaps();
44
45 show();
46 }
47 void keyPressEvent(XKeyEvent &ev) {
48 App::instance()->end();
49 }
50 void exposeEvent(XExposeEvent &ev) {
51 clear();
52 }
53
54private:
55
56 void renderPixmap(const Texture &text, int x, int y) {
57 Pixmap pm = m_imgctrl.renderImage(m_box_size, m_box_size,
58 text);
59
60 m_background.copyArea(pm, m_gc.gc(),
61 0, 0,
62 x, y,
63 m_box_size, m_box_size);
64 m_imgctrl.removeImage(pm);
65 }
66
67 void renderPixmaps() {
68
69 m_gc.setForeground(Color("gray", screenNumber()));
70
71 m_background.fillRectangle(m_gc.gc(),
72 0, 0,
73 width(), height());
74 // for text color
75 m_gc.setForeground(Color("black", screenNumber()));
76
77 const int step_size = m_box_size + 5;
78 int next_x = 5;
79 int next_y = 5;
80
81 TestTheme tm(screenNumber());
82 std::auto_ptr<ThemeItem<Texture> > text;
83 char value[18];
84 for (int i=0; i<m_num; ++i) {
85 sprintf(value, "%d", i);
86 text.reset(new ThemeItem<Texture>
87 (tm,
88 string("texture") + value,
89 string("Texture") + value));
90 cerr<<"Theme: "<<text->name()<<endl;
91 // load new style
92 ThemeManager::instance().load("test.theme");
93
94 renderPixmap(**text.get(), next_x, next_y);
95
96 next_x += step_size;
97 if (next_x + m_box_size > width()) {
98 m_font.drawText(m_background.drawable(),
99 screenNumber(),
100 m_gc.gc(),
101 value, strlen(value),
102 next_x, next_y + m_box_size/2);
103 next_x = 5;
104 next_y += step_size;
105 }
106
107 }
108
109
110 }
111
112
113 const int m_box_size;
114 const int m_num;
115 FbTk::Font m_font;
116 ImageControl m_imgctrl;
117 FbPixmap m_background;
118 FbTk::GContext m_gc;
119};
120
121int main(int argc, char **argv) {
122 int boxsize= 60;
123 int num = 63;
124 for (int i=1; i<argc; ++i) {
125 if (strcmp(argv[i], "-boxsize") == 0 && i + 1 < argc)
126 boxsize = atoi(argv[++i]);
127 else if (strcmp(argv[i], "-num") == 0 && i + 1 < argc)
128 num = atoi(argv[++i]);
129 }
130 App realapp;
131 Application app(boxsize, num);
132
133 realapp.eventLoop();
134
135}