23 Q_ASSERT(!m_dfbWindow.data());
25 DFBDisplayLayerConfig layerConfig;
26 IDirectFBDisplayLayer *layer;
28 layer = toDfbScreen(window())->dfbLayer();
29 layer->GetConfiguration(layer, &layerConfig);
31 DFBWindowDescription description;
32 memset(&description,0,
sizeof(DFBWindowDescription));
34 description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS
37 description.width = qMax(1, window()->width());
38 description.height = qMax(1, window()->height());
39 description.posx = window()->x();
40 description.posy = window()->y();
42 if (layerConfig.surface_caps & DSCAPS_PREMULTIPLIED)
43 description.surface_caps = DSCAPS_PREMULTIPLIED;
44 description.pixelformat = layerConfig.pixelformat;
46 description.options = DFBWindowOptions(DWOP_ALPHACHANNEL);
47 description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL);
50 DFBResult result = layer->CreateWindow(layer, &description, m_dfbWindow.outPtr());
52 DirectFBError(
"QDirectFbWindow: failed to create window", result);
54 m_dfbWindow->SetOpacity(m_dfbWindow.data(), 0xff);
55 m_inputHandler->addWindow(m_dfbWindow.data(), window());
80 int x = geometry().x();
81 int y = geometry().y();
82 m_dfbWindow->MoveTo(m_dfbWindow.data(), x, y);
84 QDirectFBPointer<IDirectFBDisplayLayer> displayLayer;
85 QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(), DLID_PRIMARY, displayLayer.outPtr());
87 DFBDisplayLayerConfig config;
88 displayLayer->GetConfiguration(displayLayer.data(), &config);
89 m_dfbWindow->MoveTo(m_dfbWindow.data(), config. width + 1, config.height + 1);
92 if (window()->isTopLevel() && visible)
93 QPlatformWindow::setVisible(visible);
98 switch (flags & Qt::WindowType_Mask) {
100 DFBWindowOptions options;
101 m_dfbWindow->GetOptions(m_dfbWindow.data(), &options);
102 options = DFBWindowOptions(options | DWOP_GHOST);
103 m_dfbWindow->SetOptions(m_dfbWindow.data(), options);
109 m_dfbWindow->SetStackingClass(m_dfbWindow.data(), flags & Qt::WindowStaysOnTopHint ? DWSC_UPPER : DWSC_MIDDLE);