Mercurial > sdl-ios-xcode
comparison src/video/qtopia/SDL_QWin.cc @ 1668:4da1ee79c9af SDL-1.3
more tweaking indent options
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 29 May 2006 04:04:35 +0000 |
parents | 28193f833b2b |
children |
comparison
equal
deleted
inserted
replaced
1667:1fddae038bc8 | 1668:4da1ee79c9af |
---|---|
25 #include <qapplication.h> | 25 #include <qapplication.h> |
26 #include <qdirectpainter_qws.h> | 26 #include <qdirectpainter_qws.h> |
27 | 27 |
28 screenRotationT screenRotation = SDL_QT_NO_ROTATION; | 28 screenRotationT screenRotation = SDL_QT_NO_ROTATION; |
29 | 29 |
30 SDL_QWin::SDL_QWin (const QSize & size): | 30 SDL_QWin::SDL_QWin(const QSize & size): |
31 QWidget (0, "SDL_main"), | 31 QWidget(0, "SDL_main"), |
32 my_painter (0), | 32 my_painter(0), |
33 my_image (0), | 33 my_image(0), |
34 my_inhibit_resize (false), | 34 my_inhibit_resize(false), |
35 my_mouse_pos (-1, -1), | 35 my_mouse_pos(-1, -1), |
36 my_flags (0), | 36 my_flags(0), |
37 my_has_fullscreen (false), | 37 my_has_fullscreen(false), |
38 my_locked (0) | 38 my_locked(0) |
39 { | 39 { |
40 setBackgroundMode (NoBackground); | 40 setBackgroundMode(NoBackground); |
41 } | 41 } |
42 | 42 |
43 SDL_QWin::~SDL_QWin () | 43 SDL_QWin::~SDL_QWin() |
44 { | 44 { |
45 // Nothing to do yet. | 45 // Nothing to do yet. |
46 if (my_image) { | 46 if (my_image) { |
47 delete my_image; | 47 delete my_image; |
48 } | 48 } |
49 } | 49 } |
50 | 50 |
51 void | 51 void |
52 SDL_QWin::setImage (QImage * image) | 52 SDL_QWin::setImage(QImage * image) |
53 { | 53 { |
54 if (my_image) { | 54 if (my_image) { |
55 delete my_image; | 55 delete my_image; |
56 } | 56 } |
57 my_image = image; | 57 my_image = image; |
58 // setFixedSize(image->size()); | 58 // setFixedSize(image->size()); |
59 } | 59 } |
60 | 60 |
61 void | 61 void |
62 SDL_QWin::resizeEvent (QResizeEvent * e) | 62 SDL_QWin::resizeEvent(QResizeEvent * e) |
63 { | 63 { |
64 if (size () != qApp->desktop ()->size ()) { | 64 if (size() != qApp->desktop()->size()) { |
65 // Widget is not the correct size, so do the fullscreen magic | 65 // Widget is not the correct size, so do the fullscreen magic |
66 my_has_fullscreen = false; | 66 my_has_fullscreen = false; |
67 enableFullscreen (); | 67 enableFullscreen(); |
68 } | 68 } |
69 if (my_inhibit_resize) { | 69 if (my_inhibit_resize) { |
70 my_inhibit_resize = false; | 70 my_inhibit_resize = false; |
71 } else { | 71 } else { |
72 SDL_PrivateResize (e->size ().width (), e->size ().height ()); | 72 SDL_PrivateResize(e->size().width(), e->size().height()); |
73 } | 73 } |
74 } | 74 } |
75 | 75 |
76 void | 76 void |
77 SDL_QWin::focusInEvent (QFocusEvent *) | 77 SDL_QWin::focusInEvent(QFocusEvent *) |
78 { | 78 { |
79 // Always do it here, no matter the size. | 79 // Always do it here, no matter the size. |
80 enableFullscreen (); | 80 enableFullscreen(); |
81 SDL_PrivateAppActive (true, SDL_APPINPUTFOCUS); | 81 SDL_PrivateAppActive(true, SDL_APPINPUTFOCUS); |
82 } | 82 } |
83 | 83 |
84 void | 84 void |
85 SDL_QWin::focusOutEvent (QFocusEvent *) | 85 SDL_QWin::focusOutEvent(QFocusEvent *) |
86 { | 86 { |
87 my_has_fullscreen = false; | 87 my_has_fullscreen = false; |
88 SDL_PrivateAppActive (false, SDL_APPINPUTFOCUS); | 88 SDL_PrivateAppActive(false, SDL_APPINPUTFOCUS); |
89 } | 89 } |
90 | 90 |
91 void | 91 void |
92 SDL_QWin::closeEvent (QCloseEvent * e) | 92 SDL_QWin::closeEvent(QCloseEvent * e) |
93 { | 93 { |
94 SDL_PrivateQuit (); | 94 SDL_PrivateQuit(); |
95 e->ignore (); | 95 e->ignore(); |
96 } | 96 } |
97 | 97 |
98 void | 98 void |
99 SDL_QWin::setMousePos (const QPoint & pos) | 99 SDL_QWin::setMousePos(const QPoint & pos) |
100 { | 100 { |
101 if (my_image->width () == height ()) { | 101 if (my_image->width() == height()) { |
102 if (screenRotation == SDL_QT_ROTATION_90) | 102 if (screenRotation == SDL_QT_ROTATION_90) |
103 my_mouse_pos = QPoint (height () - pos.y (), pos.x ()); | 103 my_mouse_pos = QPoint(height() - pos.y(), pos.x()); |
104 else if (screenRotation == SDL_QT_ROTATION_270) | 104 else if (screenRotation == SDL_QT_ROTATION_270) |
105 my_mouse_pos = QPoint (pos.y (), width () - pos.x ()); | 105 my_mouse_pos = QPoint(pos.y(), width() - pos.x()); |
106 } else { | 106 } else { |
107 my_mouse_pos = pos; | 107 my_mouse_pos = pos; |
108 } | 108 } |
109 } | 109 } |
110 | 110 |
111 void | 111 void |
112 SDL_QWin::mouseMoveEvent (QMouseEvent * e) | 112 SDL_QWin::mouseMoveEvent(QMouseEvent * e) |
113 { | 113 { |
114 Qt::ButtonState button = e->button (); | 114 Qt::ButtonState button = e->button(); |
115 int sdlstate = 0; | 115 int sdlstate = 0; |
116 if ((button & Qt::LeftButton)) { | 116 if ((button & Qt::LeftButton)) { |
117 sdlstate |= SDL_BUTTON_LMASK; | 117 sdlstate |= SDL_BUTTON_LMASK; |
118 } | 118 } |
119 if ((button & Qt::RightButton)) { | 119 if ((button & Qt::RightButton)) { |
120 sdlstate |= SDL_BUTTON_RMASK; | 120 sdlstate |= SDL_BUTTON_RMASK; |
121 } | 121 } |
122 if ((button & Qt::MidButton)) { | 122 if ((button & Qt::MidButton)) { |
123 sdlstate |= SDL_BUTTON_MMASK; | 123 sdlstate |= SDL_BUTTON_MMASK; |
124 } | 124 } |
125 setMousePos (e->pos ()); | 125 setMousePos(e->pos()); |
126 SDL_PrivateMouseMotion (sdlstate, 0, my_mouse_pos.x (), | 126 SDL_PrivateMouseMotion(sdlstate, 0, my_mouse_pos.x(), my_mouse_pos.y()); |
127 my_mouse_pos.y ()); | 127 } |
128 } | 128 |
129 | 129 void |
130 void | 130 SDL_QWin::mousePressEvent(QMouseEvent * e) |
131 SDL_QWin::mousePressEvent (QMouseEvent * e) | 131 { |
132 { | 132 mouseMoveEvent(e); |
133 mouseMoveEvent (e); | 133 Qt::ButtonState button = e->button(); |
134 Qt::ButtonState button = e->button (); | 134 SDL_PrivateMouseButton(SDL_PRESSED, |
135 SDL_PrivateMouseButton (SDL_PRESSED, | 135 (button & Qt::LeftButton) ? 1 : |
136 (button & Qt::LeftButton) ? 1 : | 136 ((button & Qt::RightButton) ? 2 : 3), |
137 ((button & Qt::RightButton) ? 2 : 3), | 137 my_mouse_pos.x(), my_mouse_pos.y()); |
138 my_mouse_pos.x (), my_mouse_pos.y ()); | 138 } |
139 } | 139 |
140 | 140 void |
141 void | 141 SDL_QWin::mouseReleaseEvent(QMouseEvent * e) |
142 SDL_QWin::mouseReleaseEvent (QMouseEvent * e) | 142 { |
143 { | 143 setMousePos(e->pos()); |
144 setMousePos (e->pos ()); | 144 Qt::ButtonState button = e->button(); |
145 Qt::ButtonState button = e->button (); | 145 SDL_PrivateMouseButton(SDL_RELEASED, |
146 SDL_PrivateMouseButton (SDL_RELEASED, | 146 (button & Qt::LeftButton) ? 1 : |
147 (button & Qt::LeftButton) ? 1 : | 147 ((button & Qt::RightButton) ? 2 : 3), |
148 ((button & Qt::RightButton) ? 2 : 3), | 148 my_mouse_pos.x(), my_mouse_pos.y()); |
149 my_mouse_pos.x (), my_mouse_pos.y ()); | 149 my_mouse_pos = QPoint(-1, -1); |
150 my_mouse_pos = QPoint (-1, -1); | |
151 } | 150 } |
152 | 151 |
153 static inline void | 152 static inline void |
154 gs_fastRotateBlit_3 (unsigned short *fb, | 153 gs_fastRotateBlit_3(unsigned short *fb, |
155 unsigned short *bits, const QRect & rect) | 154 unsigned short *bits, const QRect & rect) |
156 { | 155 { |
157 // FIXME: this only works correctly for 240x320 displays | 156 // FIXME: this only works correctly for 240x320 displays |
158 int startx, starty; | 157 int startx, starty; |
159 int width, height; | 158 int width, height; |
160 | 159 |
161 startx = rect.left () >> 1; | 160 startx = rect.left() >> 1; |
162 starty = rect.top () >> 1; | 161 starty = rect.top() >> 1; |
163 width = ((rect.right () - rect.left ()) >> 1) + 2; | 162 width = ((rect.right() - rect.left()) >> 1) + 2; |
164 height = ((rect.bottom () - rect.top ()) >> 1) + 2; | 163 height = ((rect.bottom() - rect.top()) >> 1) + 2; |
165 | 164 |
166 if ((startx + width) > 120) { | 165 if ((startx + width) > 120) { |
167 width = 120 - startx; // avoid horizontal overflow | 166 width = 120 - startx; // avoid horizontal overflow |
168 } | 167 } |
169 if ((starty + height) > 160) { | 168 if ((starty + height) > 160) { |
206 dp2 += rowadd; | 205 dp2 += rowadd; |
207 } | 206 } |
208 } | 207 } |
209 | 208 |
210 static inline void | 209 static inline void |
211 gs_fastRotateBlit_1 (unsigned short *fb, | 210 gs_fastRotateBlit_1(unsigned short *fb, |
212 unsigned short *bits, const QRect & rect) | 211 unsigned short *bits, const QRect & rect) |
213 { | 212 { |
214 // FIXME: this only works correctly for 240x320 displays | 213 // FIXME: this only works correctly for 240x320 displays |
215 int startx, starty; | 214 int startx, starty; |
216 int width, height; | 215 int width, height; |
217 | 216 |
218 startx = rect.left () >> 1; | 217 startx = rect.left() >> 1; |
219 starty = rect.top () >> 1; | 218 starty = rect.top() >> 1; |
220 width = ((rect.right () - rect.left ()) >> 1) + 2; | 219 width = ((rect.right() - rect.left()) >> 1) + 2; |
221 height = ((rect.bottom () - rect.top ()) >> 1) + 2; | 220 height = ((rect.bottom() - rect.top()) >> 1) + 2; |
222 | 221 |
223 if ((startx + width) > 120) { | 222 if ((startx + width) > 120) { |
224 width = 120 - startx; // avoid horizontal overflow | 223 width = 120 - startx; // avoid horizontal overflow |
225 } | 224 } |
226 if ((starty + height) > 160) { | 225 if ((starty + height) > 160) { |
379 return true; | 378 return true; |
380 } | 379 } |
381 /* *INDENT-ON* */ | 380 /* *INDENT-ON* */ |
382 | 381 |
383 void | 382 void |
384 SDL_QWin::repaintRect (const QRect & rect) | 383 SDL_QWin::repaintRect(const QRect & rect) |
385 { | 384 { |
386 if (!my_painter || !rect.width () || !rect.height ()) { | 385 if (!my_painter || !rect.width() || !rect.height()) { |
387 return; | 386 return; |
388 } | 387 } |
389 | 388 |
390 if (QPixmap::defaultDepth () == 16) { | 389 if (QPixmap::defaultDepth() == 16) { |
391 switch (my_painter->transformOrientation ()) { | 390 switch (my_painter->transformOrientation()) { |
392 case 3: | 391 case 3: |
393 if (repaintRotation3 (rect)) { | 392 if (repaintRotation3(rect)) { |
394 return; | 393 return; |
395 } | 394 } |
396 break; | 395 break; |
397 case 1: | 396 case 1: |
398 if (repaintRotation1 (rect)) { | 397 if (repaintRotation1(rect)) { |
399 return; | 398 return; |
400 } | 399 } |
401 break; | 400 break; |
402 case 0: | 401 case 0: |
403 if (repaintRotation0 (rect)) { | 402 if (repaintRotation0(rect)) { |
404 return; | 403 return; |
405 } | 404 } |
406 break; | 405 break; |
407 } | 406 } |
408 } | 407 } |
409 my_painter->drawImage (rect.topLeft (), *my_image, rect); | 408 my_painter->drawImage(rect.topLeft(), *my_image, rect); |
410 } | 409 } |
411 | 410 |
412 // This paints the current buffer to the screen, when desired. | 411 // This paints the current buffer to the screen, when desired. |
413 void | 412 void |
414 SDL_QWin::paintEvent (QPaintEvent * ev) | 413 SDL_QWin::paintEvent(QPaintEvent * ev) |
415 { | 414 { |
416 if (my_image) { | 415 if (my_image) { |
417 lockScreen (true); | 416 lockScreen(true); |
418 repaintRect (ev->rect ()); | 417 repaintRect(ev->rect()); |
419 unlockScreen (); | 418 unlockScreen(); |
420 } | 419 } |
421 } | 420 } |
422 | 421 |
423 /* Function to translate a keyboard transition and queue the key event | 422 /* Function to translate a keyboard transition and queue the key event |
424 * This should probably be a table although this method isn't exactly | 423 * This should probably be a table although this method isn't exactly |
425 * slow. | 424 * slow. |
426 */ | 425 */ |
427 void | 426 void |
428 SDL_QWin::QueueKey (QKeyEvent * e, int pressed) | 427 SDL_QWin::QueueKey(QKeyEvent * e, int pressed) |
429 { | 428 { |
430 SDL_keysym keysym; | 429 SDL_keysym keysym; |
431 int scancode = e->key (); | 430 int scancode = e->key(); |
432 /* Set the keysym information */ | 431 /* Set the keysym information */ |
433 if (scancode >= 'A' && scancode <= 'Z') { | 432 if (scancode >= 'A' && scancode <= 'Z') { |
434 // Qt sends uppercase, SDL wants lowercase | 433 // Qt sends uppercase, SDL wants lowercase |
435 keysym.sym = static_cast < SDLKey > (scancode + 32); | 434 keysym.sym = static_cast < SDLKey > (scancode + 32); |
436 } else if (scancode >= 0x1000) { | 435 } else if (scancode >= 0x1000) { |
605 } else { | 604 } else { |
606 keysym.sym = static_cast < SDLKey > (scancode); | 605 keysym.sym = static_cast < SDLKey > (scancode); |
607 } | 606 } |
608 keysym.scancode = scancode; | 607 keysym.scancode = scancode; |
609 keysym.mod = KMOD_NONE; | 608 keysym.mod = KMOD_NONE; |
610 ButtonState st = e->state (); | 609 ButtonState st = e->state(); |
611 if ((st & ShiftButton)) { | 610 if ((st & ShiftButton)) { |
612 keysym.mod = static_cast < SDLMod > (keysym.mod | KMOD_LSHIFT); | 611 keysym.mod = static_cast < SDLMod > (keysym.mod | KMOD_LSHIFT); |
613 } | 612 } |
614 if ((st & ControlButton)) { | 613 if ((st & ControlButton)) { |
615 keysym.mod = static_cast < SDLMod > (keysym.mod | KMOD_LCTRL); | 614 keysym.mod = static_cast < SDLMod > (keysym.mod | KMOD_LCTRL); |
616 } | 615 } |
617 if ((st & AltButton)) { | 616 if ((st & AltButton)) { |
618 keysym.mod = static_cast < SDLMod > (keysym.mod | KMOD_LALT); | 617 keysym.mod = static_cast < SDLMod > (keysym.mod | KMOD_LALT); |
619 } | 618 } |
620 if (SDL_TranslateUNICODE) { | 619 if (SDL_TranslateUNICODE) { |
621 QChar qchar = e->text ()[0]; | 620 QChar qchar = e->text()[0]; |
622 keysym.unicode = qchar.unicode (); | 621 keysym.unicode = qchar.unicode(); |
623 } else { | 622 } else { |
624 keysym.unicode = 0; | 623 keysym.unicode = 0; |
625 } | 624 } |
626 | 625 |
627 /* NUMLOCK and CAPSLOCK are implemented as double-presses in reality */ | 626 /* NUMLOCK and CAPSLOCK are implemented as double-presses in reality */ |
629 // pressed = 1; | 628 // pressed = 1; |
630 // } | 629 // } |
631 | 630 |
632 /* Queue the key event */ | 631 /* Queue the key event */ |
633 if (pressed) { | 632 if (pressed) { |
634 SDL_PrivateKeyboard (SDL_PRESSED, &keysym); | 633 SDL_PrivateKeyboard(SDL_PRESSED, &keysym); |
635 } else { | 634 } else { |
636 SDL_PrivateKeyboard (SDL_RELEASED, &keysym); | 635 SDL_PrivateKeyboard(SDL_RELEASED, &keysym); |
637 } | 636 } |
638 } | 637 } |
639 | 638 |
640 void | 639 void |
641 SDL_QWin::setFullscreen (bool fs_on) | 640 SDL_QWin::setFullscreen(bool fs_on) |
642 { | 641 { |
643 my_has_fullscreen = false; | 642 my_has_fullscreen = false; |
644 enableFullscreen (); | 643 enableFullscreen(); |
645 } | 644 } |
646 | 645 |
647 void | 646 void |
648 SDL_QWin::enableFullscreen () | 647 SDL_QWin::enableFullscreen() |
649 { | 648 { |
650 // Make sure size is correct | 649 // Make sure size is correct |
651 if (!my_has_fullscreen) { | 650 if (!my_has_fullscreen) { |
652 setFixedSize (qApp->desktop ()->size ()); | 651 setFixedSize(qApp->desktop()->size()); |
653 // This call is needed because showFullScreen won't work | 652 // This call is needed because showFullScreen won't work |
654 // correctly if the widget already considers itself to be fullscreen. | 653 // correctly if the widget already considers itself to be fullscreen. |
655 showNormal (); | 654 showNormal(); |
656 // This is needed because showNormal() forcefully changes the window | 655 // This is needed because showNormal() forcefully changes the window |
657 // style to WSTyle_TopLevel. | 656 // style to WSTyle_TopLevel. |
658 setWFlags (WStyle_Customize | WStyle_NoBorder); | 657 setWFlags(WStyle_Customize | WStyle_NoBorder); |
659 // Enable fullscreen. | 658 // Enable fullscreen. |
660 showFullScreen (); | 659 showFullScreen(); |
661 my_has_fullscreen = true; | 660 my_has_fullscreen = true; |
662 } | 661 } |
663 } | 662 } |
664 | 663 |
665 /* *INDENT-OFF* */ | 664 /* *INDENT-OFF* */ |
677 return true; | 676 return true; |
678 } | 677 } |
679 /* *INDENT-ON* */ | 678 /* *INDENT-ON* */ |
680 | 679 |
681 void | 680 void |
682 SDL_QWin::unlockScreen () | 681 SDL_QWin::unlockScreen() |
683 { | 682 { |
684 if (my_locked > 0) { | 683 if (my_locked > 0) { |
685 my_locked--; // decrease lock refcount; | 684 my_locked--; // decrease lock refcount; |
686 } | 685 } |
687 if (!my_locked && my_painter) { | 686 if (!my_locked && my_painter) { |
688 my_painter->end (); | 687 my_painter->end(); |
689 delete my_painter; | 688 delete my_painter; |
690 my_painter = 0; | 689 my_painter = 0; |
691 } | 690 } |
692 } | 691 } |
693 | 692 |