1// main.cpp
2
3#include <stdio.h>
4
5#include <Application.h>
6#include <Bitmap.h>
7#include <View.h>
8#include <Window.h>
9
10class TestView : public BView {
11
12 public:
13					TestView(BRect frame, const char* name,
14							 uint32 resizeFlags, uint32 flags);
15
16	virtual	void	Draw(BRect updateRect);
17
18 private:
19	BBitmap*		fBitmap;
20};
21
22//#define LEFT_OFFSET 0
23//#define TOP_OFFSET 0
24#define LEFT_OFFSET 30
25#define TOP_OFFSET 30
26
27// constructor
28TestView::TestView(BRect frame, const char* name,
29				   uint32 resizeFlags, uint32 flags)
30	: BView(frame, name, resizeFlags, flags),
31
32	  fBitmap(new BBitmap(BRect(0 + LEFT_OFFSET,
33	  							0 + TOP_OFFSET,
34	  							99 + LEFT_OFFSET,
35	  							99 + TOP_OFFSET),
36	  					  B_BITMAP_CLEAR_TO_WHITE,
37	  					  B_RGB32))
38{
39	SetViewColor(216, 216, 216);
40
41	uint8* bits = (uint8*)fBitmap->Bits();
42	uint32 width = fBitmap->Bounds().IntegerWidth() + 1;
43	uint32 height = fBitmap->Bounds().IntegerHeight() + 1;
44	uint32 bpr = fBitmap->BytesPerRow();
45
46	// top row -> red
47	uint8* b = bits;
48	for (uint32 x = 0; x < width; x++) {
49		b[0] = 0;
50		b[1] = 0;
51		b += 4;
52	}
53
54	// left/right edge pixels -> red
55	b = bits + bpr;
56	for (uint32 y = 1; y < height - 1; y++) {
57		b[0] = 0;
58		b[1] = 0;
59		b[(width - 1) * 4 + 0] = 0;
60		b[(width - 1) * 4 + 1] = 0;
61		b += bpr;
62	}
63
64	// bottom row -> red
65	for (uint32 x = 0; x < width; x++) {
66		b[0] = 0;
67		b[1] = 0;
68		b += 4;
69	}
70}
71
72// Draw
73void
74TestView::Draw(BRect updateRect)
75{
76//	DrawBitmap(BBitmap*, BRect source, BRect destination);
77//
78//  BeBook:
79//  If a source rectangle is given, only that part of the
80//  bitmap image is drawn. Otherwise, the entire bitmap
81//  is placed in the view. The source rectangle is stated
82//  in the internal coordinates of the BBitmap object.
83
84// Test 1:
85	// if the above was true, then we should see the left
86	// top area of the bitmap...
87//	BRect view(0, 0, 50, 50);
88//	BRect bitmap = view.OffsetByCopy(fBitmap->Bounds().LeftTop());
89//
90//	DrawBitmap(fBitmap, bitmap, view);
91
92// Test 2:
93	// if the above was true, we should simply see the entire
94	// bitmap at the left top corner of the view
95	BRect bitmap = fBitmap->Bounds();
96	BRect view = bitmap.OffsetToCopy(B_ORIGIN);
97
98	DrawBitmap(fBitmap, bitmap, view);
99}
100
101
102// main
103int
104main(int argc, char** argv)
105{
106	BApplication app("application/x.vnd-Haiku.BitmapBounds");
107
108	BRect frame(50.0, 50.0, 300.0, 250.0);
109	BWindow* window = new BWindow(frame, "Bitmap Bounds", B_TITLED_WINDOW,
110		B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
111
112	BView* view = new TestView(window->Bounds(), "test",
113		B_FOLLOW_ALL, B_WILL_DRAW);
114	window->AddChild(view);
115
116	window->Show();
117
118	app.Run();
119
120	return 0;
121}
122