SDL_BView.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

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