Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qdirectfbconvenience.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
8
9#include <private/qpixmap_blitter_p.h>
10
11#include <QtGui/QWindow>
12#include <QtGui/QScreen>
13
15
16IDirectFB *QDirectFbConvenience::dfbInterface()
17{
18 static IDirectFB *dfb = nullptr;
19 if (!dfb) {
20 DFBResult result = DirectFBCreate(&dfb);
21 if (result != DFB_OK) {
22 DirectFBErrorFatal("QDirectFBConvenience: error creating DirectFB interface", result);
23 return 0;
24 }
25 }
26 return dfb;
27}
28
29IDirectFBDisplayLayer *QDirectFbConvenience::dfbDisplayLayer(int display)
30{
31 IDirectFBDisplayLayer *layer;
32 DFBResult result = QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),display,&layer);
33 if (result != DFB_OK)
34 DirectFBErrorFatal("QDirectFbConvenience: "
35 "Unable to get primary display layer!", result);
36 return layer;
37}
38
39QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps)
40{
41 switch (format) {
42 case DSPF_LUT8:
43 return QImage::Format_Indexed8;
44 case DSPF_RGB24:
45 return QImage::Format_RGB888;
46 case DSPF_ARGB4444:
47 return QImage::Format_ARGB4444_Premultiplied;
48 case DSPF_RGB444:
49 return QImage::Format_RGB444;
50 case DSPF_RGB555:
51 case DSPF_ARGB1555:
52 return QImage::Format_RGB555;
53 case DSPF_RGB16:
54 return QImage::Format_RGB16;
55 case DSPF_ARGB6666:
56 return QImage::Format_ARGB6666_Premultiplied;
57 case DSPF_RGB18:
58 return QImage::Format_RGB666;
59 case DSPF_RGB32:
60 return QImage::Format_RGB32;
61 case DSPF_ARGB: {
62 if (caps & DSCAPS_PREMULTIPLIED)
63 return QImage::Format_ARGB32_Premultiplied;
64 else return QImage::Format_ARGB32; }
65 default:
66 break;
67 }
68 return QImage::Format_Invalid;
69
70}
71
72int QDirectFbConvenience::colorDepthForSurface(const DFBSurfacePixelFormat format)
73{
74 return ((0x1f << 7) & format) >> 7;
75}
76
77/**
78 * This is borrowing the reference of the QDirectFbBlitter. You may not store this
79 * pointer as a class member but must only use it locally.
80 */
81IDirectFBSurface *QDirectFbConvenience::dfbSurfaceForPlatformPixmap(QPlatformPixmap *handle)
82{
83 QBlittablePlatformPixmap *blittablePmData = static_cast<QBlittablePlatformPixmap *>(handle);
84 if (blittablePmData) {
85 QBlittable *blittable = blittablePmData->blittable();
86 QDirectFbBlitter *dfbBlitter = static_cast<QDirectFbBlitter *>(blittable);
87 return dfbBlitter->m_surface.data();
88 }
89 return 0;
90}
91
92Qt::MouseButton QDirectFbConvenience::mouseButton(DFBInputDeviceButtonIdentifier identifier)
93{
94 // The Enum contains values for DIBI_FIRST (= DIBI_LEFT), DIBI_LAST (= 0x1f,) and
95 // just 3 enumerated Mouse Buttons. To convert into *ALL* possible Qt::MoueButton values,
96 // the parameter is cast as integer.
97
98 switch (int(identifier)) {
99 case DIBI_LEFT: // value is 0x00
100 return Qt::LeftButton;
101 case DIBI_RIGHT: // value is 0x01
102 return Qt::RightButton;
103 case DIBI_MIDDLE: // value is 0x02
104 return Qt::MiddleButton;
105 case 0x03:
106 return Qt::BackButton;
107 case 0x04:
108 return Qt::ForwardButton;
109 case 0x05:
110 return Qt::ExtraButton3;
111 case 0x06:
112 return Qt::ExtraButton4;
113 case 0x07:
114 return Qt::ExtraButton5;
115 case 0x08:
116 return Qt::ExtraButton6;
117 case 0x09:
118 return Qt::ExtraButton7;
119 case 0x0a:
120 return Qt::ExtraButton8;
121 case 0x0b:
122 return Qt::ExtraButton9;
123 case 0x0c:
124 return Qt::ExtraButton10;
125 case 0x0d:
126 return Qt::ExtraButton11;
127 case 0x0e:
128 return Qt::ExtraButton12;
129 case 0x0f:
130 return Qt::ExtraButton13;
131 case 0x10:
132 return Qt::ExtraButton14;
133 case 0x11:
134 return Qt::ExtraButton15;
135 case 0x12:
136 return Qt::ExtraButton16;
137 case 0x13:
138 return Qt::ExtraButton17;
139 case 0x14:
140 return Qt::ExtraButton18;
141 case 0x15:
142 return Qt::ExtraButton19;
143 case 0x16:
144 return Qt::ExtraButton20;
145 case 0x17:
146 return Qt::ExtraButton21;
147 case 0x18:
148 return Qt::ExtraButton22;
149 case 0x19:
150 return Qt::ExtraButton23;
151 case 0x1a:
152 return Qt::ExtraButton24;
153 default:
154 return Qt::NoButton;
155 }
156}
157
158Qt::MouseButtons QDirectFbConvenience::mouseButtons(DFBInputDeviceButtonMask mask)
159{
160 Qt::MouseButtons buttons = Qt::NoButton;
161
162 if (mask & DIBM_LEFT) {
163 buttons |= Qt::LeftButton;
164 }
165 if (mask & DIBM_MIDDLE) {
166 buttons |= Qt::MiddleButton;
167 }
168 if (mask & DIBM_RIGHT) {
169 buttons |= Qt::RightButton;
170 }
171 return buttons;
172}
173
174Qt::KeyboardModifiers QDirectFbConvenience::keyboardModifiers(DFBInputDeviceModifierMask mask)
175{
176 Qt::KeyboardModifiers modifiers = Qt::NoModifier;
177
178 if (mask & DIMM_SHIFT) {
179 modifiers |= Qt::ShiftModifier;
180 }
181 if (mask & DIMM_ALT) {
182 modifiers |= Qt::AltModifier;
183 }
184 if (mask & DIMM_ALTGR) {
185 modifiers |= Qt::MetaModifier;
186 }
187 if (mask & DIMM_CONTROL) {
188 modifiers |= Qt::ControlModifier;
189 }
190 if (mask & DIMM_META) {
191 modifiers |= Qt::MetaModifier;
192 }
193 return modifiers;
194}
195
196QEvent::Type QDirectFbConvenience::eventType(DFBWindowEventType type)
197{
198 switch(type) {
199 case DWET_BUTTONDOWN:
200 return QEvent::MouseButtonPress;
201 case DWET_BUTTONUP:
202 return QEvent::MouseButtonRelease;
203 case DWET_MOTION:
204 return QEvent::MouseMove;
205 case DWET_WHEEL:
206 return QEvent::Wheel;
207 case DWET_KEYDOWN:
208 return QEvent::KeyPress;
209 case DWET_KEYUP:
210 return QEvent::KeyRelease;
211 default:
212 return QEvent::None;
213 }
214}
215QDirectFbKeyMap *QDirectFbConvenience::dfbKeymap = nullptr;
217{
218 if (!dfbKeymap)
219 dfbKeymap = new QDirectFbKeyMap();
220 return dfbKeymap;
221}
222
224{
225 insert(DIKS_BACKSPACE , Qt::Key_Backspace);
226 insert(DIKS_TAB , Qt::Key_Tab);
227 insert(DIKS_RETURN , Qt::Key_Return);
228 insert(DIKS_ESCAPE , Qt::Key_Escape);
229 insert(DIKS_DELETE , Qt::Key_Delete);
230
231 insert(DIKS_CURSOR_LEFT , Qt::Key_Left);
232 insert(DIKS_CURSOR_RIGHT , Qt::Key_Right);
233 insert(DIKS_CURSOR_UP , Qt::Key_Up);
234 insert(DIKS_CURSOR_DOWN , Qt::Key_Down);
235 insert(DIKS_INSERT , Qt::Key_Insert);
236 insert(DIKS_HOME , Qt::Key_Home);
237 insert(DIKS_END , Qt::Key_End);
238 insert(DIKS_PAGE_UP , Qt::Key_PageUp);
239 insert(DIKS_PAGE_DOWN , Qt::Key_PageDown);
240 insert(DIKS_PRINT , Qt::Key_Print);
241 insert(DIKS_PAUSE , Qt::Key_Pause);
242 insert(DIKS_SELECT , Qt::Key_Select);
243 insert(DIKS_GOTO , Qt::Key_OpenUrl);
244 insert(DIKS_CLEAR , Qt::Key_Clear);
245 insert(DIKS_MENU , Qt::Key_Menu);
246 insert(DIKS_HELP , Qt::Key_Help);
247 insert(DIKS_INFO , Qt::Key_Info);
248 insert(DIKS_EXIT , Qt::Key_Exit);
249 insert(DIKS_SETUP , Qt::Key_Settings);
250
251 insert(DIKS_CD , Qt::Key_CD);
252 insert(DIKS_INTERNET , Qt::Key_HomePage);
253 insert(DIKS_MAIL , Qt::Key_LaunchMail);
254 insert(DIKS_FAVORITES , Qt::Key_Favorites);
255 insert(DIKS_KEYBOARD , Qt::Key_Keyboard);
256 insert(DIKS_PHONE , Qt::Key_Phone);
257 insert(DIKS_PROGRAM , Qt::Key_Guide);
258 insert(DIKS_TIME , Qt::Key_Time);
259
260 insert(DIKS_RED , Qt::Key_Red);
261 insert(DIKS_GREEN , Qt::Key_Green);
262 insert(DIKS_YELLOW , Qt::Key_Yellow);
263 insert(DIKS_BLUE , Qt::Key_Blue);
264
265 insert(DIKS_CHANNEL_UP , Qt::Key_ChannelUp);
266 insert(DIKS_CHANNEL_DOWN , Qt::Key_ChannelDown);
267
268 insert(DIKS_BACK , Qt::Key_Back);
269 insert(DIKS_FORWARD , Qt::Key_Forward);
270 insert(DIKS_VOLUME_UP , Qt::Key_VolumeUp);
271 insert(DIKS_VOLUME_DOWN , Qt::Key_VolumeDown);
272 insert(DIKS_MUTE , Qt::Key_VolumeMute);
273 insert(DIKS_PLAYPAUSE , Qt::Key_MediaTogglePlayPause);
274 insert(DIKS_PLAY , Qt::Key_MediaPlay);
275 insert(DIKS_STOP , Qt::Key_MediaStop);
276 insert(DIKS_RECORD , Qt::Key_MediaRecord);
277 insert(DIKS_PREVIOUS , Qt::Key_MediaPrevious);
278 insert(DIKS_NEXT , Qt::Key_MediaNext);
279 insert(DIKS_REWIND , Qt::Key_AudioRewind);
280 insert(DIKS_FASTFORWARD , Qt::Key_AudioForward);
281 insert(DIKS_SUBTITLE , Qt::Key_Subtitle);
282
283 insert(DIKS_F1 , Qt::Key_F1);
284 insert(DIKS_F2 , Qt::Key_F2);
285 insert(DIKS_F3 , Qt::Key_F3);
286 insert(DIKS_F4 , Qt::Key_F4);
287 insert(DIKS_F5 , Qt::Key_F5);
288 insert(DIKS_F6 , Qt::Key_F6);
289 insert(DIKS_F7 , Qt::Key_F7);
290 insert(DIKS_F8 , Qt::Key_F8);
291 insert(DIKS_F9 , Qt::Key_F9);
292 insert(DIKS_F10 , Qt::Key_F10);
293 insert(DIKS_F11 , Qt::Key_F11);
294 insert(DIKS_F12 , Qt::Key_F12);
295
296 insert(DIKS_SHIFT , Qt::Key_Shift);
297 insert(DIKS_CONTROL , Qt::Key_Control);
298 insert(DIKS_ALT , Qt::Key_Alt);
299 insert(DIKS_ALTGR , Qt::Key_AltGr);
300
301 insert(DIKS_META , Qt::Key_Meta);
302 insert(DIKS_SUPER , Qt::Key_Super_L); // ???
303 insert(DIKS_HYPER , Qt::Key_Hyper_L); // ???
304
305 insert(DIKS_CAPS_LOCK , Qt::Key_CapsLock);
306 insert(DIKS_NUM_LOCK , Qt::Key_NumLock);
307 insert(DIKS_SCROLL_LOCK , Qt::Key_ScrollLock);
308
309 insert(DIKS_DEAD_ABOVEDOT , Qt::Key_Dead_Abovedot);
310 insert(DIKS_DEAD_ABOVERING , Qt::Key_Dead_Abovering);
311 insert(DIKS_DEAD_ACUTE , Qt::Key_Dead_Acute);
312 insert(DIKS_DEAD_BREVE , Qt::Key_Dead_Breve);
313 insert(DIKS_DEAD_CARON , Qt::Key_Dead_Caron);
314 insert(DIKS_DEAD_CEDILLA , Qt::Key_Dead_Cedilla);
315 insert(DIKS_DEAD_CIRCUMFLEX , Qt::Key_Dead_Circumflex);
316 insert(DIKS_DEAD_DIAERESIS , Qt::Key_Dead_Diaeresis);
317 insert(DIKS_DEAD_DOUBLEACUTE , Qt::Key_Dead_Doubleacute);
318 insert(DIKS_DEAD_GRAVE , Qt::Key_Dead_Grave);
319 insert(DIKS_DEAD_IOTA , Qt::Key_Dead_Iota);
320 insert(DIKS_DEAD_MACRON , Qt::Key_Dead_Macron);
321 insert(DIKS_DEAD_OGONEK , Qt::Key_Dead_Ogonek);
322 insert(DIKS_DEAD_SEMIVOICED_SOUND , Qt::Key_Dead_Semivoiced_Sound);
323 insert(DIKS_DEAD_TILDE , Qt::Key_Dead_Tilde);
324 insert(DIKS_DEAD_VOICED_SOUND , Qt::Key_Dead_Voiced_Sound);
325 insert(DIKS_SPACE , Qt::Key_Space);
326 insert(DIKS_EXCLAMATION_MARK , Qt::Key_Exclam);
327 insert(DIKS_QUOTATION , Qt::Key_QuoteDbl);
328 insert(DIKS_NUMBER_SIGN , Qt::Key_NumberSign);
329 insert(DIKS_DOLLAR_SIGN , Qt::Key_Dollar);
330 insert(DIKS_PERCENT_SIGN , Qt::Key_Percent);
331 insert(DIKS_AMPERSAND , Qt::Key_Ampersand);
332 insert(DIKS_APOSTROPHE , Qt::Key_Apostrophe);
333 insert(DIKS_PARENTHESIS_LEFT , Qt::Key_ParenLeft);
334 insert(DIKS_PARENTHESIS_RIGHT , Qt::Key_ParenRight);
335 insert(DIKS_ASTERISK , Qt::Key_Asterisk);
336 insert(DIKS_PLUS_SIGN , Qt::Key_Plus);
337 insert(DIKS_COMMA , Qt::Key_Comma);
338 insert(DIKS_MINUS_SIGN , Qt::Key_Minus);
339 insert(DIKS_PERIOD , Qt::Key_Period);
340 insert(DIKS_SLASH , Qt::Key_Slash);
341 insert(DIKS_0 , Qt::Key_0);
342 insert(DIKS_1 , Qt::Key_1);
343 insert(DIKS_2 , Qt::Key_2);
344 insert(DIKS_3 , Qt::Key_3);
345 insert(DIKS_4 , Qt::Key_4);
346 insert(DIKS_5 , Qt::Key_5);
347 insert(DIKS_6 , Qt::Key_6);
348 insert(DIKS_7 , Qt::Key_7);
349 insert(DIKS_8 , Qt::Key_8);
350 insert(DIKS_9 , Qt::Key_9);
351 insert(DIKS_COLON , Qt::Key_Colon);
352 insert(DIKS_SEMICOLON , Qt::Key_Semicolon);
353 insert(DIKS_LESS_THAN_SIGN , Qt::Key_Less);
354 insert(DIKS_EQUALS_SIGN , Qt::Key_Equal);
355 insert(DIKS_GREATER_THAN_SIGN , Qt::Key_Greater);
356 insert(DIKS_QUESTION_MARK , Qt::Key_Question);
357 insert(DIKS_AT , Qt::Key_At);
358 insert(DIKS_CAPITAL_A , Qt::Key_A);
359 insert(DIKS_CAPITAL_B , Qt::Key_B);
360 insert(DIKS_CAPITAL_C , Qt::Key_C);
361 insert(DIKS_CAPITAL_D , Qt::Key_D);
362 insert(DIKS_CAPITAL_E , Qt::Key_E);
363 insert(DIKS_CAPITAL_F , Qt::Key_F);
364 insert(DIKS_CAPITAL_G , Qt::Key_G);
365 insert(DIKS_CAPITAL_H , Qt::Key_H);
366 insert(DIKS_CAPITAL_I , Qt::Key_I);
367 insert(DIKS_CAPITAL_J , Qt::Key_J);
368 insert(DIKS_CAPITAL_K , Qt::Key_K);
369 insert(DIKS_CAPITAL_L , Qt::Key_L);
370 insert(DIKS_CAPITAL_M , Qt::Key_M);
371 insert(DIKS_CAPITAL_N , Qt::Key_N);
372 insert(DIKS_CAPITAL_O , Qt::Key_O);
373 insert(DIKS_CAPITAL_P , Qt::Key_P);
374 insert(DIKS_CAPITAL_Q , Qt::Key_Q);
375 insert(DIKS_CAPITAL_R , Qt::Key_R);
376 insert(DIKS_CAPITAL_S , Qt::Key_S);
377 insert(DIKS_CAPITAL_T , Qt::Key_T);
378 insert(DIKS_CAPITAL_U , Qt::Key_U);
379 insert(DIKS_CAPITAL_V , Qt::Key_V);
380 insert(DIKS_CAPITAL_W , Qt::Key_W);
381 insert(DIKS_CAPITAL_X , Qt::Key_X);
382 insert(DIKS_CAPITAL_Y , Qt::Key_Y);
383 insert(DIKS_CAPITAL_Z , Qt::Key_Z);
384 insert(DIKS_SQUARE_BRACKET_LEFT , Qt::Key_BracketLeft);
385 insert(DIKS_BACKSLASH , Qt::Key_Backslash);
386 insert(DIKS_SQUARE_BRACKET_RIGHT , Qt::Key_BracketRight);
387 insert(DIKS_CIRCUMFLEX_ACCENT , Qt::Key_AsciiCircum);
388 insert(DIKS_UNDERSCORE , Qt::Key_Underscore);
389 insert(DIKS_SMALL_A , Qt::Key_A);
390 insert(DIKS_SMALL_B , Qt::Key_B);
391 insert(DIKS_SMALL_C , Qt::Key_C);
392 insert(DIKS_SMALL_D , Qt::Key_D);
393 insert(DIKS_SMALL_E , Qt::Key_E);
394 insert(DIKS_SMALL_F , Qt::Key_F);
395 insert(DIKS_SMALL_G , Qt::Key_G);
396 insert(DIKS_SMALL_H , Qt::Key_H);
397 insert(DIKS_SMALL_I , Qt::Key_I);
398 insert(DIKS_SMALL_J , Qt::Key_J);
399 insert(DIKS_SMALL_K , Qt::Key_K);
400 insert(DIKS_SMALL_L , Qt::Key_L);
401 insert(DIKS_SMALL_M , Qt::Key_M);
402 insert(DIKS_SMALL_N , Qt::Key_N);
403 insert(DIKS_SMALL_O , Qt::Key_O);
404 insert(DIKS_SMALL_P , Qt::Key_P);
405 insert(DIKS_SMALL_Q , Qt::Key_Q);
406 insert(DIKS_SMALL_R , Qt::Key_R);
407 insert(DIKS_SMALL_S , Qt::Key_S);
408 insert(DIKS_SMALL_T , Qt::Key_T);
409 insert(DIKS_SMALL_U , Qt::Key_U);
410 insert(DIKS_SMALL_V , Qt::Key_V);
411 insert(DIKS_SMALL_W , Qt::Key_W);
412 insert(DIKS_SMALL_X , Qt::Key_X);
413 insert(DIKS_SMALL_Y , Qt::Key_Y);
414 insert(DIKS_SMALL_Z , Qt::Key_Z);
415 insert(DIKS_CURLY_BRACKET_LEFT , Qt::Key_BraceLeft);
416 insert(DIKS_VERTICAL_BAR , Qt::Key_Bar);
417 insert(DIKS_CURLY_BRACKET_RIGHT , Qt::Key_BraceRight);
418 insert(DIKS_TILDE , Qt::Key_AsciiTilde);
419}
420
422{
423 return static_cast<QDirectFbScreen*>(window->screen()->handle());
424}
425
426IDirectFBDisplayLayer *toDfbLayer(QPlatformScreen *screen)
427{
428 return static_cast<QDirectFbScreen*>(screen)->dfbLayer();
429}
430
431QT_END_NAMESPACE
static QDirectFbKeyMap * keyMap()
IDirectFBDisplayLayer * toDfbLayer(QPlatformScreen *screen)
QDirectFbScreen * toDfbScreen(QWindow *window)