|
1 /* |
|
2 SDL - Simple DirectMedia Layer |
|
3 Copyright (C) 1997-2006 Sam Lantinga |
|
4 |
|
5 This library is free software; you can redistribute it and/or |
|
6 modify it under the terms of the GNU Lesser General Public |
|
7 License as published by the Free Software Foundation; either |
|
8 version 2.1 of the License, or (at your option) any later version. |
|
9 |
|
10 This library is distributed in the hope that it will be useful, |
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
13 Lesser General Public License for more details. |
|
14 |
|
15 You should have received a copy of the GNU Lesser General Public |
|
16 License along with this library; if not, write to the Free Software |
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
|
18 |
|
19 Sam Lantinga |
|
20 slouken@libsdl.org |
|
21 */ |
|
22 #include "SDL_config.h" |
|
23 |
|
24 #ifndef _SDL_BView_h |
|
25 #define _SDL_BView_h |
|
26 |
|
27 /* This is the event handling and graphics update portion of SDL_BWin */ |
|
28 |
|
29 extern "C" { |
|
30 #include "../../events/SDL_events_c.h" |
|
31 }; |
|
32 |
|
33 class SDL_BView : public BView |
|
34 { |
|
35 public: |
|
36 SDL_BView(BRect frame) : |
|
37 BView(frame, "SDL View", B_FOLLOW_ALL_SIDES, |
|
38 (B_WILL_DRAW|B_FRAME_EVENTS)) { |
|
39 image = NULL; |
|
40 xoff = yoff = 0; |
|
41 SetViewColor(0,0,0,0); |
|
42 SetHighColor(0,0,0,0); |
|
43 } |
|
44 virtual ~SDL_BView() { |
|
45 SetBitmap(NULL); |
|
46 } |
|
47 /* Set drawing offsets for fullscreen mode */ |
|
48 virtual void SetXYOffset(int x, int y) { |
|
49 xoff = x; |
|
50 yoff = y; |
|
51 } |
|
52 virtual void GetXYOffset(int &x, int &y) { |
|
53 x = xoff; |
|
54 y = yoff; |
|
55 } |
|
56 virtual void GetXYOffset(float &x, float &y) { |
|
57 x = (float)xoff; |
|
58 y = (float)yoff; |
|
59 } |
|
60 /* The view changed size. If it means we're in fullscreen, we |
|
61 * draw a nice black box in the entire view to get black borders. |
|
62 */ |
|
63 virtual void FrameResized(float width, float height) { |
|
64 BRect bounds; |
|
65 bounds.top = bounds.left = 0; |
|
66 bounds.right = width; |
|
67 bounds.bottom = height; |
|
68 /* Fill the entire view with black */ |
|
69 FillRect(bounds, B_SOLID_HIGH); |
|
70 /* And if there's an image, redraw it. */ |
|
71 if( image ) { |
|
72 bounds = image->Bounds(); |
|
73 Draw(bounds); |
|
74 } |
|
75 } |
|
76 |
|
77 /* Drawing portion of this complete breakfast. :) */ |
|
78 virtual void SetBitmap(BBitmap *bitmap) { |
|
79 if ( image ) { |
|
80 delete image; |
|
81 } |
|
82 image = bitmap; |
|
83 } |
|
84 virtual void Draw(BRect updateRect) { |
|
85 if ( image ) { |
|
86 if(xoff || yoff) { |
|
87 BRect dest; |
|
88 dest.top = updateRect.top + yoff; |
|
89 dest.left = updateRect.left + xoff; |
|
90 dest.bottom = updateRect.bottom + yoff; |
|
91 dest.right = updateRect.right + xoff; |
|
92 DrawBitmap(image, updateRect, dest); |
|
93 } else { |
|
94 DrawBitmap(image, updateRect, updateRect); |
|
95 } |
|
96 } |
|
97 } |
|
98 virtual void DrawAsync(BRect updateRect) { |
|
99 if(xoff || yoff) { |
|
100 BRect dest; |
|
101 dest.top = updateRect.top + yoff; |
|
102 dest.left = updateRect.left + xoff; |
|
103 dest.bottom = updateRect.bottom + yoff; |
|
104 dest.right = updateRect.right + xoff;; |
|
105 DrawBitmapAsync(image, updateRect, dest); |
|
106 } else { |
|
107 DrawBitmapAsync(image, updateRect, updateRect); |
|
108 } |
|
109 } |
|
110 |
|
111 private: |
|
112 BBitmap *image; |
|
113 int xoff, yoff; |
|
114 }; |
|
115 |
|
116 #endif /* _SDL_BView_h */ |