xref: /haiku/src/tests/kits/game/direct_window_info_test/dwinfo.cpp (revision daa54abdc5109740a1d90ef39293649e5a68a631)
1 #include <Application.h>
2 #include <DirectWindow.h>
3 
4 #include <stdio.h>
5 
6 static const char *
state_to_string(direct_buffer_state state)7 state_to_string(direct_buffer_state state)
8 {
9 	//TODO: Return more info like B_CLIPPING_MODIFIED, etc.
10 
11 	switch (state & B_DIRECT_MODE_MASK) {
12 		case B_DIRECT_START:
13 			return "B_DIRECT_START";
14 		case B_DIRECT_STOP:
15 			return "B_DIRECT_STOP";
16 		case B_DIRECT_MODIFY:
17 			return "B_DIRECT_MODIFY";
18 		default:
19 			return "other state";
20 	}
21 }
22 
23 
24 static const char *
layout_to_string(buffer_layout layout)25 layout_to_string(buffer_layout layout)
26 {
27 	switch (layout) {
28 		case B_BUFFER_NONINTERLEAVED:
29 			return "B_BUFFER_NONINTERLEAVED";
30 		default:
31 			return "unknown buffer_layout";
32 	}
33 }
34 
35 
36 static const char *
orientation_to_string(buffer_orientation orientation)37 orientation_to_string(buffer_orientation orientation)
38 {
39 	switch (orientation) {
40 		case B_BUFFER_TOP_TO_BOTTOM:
41 			return "B_BUFFER_TOP_TO_BOTTOM";
42 		case B_BUFFER_BOTTOM_TO_TOP:
43 			return "B_BUFFER_BOTTOM_TO_TOP";
44 		default:
45 			return "unknown buffer_orientation";
46 	}
47 }
48 
49 class TestWindow : public BDirectWindow {
50 public:
TestWindow()51 	TestWindow() : BDirectWindow(BRect(100, 100, 400, 300), "DWInfo", B_DOCUMENT_WINDOW, 0)
52 	{
53 
54 	}
55 
DirectConnected(direct_buffer_info * info)56 	virtual void DirectConnected(direct_buffer_info *info)
57 	{
58 		BRegion region;
59 
60 		printf("\n\n*** DirectConnected() ***\n");
61 		area_id areaId = area_for(info);
62 		area_info areaInfo;
63 		if (areaId >= 0 && get_area_info(areaId, &areaInfo) == B_OK)
64 			printf("area size: %ld\n", areaInfo.size);
65 
66 		printf("buffer state: %s\n", state_to_string(info->buffer_state));
67 		printf("bits: %p\n", info->bits);
68 		printf("pci_bits: %p\n", info->pci_bits);
69 		printf("bytes_per_row: %ld\n", info->bytes_per_row);
70 		printf("bits_per_pixel: %lu\n", info->bits_per_pixel);
71 		printf("pixel_format: %d\n", info->pixel_format);
72 		printf("buffer_layout: %s\n", layout_to_string(info->layout));
73 		printf("buffer_orientation: %s\n", orientation_to_string(info->orientation));
74 
75 		printf("\nCLIPPING INFO:\n");
76 		printf("clipping_rects count: %ld\n", info->clip_list_count);
77 
78 		printf("- window_bounds:\n");
79 		region.Set(info->window_bounds);
80 		region.PrintToStream();
81 
82 		region.MakeEmpty();
83 		for (uint32 i = 0; i < info->clip_list_count; i++)
84 			region.Include(info->clip_list[i]);
85 
86 		printf("- clip_list:\n");
87 		region.PrintToStream();
88 	}
89 
QuitRequested()90 	virtual bool QuitRequested()
91 	{
92 		be_app->PostMessage(B_QUIT_REQUESTED);
93 		return BDirectWindow::QuitRequested();
94 	}
95 };
96 
97 
98 
main()99 int main()
100 {
101 	BApplication app("application/x-vnd.DWInfo");
102 
103 	(new TestWindow())->Show();
104 
105 	app.Run();
106 }
107