1/*
2 * Copyright 2005-2009, Haiku Inc.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Axel Dörfler, axeld@pinc-software.de
7 */
8
9
10#include <Application.h>
11#include <Window.h>
12#include <View.h>
13
14#include <stdio.h>
15
16
17class View : public BView {
18public:
19							View(BRect rect);
20	virtual					~View();
21
22	virtual void			Draw(BRect updateRect);
23};
24
25
26class Window : public BWindow {
27public:
28							Window();
29	virtual					~Window();
30
31	virtual bool			QuitRequested();
32};
33
34
35class Application : public BApplication {
36public:
37							Application();
38
39	virtual void			ReadyToRun();
40};
41
42
43View::View(BRect rect)
44	:
45	BView(rect, "view state", B_FOLLOW_ALL, B_WILL_DRAW)
46{
47}
48
49
50View::~View()
51{
52}
53
54
55void
56View::Draw(BRect updateRect)
57{
58	SetHighColor(100, 100, 100);
59	StrokeRect(Bounds());
60
61	// TODO: for now, we only test scaling functionality
62
63	SetHighColor(42, 42, 242);
64	StrokeRect(BRect(5, 5, 10, 10));
65#ifdef __HAIKU__
66	printf("scale 1: %g\n", Scale());
67#endif
68
69	SetScale(2.0);
70	StrokeRect(BRect(5, 5, 10, 10));
71#ifdef __HAIKU__
72	printf("scale 2: %g\n", Scale());
73#endif
74
75	SetHighColor(42, 242, 42);
76	PushState();
77	StrokeRect(BRect(6, 6, 11, 11));
78#ifdef __HAIKU__
79	printf("scale 3: %g\n", Scale());
80#endif
81
82	SetHighColor(242, 42, 42);
83	SetScale(2.0);
84	StrokeRect(BRect(5, 5, 10, 10));
85#ifdef __HAIKU__
86	printf("scale 4: %g\n", Scale());
87#endif
88
89	PopState();
90	SetScale(1.0);
91}
92
93
94//	#pragma mark -
95
96
97Window::Window()
98	:
99	BWindow(BRect(100, 100, 400, 400), "ViewState-Test", B_TITLED_WINDOW,
100		B_ASYNCHRONOUS_CONTROLS)
101{
102	BView* view = new View(BRect(10, 10, 290, 290));
103	AddChild(view);
104}
105
106
107Window::~Window()
108{
109}
110
111
112bool
113Window::QuitRequested()
114{
115	be_app->PostMessage(B_QUIT_REQUESTED);
116	return true;
117}
118
119
120//	#pragma mark -
121
122
123Application::Application()
124	:
125	BApplication("application/x-vnd.haiku-view_state")
126{
127}
128
129
130void
131Application::ReadyToRun()
132{
133	Window* window = new Window();
134	window->Show();
135}
136
137
138//	#pragma mark -
139
140
141int
142main(int argc, char** argv)
143{
144	Application app;
145	app.Run();
146
147	return 0;
148}
149