SDL-1.2.14
[sdl_omap.git] / src / video / bwindow / SDL_BView.h
CommitLineData
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
29extern "C" {
30#include "../../events/SDL_events_c.h"
31};
32
33class SDL_BView : public BView
34{
35public:
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
111private:
112 BBitmap *image;
113 int xoff, yoff;
114};
115
116#endif /* _SDL_BView_h */