e14743d1 |
1 | /* |
2 | SDL - Simple DirectMedia Layer |
3 | Copyright (C) 1997-2009 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 */ |