• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2     SDL - Simple DirectMedia Layer
3     Copyright (C) 1997-2012 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:
SDL_BView(BRect frame)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 	}
~SDL_BView()44 	virtual ~SDL_BView() {
45 		SetBitmap(NULL);
46 	}
47 	/* Set drawing offsets for fullscreen mode */
SetXYOffset(int x,int y)48 	virtual void SetXYOffset(int x, int y) {
49 		xoff = x;
50 		yoff = y;
51 	}
GetXYOffset(int & x,int & y)52 	virtual void GetXYOffset(int &x, int &y) {
53 		x = xoff;
54 		y = yoff;
55 	}
GetXYOffset(float & x,float & y)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 	 */
FrameResized(float width,float height)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. :) */
SetBitmap(BBitmap * bitmap)78 	virtual void SetBitmap(BBitmap *bitmap) {
79 		if ( image ) {
80 			delete image;
81 		}
82 		image = bitmap;
83 	}
Draw(BRect updateRect)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 	}
DrawAsync(BRect updateRect)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 */
117