symbian-qemu-0.9.1-12/libsdl-trunk/src/video/bwindow/SDL_BView.h
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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 */