19682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include "dsa.h" 29682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include "sdlepocapi.h" 39682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <cdsb.h> 49682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 59682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 69682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallLOCAL_C TInt BytesPerPixel(TDisplayMode aMode) 79682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 89682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return ((TDisplayModeUtils::NumDisplayModeBitsPerPixel(aMode) - 1) >> 3) + 1; 99682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate<class T> 159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CBitmapSurface) : public T 169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallpublic: 189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CBitmapSurface(RWsSession& aSession); 199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallprivate: 209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice); 219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ~CBitmapSurface(); 229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* LockSurface(); 239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void UnlockHwSurface(); 249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void CreateSurfaceL(); 259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Wipe(TInt aLength); 269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Free(); 279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Update(CFbsBitmap& aBmp); 289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt ExternalUpdate(); 299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallprivate: 309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitmap* iBmp; 319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitmap* iCopyBmp; 329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate<class T> 369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CBitmapSurface<T>::ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice) 379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iCopyBmp; 399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCopyBmp = NULL; 409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCopyBmp = new (ELeave) CFbsBitmap(); 419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall T::ConstructL(aWindow, aDevice); 429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate<class T> 459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCBitmapSurface<T>::CBitmapSurface(RWsSession& aSession) : T(aSession) 469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate<class T> 509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CBitmapSurface<T>::Free() 519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iBmp; 539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp = NULL; 549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall T::Free(); 559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate<class T> 589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCBitmapSurface<T>::~CBitmapSurface() 599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall __ASSERT_DEBUG(iBmp == NULL, PANIC(KErrNotReady)); 619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iCopyBmp; 629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate<class T> 659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTUint8* CBitmapSurface<T>::LockSurface() 669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp->LockHeap(); 689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return reinterpret_cast<TUint8*>(iBmp->DataAddress()); 699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate<class T> 739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CBitmapSurface<T>::UnlockHwSurface() 749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp->UnlockHeap(); 769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall T::SetUpdating(EFalse); 779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Update(*iBmp); 789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate<class T> 829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CBitmapSurface<T>::Update(CFbsBitmap& aBmp) 839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(!T::Blitter(aBmp)) 859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(T::SwSize() == T::HwRect().Size()) 879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall T::Gc().BitBlt(T::HwRect().iTl, &aBmp); 889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall T::Gc().DrawBitmap(T::HwRect(), &aBmp); 909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall T::DrawOverlays(); 929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall T::CompleteUpdate(); 939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate<class T> 969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CBitmapSurface<T>::CreateSurfaceL() 979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Free(); 999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp = new (ELeave) CFbsBitmap(); 1009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall User::LeaveIfError(iBmp->Create(T::SwSize(), T::DisplayMode())); 1019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall T::CreateSurfaceL(*iBmp); 1029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate<class T> 1059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CBitmapSurface<T>::Wipe(TInt aLength) //dont call in drawing 1069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp->LockHeap(); 1089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::FillZ(iBmp->DataAddress(), aLength); 1099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp->UnlockHeap(); 1109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate<class T> 1139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CBitmapSurface<T>::ExternalUpdate() 1149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iCopyBmp->Handle() == 0) 1169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt err = iCopyBmp->Duplicate(iBmp->Handle()); 1189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(err != KErrNone) 1199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return err; 1209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Update(*iCopyBmp); 1229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNone; 1239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall////////////////////////////////////////////////////////////////////// 1279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CDsaBitgdi) : public CDsa 1319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallpublic: 1339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsaBitgdi(RWsSession& aSession); 1349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallprotected: 1359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice); 1369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CBitmapContext& Gc(); 1379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void CompleteUpdate(); 1389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ~CDsaBitgdi(); 1399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void CreateSurfaceL(CFbsBitmap& aBmp); 1409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Free(); 1419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void UnlockHWSurfaceRequestComplete(); 1429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallprivate: 1439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Resume(); 1449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitGc* iGc; 1469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsDevice* iDevice; 1479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitmap* iBitGdiBmp; 1489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CWindowGc* iWinGc; 1499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall RWindow* iWindow; 1509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt iHandle; 1519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 1529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsaBitgdi::CDsaBitgdi(RWsSession& aSession) : CDsa(aSession) 1559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsaBitgdi::~CDsaBitgdi() 1599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iWinGc; 1619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iBitGdiBmp; 1629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaBitgdi::CompleteUpdate() 1659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall EpocSdlEnv::Request(CDsa::ERequestUpdate); 1679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaBitgdi::UnlockHWSurfaceRequestComplete() 1719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iHandle == 0) 1739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return; 1749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iBitGdiBmp == NULL) 1769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBitGdiBmp = new CFbsBitmap(); 1789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iBitGdiBmp == NULL) 1799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return; 1809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBitGdiBmp->Duplicate(iHandle); 1819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iWindow->Invalidate(); 1849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iWindow->BeginRedraw(); 1869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iWinGc->Activate(*iWindow); 1879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iWinGc->BitBlt(TPoint(0, 0), iBitGdiBmp); 1889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iWinGc->Deactivate(); 1899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iWindow->EndRedraw(); 1909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaBitgdi::Resume() 1939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Start(); 1959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCBitmapContext& CDsaBitgdi::Gc() 1989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return *iGc; 2009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void CDsaBitgdi::ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice) 2039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iBitGdiBmp; 2069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBitGdiBmp = NULL; 2079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iWinGc; 2089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iWinGc = NULL; 2099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iHandle = 0; 2109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iWindow = &aWindow; 2129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall User::LeaveIfError(aDevice.CreateContext(iWinGc)); 2139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsa::ConstructL(aWindow, aDevice); 2149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Start(); 2159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaBitgdi::CreateSurfaceL(CFbsBitmap& aBmp) 2189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDevice = CFbsBitmapDevice::NewL(&aBmp); 2209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall User::LeaveIfError(iDevice->CreateContext(iGc)); 2219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iHandle = aBmp.Handle(); 2229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaBitgdi::Free() 2259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iGc; 2279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iGc = NULL; 2289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iDevice; 2299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDevice = NULL; 2309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall//////////////////////////////////////////////////////////////////////// 2339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/////////////////////////////////////////////////////////////////////// 2349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CDsaBase) : public CDsa, public MDirectScreenAccess 2369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallprotected: 2389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall inline CDirectScreenAccess& Dsa() const; 2399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsaBase(RWsSession& aSession); 2409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ~CDsaBase(); 2419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice); 2429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Stop(); 2439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Resume(); 2449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CBitmapContext& Gc(); 2459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallprotected: 2469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDirectScreenAccess* iDsa; 2479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallprivate: 2489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void AbortNow(RDirectScreenAccess::TTerminationReasons aReason); 2499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Restart(RDirectScreenAccess::TTerminationReasons aReason); 2509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallprivate: 2519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void RestartL(); 2529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 2539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallinline CDirectScreenAccess& CDsaBase::Dsa() const 2569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return *iDsa; 2589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsaBase::CDsaBase(RWsSession& aSession) : CDsa(aSession) 2629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCBitmapContext& CDsaBase::Gc() 2669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return *Dsa().Gc(); 2689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaBase::ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice) 2719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsa::ConstructL(aWindow, aDevice); 2739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iDsa != NULL) 2749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa->Cancel(); 2769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iDsa; 2779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa = NULL; 2789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa = CDirectScreenAccess::NewL( 2819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Session(), 2829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aDevice, 2839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aWindow, 2849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *this); 2859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall RestartL(); 2869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaBase::Resume() 2899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(Stopped()) 2919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Restart(RDirectScreenAccess::ETerminateRegion); 2929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsaBase::~CDsaBase() 2959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iDsa != NULL) 2979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa->Cancel(); 2999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iDsa; 3019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaBase::RestartL() 3059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa->StartL(); 3099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const RRegion* r = iDsa->DrawingRegion(); 3119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TRect rect = r->BoundingRect(); 3129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa->Gc()->SetClippingRegion(r); 3139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(rect != ScreenRect()) 3159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return ; 3179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetTargetRect(); 3219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall RecreateL(); 3229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Start(); 3249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaBase::AbortNow(RDirectScreenAccess::TTerminationReasons /*aReason*/) 3299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Stop(); 3319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaBase::Restart(RDirectScreenAccess::TTerminationReasons aReason) 3349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aReason == RDirectScreenAccess::ETerminateRegion) //auto restart 3369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRAPD(err, RestartL()); 3389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall PANIC_IF_ERROR(err); 3399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaBase::Stop() 3449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsa::Stop(); 3469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa->Cancel(); 3479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall /////////////////////////////////////////////////////////////////////// 3519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall /////////////////////////////////////////////////////////////////////// 3529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(TDsa) 3539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 3559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall inline TDsa(const CDsa& aDsa); 3569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall inline TBool IsFlip() const; 3579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall inline TBool IsTurn() const; 3589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall inline const TSize& SwSize() const; 3599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall inline void Copy(TUint32* aTarget, const TUint8* aSrc, TInt aBytes, TInt aHeight) const; 3609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 3619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const CDsa& iDsa; 3629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 3639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallinline TDsa::TDsa(const CDsa& aDsa) : iDsa(aDsa) 3689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallinline TBool TDsa::IsTurn() const 3729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iDsa.iStateFlags & CDsa::EOrientation90; 3749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallinline TBool TDsa::IsFlip() const 3779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iDsa.iStateFlags & CDsa::EOrientation180; 3799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallinline const TSize& TDsa::SwSize() const 3829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iDsa.SwSize(); 3849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallinline void TDsa::Copy(TUint32* aTarget, const TUint8* aSrc, TInt aBytes, TInt aHeight) const 3879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa.iCopyFunction(iDsa, aTarget, aSrc, aBytes, aHeight); 3899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate<class T, class S> 3929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ClipCopy(const TDsa& iDsa, TUint8* aTarget, 3939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint8* aSource, 3949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TRect& aUpdateRect, 3959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TRect& aSourceRect) 3969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const S* source = reinterpret_cast<const S*>(aSource); 3989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt lineWidth = aSourceRect.Width(); 3999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall source += (aUpdateRect.iTl.iY * lineWidth); 4019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt sourceStartOffset = aUpdateRect.iTl.iX; 4029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall source += sourceStartOffset; 4039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall T* targetPtr = reinterpret_cast<T*>(aTarget); 4059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt scanLineWidth = iDsa.SwSize().iWidth; 4079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall targetPtr += (aSourceRect.iTl.iY + aUpdateRect.iTl.iY ) * scanLineWidth; 4099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt targetStartOffset = (aUpdateRect.iTl.iX + aSourceRect.iTl.iX); 4109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall targetPtr += targetStartOffset; 4129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt height = aUpdateRect.Height(); 4159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt lineMove = iDsa.IsTurn() ? 1 : lineWidth; 4179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt copyLen = aUpdateRect.Width(); 4189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iDsa.IsFlip()) 4219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall targetPtr += scanLineWidth * (height - 1); 4249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt i = 0; i < height; i++) //source is always smaller 4269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa.Copy(reinterpret_cast<TUint32*>(targetPtr), reinterpret_cast<const TUint8*>(source), copyLen, height); 4289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall source += lineMove; 4299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall targetPtr -= scanLineWidth; 4309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 4339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt i = 0; i < height; i++) //source is always smaller 4379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa.Copy(reinterpret_cast<TUint32*>(targetPtr), reinterpret_cast<const TUint8*>(source), copyLen, height); 4399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall source += lineMove; 4409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall targetPtr += scanLineWidth; // >> 2; 4419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CDsaA) : public CDsaBase 4499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 4519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsaA(RWsSession& aSession); 4529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall protected: 4539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice); 4549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void CompleteUpdate(); 4559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void CreateSurfaceL(CFbsBitmap& aBmp); 4569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Free(); 4579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void UnlockHWSurfaceRequestComplete(); 4589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 4599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsaA::CDsaA(RWsSession& aSession) : CDsaBase(aSession) 4629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaA::ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice) 4679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsaBase::ConstructL(aWindow, aDevice); 4699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaA::CompleteUpdate() 4729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa->ScreenDevice()->Update(); 4749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaA::CreateSurfaceL(CFbsBitmap& /*aBmp*/) 4779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaA::Free() 4819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaA::UnlockHWSurfaceRequestComplete() 4869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall PANIC(KErrNotSupported); 4889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 4939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(MDsbObs) 4959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 4979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall virtual void SurfaceReady() = 0; 4989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall virtual CDirectScreenBitmap& Dsb() = 0; 4999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 5009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CDsbSurface) : public CActive 5029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 5049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsbSurface(MDsbObs& aDsb); 5059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* Address(); 5069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Complete(); 5079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ~CDsbSurface(); 5089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 5099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void RunL(); 5109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void DoCancel(); 5119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 5129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall MDsbObs& iDsb; 5139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* iAddress; 5149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 5159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsbSurface::CDsbSurface(MDsbObs& aDsb) : CActive(CActive::EPriorityHigh) , iDsb(aDsb) 5179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CActiveScheduler::Add(this); 5199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsbSurface::~CDsbSurface() 5229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Cancel(); 5249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsbSurface::Complete() 5279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iAddress != NULL && !IsActive()) 5299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iAddress = NULL; 5319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetActive(); 5329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsb.Dsb().EndUpdate(iStatus); 5339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTUint8* CDsbSurface::Address() 5379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iAddress == NULL && !IsActive()) 5399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TAcceleratedBitmapInfo info; 5419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(KErrNone == iDsb.Dsb().BeginUpdate(info)) 5429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iAddress = info.iAddress; 5439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iAddress; 5459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsbSurface::RunL() 5489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsb.SurfaceReady(); 5509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsbSurface::DoCancel() 5539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall //empty 5559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CDsaB) : public CDsaBase, 5589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public MDsbObs 5599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 5619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsaB(RWsSession& aSession, TInt aFlags); 5629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 5639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ~CDsaB(); 5649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* LockSurface(); 5659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void UnlockHWSurfaceRequestComplete(); 5669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void UnlockHwSurface(); 5679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void CreateSurfaceL(); 5689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Wipe(TInt aLength); 5699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void RecreateL(); 5709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice); 5719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDirectScreenBitmap& Dsb(); 5729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void SurfaceReady(); 5739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt ExternalUpdate(); 5749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 5759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsbSurface* iSurface1; 5769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsbSurface* iSurface2; 5779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDirectScreenBitmap* iDsb; 5789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt iType; 5799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 5809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsaB::CDsaB(RWsSession& aSession, TInt aFlags) : CDsaBase(aSession), iType(aFlags) 5829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::UnlockHWSurfaceRequestComplete() 5889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSurface1->Complete(); 5909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iSurface2 != NULL) 5919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSurface2->Complete(); 5929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::CreateSurfaceL() 5959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall __ASSERT_ALWAYS(SwSize() == HwRect().Size(), PANIC(KErrNotSupported)); 5979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::Wipe(TInt aLength) //dont call in drawing 6009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* addr = LockSurface(); 6029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(addr != NULL) 6039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::FillZ(addr, aLength); 6059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockHwSurface(); 6069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::UnlockHwSurface() 6119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall EpocSdlEnv::Request(CDsa::ERequestUpdate); 6139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTUint8* CDsaB::LockSurface() 6169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* addr = iSurface1->Address(); 6189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(addr == NULL && iSurface2 != NULL) 6199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall addr = iSurface2->Address(); 6209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetUpdating(addr == NULL); 6219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return addr; 6229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::SurfaceReady() 6259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetUpdating(EFalse); 6279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDirectScreenBitmap& CDsaB::Dsb() 6309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return *iDsb; 6329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice) 6359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iDsb == NULL) 6379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsb = CDirectScreenBitmap::NewL(); 6389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsaBase::ConstructL(aWindow, aDevice); 6399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iSurface1 == NULL) 6409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSurface1 = new (ELeave) CDsbSurface(*this); 6419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iSurface2 == NULL && iType & CDirectScreenBitmap::EDoubleBuffer) 6429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSurface2 = new (ELeave) CDsbSurface(*this); 6439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsaB::~CDsaB() 6469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iSurface1; 6489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iSurface2; 6499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iDsb; 6509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::RecreateL() 6539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsb->Close(); 6559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsb->Create(HwRect(), CDirectScreenBitmap::TSettingsFlags(iType)); 6569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CDsaB::ExternalUpdate() 6599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(LockSurface()) 6619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockHWSurfaceRequestComplete(); 6639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNone; 6649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNotReady; 6669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall///////////////////////////////////////////////////////////////////////////////////////////////////// 6709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsa* CDsa::CreateL(RWsSession& aSession) 6749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(EpocSdlEnv::Flags(CSDL::EDrawModeDSB)) 6769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt flags = CDirectScreenBitmap::ENone; 6789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(EpocSdlEnv::Flags(CSDL::EDrawModeDSBDoubleBuffer)) 6799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall flags |= CDirectScreenBitmap::EDoubleBuffer; 6809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(EpocSdlEnv::Flags(CSDL::EDrawModeDSBIncrementalUpdate)) 6819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall flags |= CDirectScreenBitmap::EIncrementalUpdate; 6829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (ELeave) CDsaB(aSession, flags); 6839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else if(EpocSdlEnv::Flags(CSDL::EDrawModeGdi)) 6859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (ELeave) CBitmapSurface<CDsaBitgdi>(aSession); 6879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 6899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (ELeave) CBitmapSurface<CDsaA>(aSession); 6919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::RecreateL() 6969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Free() 7009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTSize CDsa::WindowSize() const 7049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TSize size = iSwSize; 7069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation90) 7079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt tmp = size.iWidth; 7099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall size.iWidth = size.iHeight; 7109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall size.iHeight = tmp; 7119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return size; 7139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::SetSuspend() 7169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= ESdlThreadSuspend; 7189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::SetUpdating(TBool aUpdate) 7229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aUpdate) 7249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= EUpdating; 7259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 7269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~EUpdating; 7279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBool CDsa::Stopped() const 7319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return (iStateFlags & ESdlThreadExplicitStop); 7339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::SetOrientation(CSDL::TOrientationMode aOrientation) 7369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt flags = 0; 7389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall switch(aOrientation) 7399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case CSDL::EOrientation90: 7419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall flags = EOrientation90; 7429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case CSDL::EOrientation180: 7449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall flags = EOrientation180; 7459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case CSDL::EOrientation270: 7479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall flags = EOrientation90 | EOrientation180; 7489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case CSDL::EOrientation0: 7509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall flags = 0; 7519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(flags != (iStateFlags & EOrientationFlags)) 7549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= EOrientationChanged; 7569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iNewFlags = flags; //cannot be set during drawing... 7579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsa::~CDsa() 7619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iOverlays.Close(); 7639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall User::Free(iLut256); 7649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::ConstructL(RWindow& aWindow, CWsScreenDevice& /*aDevice*/) 7679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iLut256 == NULL) 7699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iLut256 = (TUint32*) User::AllocL(256 * sizeof(TUint32)); 7709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetMode = aWindow.DisplayMode(); 7719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetBpp = BytesPerPixel(DisplayMode()); 7729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iScreenRect = TRect(aWindow.Position(), aWindow.Size()); 7739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetTargetRect(); 7749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::DrawOverlays() 7779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt last = iOverlays.Count() - 1; 7799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt i = last; i >= 0 ; i--) 7809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iOverlays[i].iOverlay->Draw(Gc(), HwRect(), SwSize()); 7819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CDsa::AppendOverlay(MOverlay& aOverlay, TInt aPriority) 7849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt i; 7869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(i = 0; i < iOverlays.Count() && iOverlays[i].iPriority < aPriority; i++) 7879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall {} 7889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TOverlay overlay = {&aOverlay, aPriority}; 7899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iOverlays.Insert(overlay, i); 7909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CDsa::RemoveOverlay(MOverlay& aOverlay) 7939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt i = 0; i < iOverlays.Count(); i++) 7959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iOverlays[i].iOverlay == &aOverlay) 7979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iOverlays.Remove(i); 7999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNone; 8009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNotFound; 8039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::LockPalette(TBool aLock) 8069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aLock) 8089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= EPaletteLocked; 8099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 8109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~EPaletteLocked; 8119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CDsa::SetPalette(TInt aFirst, TInt aCount, TUint32* aPalette) 8139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iLut256 == NULL) 8159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNotFound; 8169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt count = aCount - aFirst; 8179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(count > 256) 8189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrArgument; 8199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EPaletteLocked) 8209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNone; 8219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt i = aFirst; i < count; i++) //not so busy here:-) 8229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iLut256[i] = aPalette[i]; 8249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNone; 8269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsa::CDsa(RWsSession& aSession) : 8339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags(0), 8349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSession(aSession) 8359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// CActiveScheduler::Add(this); 8389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[0] = CopyMem; 8399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[1] = CopyMemFlipReversed; 8409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[2] = CopyMemReversed; 8419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[3] = CopyMemFlip; 8429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[4] = Copy256; 8449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[5] = Copy256FlipReversed; 8459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[6] = Copy256Reversed; 8469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[7] = Copy256Flip; 8479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[8] = CopySlow; 8509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[9] = CopySlowFlipReversed; 8519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[10] = CopySlowReversed; 8529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[11] = CopySlowFlip; 8539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallRWsSession& CDsa::Session() 8569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iSession; 8589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CDsa::RedrawRequest() 8619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(!(iStateFlags & (EUpdating) && (iStateFlags & ERunning))) 8639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return ExternalUpdate(); 8659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNotReady; 8679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTUint8* CDsa::LockHwSurface() 8709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if((iStateFlags & EUpdating) == 0) //else frame is skipped 8729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return LockSurface(); 8749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return NULL; 8769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* 8799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::RunL() 8809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~EUpdating; 8829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::DoCancel() 8869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~EUpdating; 8889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall //nothing can do, just wait? 8899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall*/ 8919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CDsa::AllocSurface(TBool aHwSurface, const TSize& aSize, TDisplayMode aMode) 8949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aHwSurface && aMode != DisplayMode()) 8969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrArgument; 8979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSourceMode = aMode; 8999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSourceBpp = BytesPerPixel(aMode); 9019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TSize size = WindowSize(); 9039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aSize.iWidth > size.iWidth) 9049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrTooBig; 9059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aSize.iHeight > size.iHeight) 9069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrTooBig; 9079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRAPD(err, CreateSurfaceL()); 9099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(err != KErrNone) 9109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return err; 9119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetCopyFunction(); 9139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNone; 9159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CreateZoomerL(const TSize& aSize) 9199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSwSize = aSize; 9219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= EResizeRequest; 9229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CreateSurfaceL(); 9239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetTargetRect(); 9249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* 9289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid SaveBmp(const TDesC& aName, const TAny* aData, TInt aLength, const TSize& aSz, TDisplayMode aMode) 9299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitmap* s = new CFbsBitmap(); 9319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->Create(aSz, aMode); 9329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->LockHeap(); 9339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* addr = s->DataAddress(); 9349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::Copy(addr, aData, aLength); 9359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->UnlockHeap(); 9369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->Save(aName); 9379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->Reset(); 9389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete s; 9399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid SaveBmp(const TDesC& aName, const TUint32* aData, const TSize& aSz) 9429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitmap* s = new CFbsBitmap(); 9449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->Create(aSz, EColor64K); 9459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBitmapUtil bmp(s); 9469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall bmp.Begin(TPoint(0, 0)); 9479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt j = 0; j < aSz.iHeight; j++) 9489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall bmp.SetPos(TPoint(0, j)); 9509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt i = 0; i < aSz.iWidth; i++) 9519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall bmp.SetPixel(*aData); 9539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aData++; 9549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall bmp.IncXPos(); 9559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall bmp.End(); 9589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->Save(aName); 9599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->Reset(); 9609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete s; 9619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBuf<16> FooName(TInt aFoo) 9649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBuf<16> b; 9669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall b.Format(_L("C:\\pic%d.mbm"), aFoo); 9679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return b; 9689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall*/ 9719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::ClipCopy(TUint8* aTarget, 9749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint8* aSource, 9759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TRect& aUpdateRect, 9769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TRect& aSourceRect) const 9779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TDsa dsa(*this); 9799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall switch(iSourceBpp) 9809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case 1: 9829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ::ClipCopy<TUint32, TUint8>(dsa, aTarget, aSource, aUpdateRect, aSourceRect); 9839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 9849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case 2: 9859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ::ClipCopy<TUint32, TUint16>(dsa, aTarget, aSource, aUpdateRect, aSourceRect); 9869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 9879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case 4: 9889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ::ClipCopy<TUint32, TUint32>(dsa, aTarget, aSource, aUpdateRect, aSourceRect); 9899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 9909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Wipe() //dont call in drawing 9959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(IsDsaAvailable()) 9979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Wipe(iTargetBpp * SwSize().iWidth * SwSize().iHeight); 9989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::SetCopyFunction() 10019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall //calculate offset to correct function in iCFTable according to given parameters 10039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt function = 0; 10049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt KCopyFunctions = 4; 10059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt KOffsetToNative = 0; 10069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt KOffsetTo256 = KOffsetToNative + KCopyFunctions; 10079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt KOffsetToOtherModes = KOffsetTo256 + KCopyFunctions; 10089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt KOffsetTo90Functions = 1; 10099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt KOffsetTo180Functions = 2; 10109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iSourceMode == DisplayMode()) 10129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall function = KOffsetToNative; //0 10139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else if(iSourceMode == EColor256) 10149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall function = KOffsetTo256; //4 10159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 10169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall function = KOffsetToOtherModes; //8 10179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation90) 10199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall function += KOffsetTo90Functions; // + 1 10209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation180) 10219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall function += KOffsetTo180Functions; //+ 2 10229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCopyFunction = iCFTable[function]; 10249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Wipe(); 10269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallinline void Rotate(TRect& aRect) 10299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt dx = aRect.iBr.iX - aRect.iTl.iX; 10319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt dy = aRect.iBr.iY - aRect.iTl.iY; 10329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aRect.iBr.iX = aRect.iTl.iX + dy; 10349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aRect.iBr.iY = aRect.iTl.iY + dx; 10359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt tmp = aRect.iTl.iX; 10379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aRect.iTl.iX = aRect.iTl.iY; 10389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aRect.iTl.iY = tmp; 10399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* 10429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallint bar = 0; 10439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall*/ 10449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBool CDsa::AddUpdateRect(const TUint8* aBits, const TRect& aUpdateRect, const TRect& aRect) 10469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientationChanged) 10499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~EOrientationFlags; 10519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= iNewFlags; 10529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetCopyFunction(); 10539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~EOrientationChanged; 10549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall EpocSdlEnv::WaitDeviceChange(); 10559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return EFalse; //skip this frame as data is may be changed 10569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iTargetAddr == NULL) 10599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetAddr = LockHwSurface(); 10619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* target = iTargetAddr; 10649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(target == NULL) 10659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return EFalse; 10669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRect targetRect = TRect(TPoint(0, 0), SwSize()); 10699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRect sourceRect = aRect; 10719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRect updateRect = aUpdateRect; 10729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// TPoint move(0, 0); 10749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation90) 10779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Rotate(sourceRect); 10799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Rotate(updateRect); 10809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iSourceMode != DisplayMode() || targetRect != sourceRect || targetRect != updateRect || ((iStateFlags & EOrientationFlags) != 0)) 10839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall sourceRect.Intersection(targetRect); //so source always smaller or equal than target 10859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall //updateRect.Intersection(targetRect); 10869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ClipCopy(target, aBits, updateRect, sourceRect); 10879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 10899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt byteCount = aRect.Width() * aRect.Height() * iSourceBpp; //this could be stored 10919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::Copy(target, aBits, byteCount); 10929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return ETrue; 10959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::UpdateSwSurface() 10999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetAddr = NULL; 11019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockHwSurface(); //could be faster if does not use AO, but only check status before redraw, then no context switch needed 11029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::DoStop() 11089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(IsDsaAvailable()) 11109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= ESdlThreadExplicitStop; 11119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Stop(); 11129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Stop() 11169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~ERunning; 11189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Start() 11219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= ERunning; 11239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~ESdlThreadExplicitStop; 11259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & ESdlThreadSuspend) 11279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall EpocSdlEnv::Resume(); 11299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~ ESdlThreadSuspend; 11309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall EpocSdlEnv::ObserverEvent(MSDLObserver::EEventWindowReserved); 11329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBool CDsa::Blitter(CFbsBitmap& aBmp) 11369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iBlitter && iBlitter->BitBlt(Gc(), aBmp, HwRect(), SwSize()); 11389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::SetBlitter(MBlitter* aBlitter) 11419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBlitter = aBlitter; 11439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTPoint CDsa::WindowCoordinates(const TPoint& aPoint) const 11479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TPoint pos = aPoint - iScreenRect.iTl; 11499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TSize asz = iScreenRect.Size(); 11509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation180) 11519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iX = asz.iWidth - pos.iX; 11539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iY = asz.iHeight - pos.iY; 11549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation90) 11569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iX = aPoint.iY; 11589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iY = aPoint.iX; 11599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iX <<= 16; 11619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iY <<= 16; 11629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iX /= asz.iWidth; 11639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iY /= asz.iHeight; 11649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iX *= iSwSize.iWidth; 11659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iY *= iSwSize.iHeight; 11669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iX >>= 16; 11679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iY >>= 16; 11689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return pos; 11699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::SetTargetRect() 11729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetRect = iScreenRect; 11749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EResizeRequest && EpocSdlEnv::Flags(CSDL::EAllowImageResizeKeepRatio)) 11759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TSize asz = iScreenRect.Size(); 11779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TSize sz = iSwSize; 11789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRect rect; 11809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt dh = (sz.iHeight << 16) / sz.iWidth; 11829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if((asz.iWidth * dh ) >> 16 <= asz.iHeight) 11849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall rect.SetRect(TPoint(0, 0), TSize(asz.iWidth, (asz.iWidth * dh) >> 16)); 11869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 11889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 11899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt dw = (sz.iWidth << 16) / sz.iHeight; 11909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall rect.SetRect(TPoint(0, 0), TSize((asz.iHeight * dw) >> 16, asz.iHeight)); 11919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall rect.Move((asz.iWidth - rect.Size().iWidth) >> 1, (asz.iHeight - rect.Size().iHeight) >> 1); 11939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetRect = rect; 11959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetRect.Move(iScreenRect.iTl); 11969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 11979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 11989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(!(iStateFlags & EResizeRequest)) 11999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSwSize = iScreenRect.Size(); 12009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall///////////////////////////////////////////////////////////////////////////////////////////////////////////////// 12059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Copy256(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt) 12079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* target = aTarget; 12099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* endt = target + aBytes; 12109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint8* source = aSource; 12119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 12129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *target++ = aDsa.iLut256[*source++]; 12149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Copy256Reversed(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt) 12189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* target = aTarget; 12209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* endt = aTarget + aBytes; 12219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint8* source = aSource; 12229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 12239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *(--endt) = aDsa.iLut256[*source++]; 12259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Copy256Flip(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen) 12299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* target = aTarget; 12319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* endt = target + aBytes; 12329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint8* column = aSource; 12339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 12359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *target++ = aDsa.iLut256[*column]; 12379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall column += aLineLen; 12389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Copy256FlipReversed(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen) 12429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* target = aTarget; 12449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* endt = aTarget + aBytes; 12459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint8* column = aSource; 12469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 12489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *(--endt) = aDsa.iLut256[*column]; 12509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall column += aLineLen; 12519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopyMem(const CDsa& /*aDsa*/, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt) 12559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* src = reinterpret_cast<const TUint32*>(aSource); 12579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::Copy(aTarget, src, aBytes << 2); 12589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopyMemFlip(const CDsa& /*aDsa*/, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen) 12619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* target = aTarget; 12639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* endt = target + aBytes; 12649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* column = reinterpret_cast<const TUint32*>(aSource); 12659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 12679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *target++ = *column; 12699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall column += aLineLen; 12709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopyMemReversed(const CDsa& /*aDsa*/, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt) 12749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* target = aTarget; 12769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* endt = aTarget + aBytes; 12779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* source = reinterpret_cast<const TUint32*>(aSource); 12789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 12799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *(--endt) = *source++; 12819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopyMemFlipReversed(const CDsa& /*aDsa*/, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen) 12869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* target = aTarget; 12889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* endt = aTarget + aBytes; 12899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* column = reinterpret_cast<const TUint32*>(aSource); 12909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 12929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 12939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *(--endt) = *column; 12949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall column += aLineLen; 12959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 12979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 12989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* 12999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 13009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallLOCAL_C TRgb rgb16MA(TInt aValue) 13019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return TRgb::Color16MA(aValue); 13039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 13049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall*/ 13059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(MRgbCopy) 13069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 13089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall virtual void Copy(TUint32* aTarget, const TUint8* aSource, TInt aBytes, TBool aReversed) = 0; 13099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall virtual void FlipCopy(TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen, TBool aReversed) = 0; 13109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 13119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 13129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> 13139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(TRgbCopy) : public MRgbCopy 13149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 13169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRgbCopy(TDisplayMode aMode); 13179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void* operator new(TUint aBytes, TAny* aMem); 13189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Copy(TUint32* aTarget, const TUint8* aSource, TInt aBytes, TBool aReversed); 13199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void FlipCopy(TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen, TBool aReversed); 13209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall static TUint32 Gray256(const TUint8& aPixel); 13219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall static TUint32 Color256(const TUint8& aPixel); 13229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall static TUint32 Color4K(const TUint16& aPixel); 13239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall static TUint32 Color64K(const TUint16& aPixel); 13249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall static TUint32 Color16M(const TUint32& aPixel); 13259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall static TUint32 Color16MU(const TUint32& aPixel); 13269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall static TUint32 Color16MA(const TUint32& aPixel); 13279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 13289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall typedef TUint32 (*TRgbFunc) (const T& aValue); 13299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRgbFunc iFunc; 13309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 13319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 13329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 13339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> 13349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid* TRgbCopy<T>::operator new(TUint /*aBytes*/, TAny* aMem) 13359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return aMem; 13379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 13389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 13399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> 13409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTRgbCopy<T>::TRgbCopy(TDisplayMode aMode) 13419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall switch(aMode) 13439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EGray256 : iFunc = (TRgbFunc) Gray256; break; 13459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EColor256 : iFunc = (TRgbFunc) Color256; break; 13469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EColor4K : iFunc = (TRgbFunc) Color4K; break; 13479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EColor64K : iFunc = (TRgbFunc) Color64K; break; 13489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EColor16M : iFunc = (TRgbFunc) Color16M; break; 13499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EColor16MU : iFunc = (TRgbFunc) Color16MU; break; 13509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EColor16MA : iFunc = (TRgbFunc) Color16MA; break; 13519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall default: 13529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall PANIC(KErrNotSupported); 13539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 13549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 13559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 13569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> 13579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TRgbCopy<T>::Copy(TUint32* aTarget, const TUint8* aSource, TInt aBytes, TBool aReversed) 13589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const T* source = reinterpret_cast<const T*>(aSource); 13609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* target = aTarget; 13619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* endt = target + aBytes; 13629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 13639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aReversed) 13649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 13669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const T value = *source++; 13689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *(--endt) = iFunc(value);//iFunc(value).Value(); 13699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 13709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 13719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 13729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 13749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const T value = *source++; 13769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *target++ = iFunc(value);//iFunc(value).Value(); 13779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 13789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 13799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 13809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 13819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> 13829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TRgbCopy<T>::FlipCopy(TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen, TBool aReversed) 13839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const T* column = reinterpret_cast<const T*>(aSource); 13859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* target = aTarget; 13869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* endt = target + aBytes; 13879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 13889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aReversed) 13899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 13919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *(--endt) = iFunc(*column); 13939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall column += aLineLen; 13949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 13959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 13969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 13979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 13989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 13999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *target++ = iFunc(*column); 14019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall column += aLineLen; 14029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> TUint32 TRgbCopy<T>::Gray256(const TUint8& aPixel) 14079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32 px = aPixel << 16 | aPixel << 8 | aPixel; 14099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return px; 14109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> TUint32 TRgbCopy<T>::Color256(const TUint8& aPixel) 14139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return TRgb::Color256(aPixel).Value(); 14159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> TUint32 TRgbCopy<T>::Color4K(const TUint16& aPixel) 14189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32 col = (aPixel & 0xF00) << 12; 14209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall col |= (aPixel & 0xF00) << 8; 14219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall col |= (aPixel & 0x0F0) << 8; 14239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall col |= (aPixel & 0x0F0); 14249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall col |= (aPixel & 0x00F) << 4; 14269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall col |= (aPixel & 0x00F); 14279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return col; 14299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> TUint32 TRgbCopy<T>::Color64K(const TUint16& aPixel) 14329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32 col = (aPixel & 0xF800)<< 8; 14349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall col |= (aPixel & 0xE000) << 3; 14359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall col |= (aPixel & 0x07E0) << 5; 14379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall col |= (aPixel & 0xC0) >> 1; 14389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall col |= (aPixel & 0x07E0) << 3; 14409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall col |= (aPixel & 0x1C) >> 2; 14419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return col; 14439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> TUint32 TRgbCopy<T>::Color16M(const TUint32& aPixel) 14469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return TRgb::Color16M(aPixel).Value(); 14489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> TUint32 TRgbCopy<T>::Color16MU(const TUint32& aPixel) 14519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return TRgb::Color16MU(aPixel).Value(); 14539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> TUint32 TRgbCopy<T>::Color16MA(const TUint32& aPixel) 14569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return TRgb::Color16MA(aPixel).Value(); 14589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef TUint64 TStackMem; 14619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallLOCAL_C MRgbCopy* GetCopy(TAny* mem, TDisplayMode aMode) 14639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aMode == EColor256 || aMode == EGray256) 14659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (mem) TRgbCopy<TUint8>(aMode); 14679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aMode == EColor4K || aMode == EColor64K) 14699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (mem) TRgbCopy<TUint16>(aMode); 14719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aMode == EColor16M || aMode == EColor16MU || aMode == EColor16MA) 14739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (mem) TRgbCopy<TUint32>(aMode); 14759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall PANIC(KErrNotSupported); 14779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return NULL; 14789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopySlowFlipReversed(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen) 14829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TStackMem mem = 0; 14849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall GetCopy(&mem, aDsa.iSourceMode)->FlipCopy(aTarget, aSource, aBytes, aLineLen, ETrue); 14859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopySlowFlip(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen) 14889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TStackMem mem = 0; 14909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall GetCopy(&mem, aDsa.iSourceMode)->FlipCopy(aTarget, aSource, aBytes, aLineLen, EFalse); 14919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopySlow(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt) 14949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 14959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TStackMem mem = 0; 14969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall GetCopy(&mem, aDsa.iSourceMode)->Copy(aTarget, aSource, aBytes, EFalse); 14979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 14989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 14999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopySlowReversed(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt) 15009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 15019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TStackMem mem = 0; 15029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall GetCopy(&mem, aDsa.iSourceMode)->Copy(aTarget, aSource, aBytes, ETrue); 15039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 15049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 15059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall////////////////////////////////////////////////////////////////////////////////////////////////////////////////7 1506