Making new gfxscreen driver for my device.
-
I try to develop accelerated screen driver for Qt 4.6.2 embedded. I start from here: http://doc.qt.nokia.com/4.6.2/qt-embedded-accel.html and develop my own implementation of QLinuxFBScreen, because my device has framebuffer. I reimplement blit and solidFill functions of QScreen using my HW accelerated calls. But for blit function QImage placed outside video memory, so implementation of blitting was not so succesful because it just copied image from application memory to video memory.
In the next step I reimplement QWSWindowSurface, QCustomRasterPaintDevice and QRasterPaintEngine and setup new surface like this:QWSWindowSurface* QMyScreen::createSurface(const QString &key) const
{
if (key == QLatin1String("myscreen"))
{
qWarning("create new surface for key\n");
return new QMySurface();
}
return QScreen::createSurface(key);
}and
QWSWindowSurface* QMyScreen::createSurface(QWidget *widget) const
{
return new QMySurface(widget);
}Function: QMyPaintDevice::memory() return pointer to the framebuffer memory start.
I don't reimplement any functions of QRasterPaintEngine.
After that I found that my widget's windows is drawed without window frame (btw I use QWindowsStyle), but application "think" that window frame is present (reacts for touch events down). When I open another widget (QMessageBox etc.) it is drawed directly in the top left corner of display. So as I understand QRasterPaintEngine dont plot window frame and plot directly from the memory() pointer start.
After that I tried to use cache() function of QLinuxFBScreen to allocate video memory for QRasterPaintEngine but I dont have any idea how to copy regions which was painted by QRasterPaintEngine to screen, because QScreen::exposeRegion - does not called after painting or may be I missed something.
Thank you for patient. And finally - how can I copy correct data from QRasterPaintEngine buffer to screen and why QRasterPaintBuffer draws windows without frames.
Thank you.