Hello,
as mentioned before we used Direct Screen Access with Qt. About DSA itself more informations can be found for example here http://wiki.forum.nokia.com/index.ph...ctScreenBitmap , http://wiki.forum.nokia.com/index.ph...creen_directly or http://developer.symbian.com/main/do...een_access.pdf.
What about using DSA with Qt on s60, we created one single central QWidget for drawing contents:
Code:
class Window : public QWidget, public CActive, public MDirectScreenAccess
{
Q_OBJECT
//...
// from MDirectScreenAccess class
void Restart(RDirectScreenAccess::TTerminationReasons aReason);
void AbortNow(RDirectScreenAccess::TTerminationReasons aReason);
// from CActive
virtual void DoCancel();
virtual void RunL();
CDirectScreenAccess *iDSA;
CDirectScreenBitmap *iDSBitmap;
bool iDraw_dsa;
}
Implementation is very similar to examples that I gave before. Only (but very important) difference is implementation of starting DSA method:
Code:
void Window::startDSA(){
if(!iDSA){
iDSBitmap = CDirectScreenBitmap::NewL();
iDSA = CDirectScreenAccess::NewL(CEikonEnv::Static()->WsSession(),
*CEikonEnv::Static()->ScreenDevice(),
*winId()->DrawableWindow(),
*this);
CEikonEnv::Static()->WsSession().Flush();
iDSA->StartL();
CFbsBitGc *gc = iDSA->Gc();
RRegion *region = iDSA->DrawingRegion();
gc->SetClippingRegion(region);
User::LeaveIfError(iDSBitmap->Create(TRect(0, 0, iScreenWidth, iScreenHeight), CDirectScreenBitmap::EDoubleBuffer));
}
}
Solution was tested on device, works pretty good
.
Regards
Pawel