19682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include "dsa.h" 29682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include "sdlepocapi.h" 39682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <cdsb.h> 49682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 59682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallLOCAL_C TInt BytesPerPixel(TDisplayMode aMode) 69682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 79682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return ((TDisplayModeUtils::NumDisplayModeBitsPerPixel(aMode) - 1) >> 3) + 1; 89682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 99682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall//////////////////////////////////////////////////////////////////////////////////////////////// 129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CDsaA) : public CDsa 149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsaA(RWsSession& aSession); 179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ~CDsaA(); 199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* LockSurface(); 209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void UnlockHWSurfaceRequestComplete(); 219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void UnlockHwSurface(); 229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void CreateSurfaceL(); 239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Wipe(TInt aLength); 249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void RecreateL(); 259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Free(); 269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt ExternalUpdate() {return 0;} 279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitmap* iBmp; 299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsaA::CDsaA(RWsSession& aSession) : CDsa(aSession) 339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaA::Free() 379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iBmp; 399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp = NULL; 409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsaA::~CDsaA() 439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall __ASSERT_DEBUG(iBmp == NULL, PANIC(KErrNotReady)); 459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTUint8* CDsaA::LockSurface() 489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp->LockHeap(); 509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return reinterpret_cast<TUint8*>(iBmp->DataAddress()); 519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaA::UnlockHWSurfaceRequestComplete() 549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall PANIC(KErrNotSupported); 569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaA::UnlockHwSurface() 599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp->UnlockHeap(); 619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetUpdating(EFalse); 629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Dsa().Gc()->BitBlt(HwRect().iTl, iBmp); 639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Dsa().ScreenDevice()->Update(); 649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaA::CreateSurfaceL() 679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iBmp; 699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp = NULL; 709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp = new (ELeave) CFbsBitmap(); 719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall User::LeaveIfError(iBmp->Create(HwRect().Size(), DisplayMode())); 729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaA::Wipe(TInt aLength) //dont call in drawing 759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp->LockHeap(); 779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::FillZ(iBmp->DataAddress(), aLength); 789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBmp->UnlockHeap(); 799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaA::RecreateL() 829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(MDsbObs) 889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall virtual void SurfaceReady() = 0; 919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall virtual CDirectScreenBitmap& Dsb() = 0; 929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CDsbSurface) : public CActive 959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsbSurface(MDsbObs& aDsb); 989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* Address(); 999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Complete(); 1009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ~CDsbSurface(); 1019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 1029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void RunL(); 1039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void DoCancel(); 1049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 1059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall MDsbObs& iDsb; 1069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* iAddress; 1079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 1089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsbSurface::CDsbSurface(MDsbObs& aDsb) : CActive(CActive::EPriorityHigh) , iDsb(aDsb) 1109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CActiveScheduler::Add(this); 1129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsbSurface::~CDsbSurface() 1159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Cancel(); 1179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsbSurface::Complete() 1209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iAddress != NULL && !IsActive()) 1229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iAddress = NULL; 1249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetActive(); 1259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsb.Dsb().EndUpdate(iStatus); 1269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTUint8* CDsbSurface::Address() 1309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iAddress == NULL && !IsActive()) 1329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TAcceleratedBitmapInfo info; 1349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(KErrNone == iDsb.Dsb().BeginUpdate(info)) 1359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iAddress = info.iAddress; 1369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iAddress; 1389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsbSurface::RunL() 1419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsb.SurfaceReady(); 1439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsbSurface::DoCancel() 1469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall //empty 1489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CDsaB) : public CDsa, public MDsbObs 1519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 1539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsaB(RWsSession& aSession); 1549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 1559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ~CDsaB(); 1569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* LockSurface(); 1579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void UnlockHWSurfaceRequestComplete(); 1589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void UnlockHwSurface(); 1599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void CreateSurfaceL(); 1609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Wipe(TInt aLength); 1619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void RecreateL(); 1629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice); 1639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Free(); 1649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDirectScreenBitmap& Dsb(); 1659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void SurfaceReady(); 1669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt ExternalUpdate() {return 0;} 1679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 1689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsbSurface* iSurface1; 1699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsbSurface* iSurface2; 1709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDirectScreenBitmap* iDsb; 1719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 1729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsaB::CDsaB(RWsSession& aSession) : CDsa(aSession) 1749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::Free() 1789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::UnlockHWSurfaceRequestComplete() 1829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSurface1->Complete(); 1849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSurface2->Complete(); 1859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::CreateSurfaceL() 1889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::Wipe(TInt aLength) //dont call in drawing 1929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* addr = LockSurface(); 1949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(addr != NULL) 1959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::FillZ(addr, aLength); 1979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockHwSurface(); 1989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::UnlockHwSurface() 2029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall EpocSdlEnv::Request(CDsa::ERequestUpdate); 2049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTUint8* CDsaB::LockSurface() 2079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* addr = iSurface1->Address(); 2099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(addr == NULL) 2109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall addr = iSurface2->Address(); 2119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetUpdating(addr == NULL); 2129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return addr; 2139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::SurfaceReady() 2169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetUpdating(EFalse); 2189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDirectScreenBitmap& CDsaB::Dsb() 2219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return *iDsb; 2239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice) 2269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iDsb == NULL) 2289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsb = CDirectScreenBitmap::NewL(); 2299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDsa::ConstructL(aWindow, aDevice); 2309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSurface1 = new (ELeave) CDsbSurface(*this); 2319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSurface2 = new (ELeave) CDsbSurface(*this); 2329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsaB::~CDsaB() 2359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iSurface1; 2379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iSurface2; 2389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iDsb; 2399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsaB::RecreateL() 2429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsb->Close(); 2449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsb->Create(HwRect(), CDirectScreenBitmap::EDoubleBuffer); 2459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall///////////////////////////////////////////////////////////////////////////////////////////////////// 2489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTSize CDsa::WindowSize() const 2519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TSize size = HwRect().Size(); 2539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation90) 2549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt tmp = size.iWidth; 2569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall size.iWidth = size.iHeight; 2579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall size.iHeight = tmp; 2589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return size; 2609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::SetSuspend() 2639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= ESdlThreadSuspend; 2659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::ReleaseStop() 2689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~ESdlThreadExplicitStop; 2709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBool CDsa::Stopped() const 2749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return (iStateFlags & ESdlThreadExplicitStop); 2769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::SetOrientation(CSDL::TOrientationMode aOrientation) 2799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt flags = 0; 2819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall switch(aOrientation) 2829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case CSDL::EOrientation90: 2849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall flags = EOrientation90; 2859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 2869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case CSDL::EOrientation180: 2879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall flags = EOrientation180; 2889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 2899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case CSDL::EOrientation270: 2909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall flags = EOrientation90 | EOrientation180; 2919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 2929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case CSDL::EOrientation0: 2939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall flags = 0; 2949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 2959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(flags != (iStateFlags & EOrientationFlags)) 2979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= EOrientationChanged; 2999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iNewFlags = flags; //cannot be set during drawing... 3009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsa::~CDsa() 3049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iDsa != NULL) 3069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa->Cancel(); 3089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iDsa; 3109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall User::Free(iLut256); 3119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::ConstructL(RWindow& aWindow, CWsScreenDevice& aDevice) 3149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iDsa != NULL) 3169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa->Cancel(); 3189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iDsa; 3199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa = NULL; 3209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa = CDirectScreenAccess::NewL( 3249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSession, 3259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aDevice, 3269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aWindow, 3279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *this); 3289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iLut256 == NULL) 3309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iLut256 = (TUint32*) User::AllocL(256 * sizeof(TUint32)); 3319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetMode = aWindow.DisplayMode(); 3329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetBpp = BytesPerPixel(DisplayMode()); 3339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetRect = TRect(aWindow.Position(), aWindow.Size()); 3349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall RestartL(); 3359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::LockPalette(TBool aLock) 3389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aLock) 3409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= EPaletteLocked; 3419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 3429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~EPaletteLocked; 3439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CDsa::SetPalette(TInt aFirst, TInt aCount, TUint32* aPalette) 3459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iLut256 == NULL) 3479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNotFound; 3489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt count = aCount - aFirst; 3499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(count > 256) 3509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrArgument; 3519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EPaletteLocked) 3529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNone; 3539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt i = aFirst; i < count; i++) //not so busy here:-) 3549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iLut256[i] = aPalette[i]; 3569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNone; 3589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::RestartL() 3649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall //const TBool active = iDsa->IsActive(); 3669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall //if(!active) 3689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa->StartL(); 3699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall RRegion* r = iDsa->DrawingRegion(); 3719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa->Gc()->SetClippingRegion(r); 3729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRect rect = r->BoundingRect(); 3739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(rect.IsEmpty()) 3759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return; 3779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iScreenRect = rect; //to ensure properly set, albeit may not(?) match to value SDL has - therefore may has to clip 3809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall RecreateL(); 3829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= ERunning; 3849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// iScanLineWidth = iTargetBpp * HwRect().Width(); 3859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ReleaseStop(); 3869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & ESdlThreadSuspend) 3879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall EpocSdlEnv::Resume(); 3899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~ ESdlThreadSuspend; 3909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsa::CDsa(RWsSession& aSession) : 3949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSession(aSession), 3959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags(0) 3969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// CActiveScheduler::Add(this); 3989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[0] = CopyMem; 3999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[1] = CopyMemFlipReversed; 4009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[2] = CopyMemReversed; 4019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[3] = CopyMemFlip; 4029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[4] = Copy256; 4049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[5] = Copy256FlipReversed; 4059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[6] = Copy256Reversed; 4069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[7] = Copy256Flip; 4079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[8] = CopySlow; 4109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[9] = CopySlowFlipReversed; 4119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[10] = CopySlowReversed; 4129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCFTable[11] = CopySlowFlip; 4139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallRWsSession& CDsa::Session() 4169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iSession; 4189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTUint8* CDsa::LockHwSurface() 4239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if((iStateFlags & EUpdating) == 0) //else frame is skipped 4259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return LockSurface(); 4279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return NULL; 4299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* 4329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::RunL() 4339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~EUpdating; 4359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::DoCancel() 4399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~EUpdating; 4419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall //nothing can do, just wait? 4429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall*/ 4449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CDsa::AllocSurface(TBool aHwSurface, const TSize& aSize, TDisplayMode aMode) 4469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aHwSurface && aMode != DisplayMode()) 4489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrArgument; 4499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSourceMode = aMode; 4519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSourceBpp = BytesPerPixel(aMode); 4539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TSize size = WindowSize(); 4559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aSize.iWidth > size.iWidth) 4569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrTooBig; 4579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aSize.iHeight > size.iHeight) 4589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrTooBig; 4599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRAPD(err, CreateSurfaceL()); 4619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(err != KErrNone) 4629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return err; 4639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetCopyFunction(); 4669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall EpocSdlEnv::ObserverEvent(MSDLObserver::EEventWindowReserved); 4689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNone; 4709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* 4749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid SaveBmp(const TDesC& aName, const TAny* aData, TInt aLength, const TSize& aSz, TDisplayMode aMode) 4759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitmap* s = new CFbsBitmap(); 4779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->Create(aSz, aMode); 4789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->LockHeap(); 4799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* addr = s->DataAddress(); 4809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::Copy(addr, aData, aLength); 4819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->UnlockHeap(); 4829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->Save(aName); 4839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->Reset(); 4849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete s; 4859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid SaveBmp(const TDesC& aName, const TUint32* aData, const TSize& aSz) 4889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitmap* s = new CFbsBitmap(); 4909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->Create(aSz, EColor64K); 4919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBitmapUtil bmp(s); 4929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall bmp.Begin(TPoint(0, 0)); 4939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt j = 0; j < aSz.iHeight; j++) 4949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall bmp.SetPos(TPoint(0, j)); 4969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt i = 0; i < aSz.iWidth; i++) 4979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall bmp.SetPixel(*aData); 4999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aData++; 5009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall bmp.IncXPos(); 5019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall bmp.End(); 5049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->Save(aName); 5059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s->Reset(); 5069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete s; 5079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBuf<16> FooName(TInt aFoo) 5109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBuf<16> b; 5129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall b.Format(_L("C:\\pic%d.mbm"), aFoo); 5139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return b; 5149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall*/ 5169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::ClipCopy(TUint8* aTarget, const TUint8* aSource, const TRect& aRect, const TRect& aTargetPos) const 5179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* target = aTarget; 5199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint8* source = aSource; 5209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt lineWidth = aRect.Width(); 5219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall source += iSourceBpp * (aRect.iTl.iY * lineWidth); 5229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt sourceStartOffset = iSourceBpp * aRect.iTl.iX; 5239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall source += sourceStartOffset; 5249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall target += iTargetBpp * ((aTargetPos.iTl.iY + aRect.iTl.iY ) * lineWidth); 5259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt targetStartOffset = iTargetBpp * (aRect.iTl.iX + aTargetPos.iTl.iX); 5269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall target += targetStartOffset; 5279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* targetPtr = reinterpret_cast<TUint32*>(target); 5289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt targetWidth = HwRect().Size().iWidth; 5299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt height = aRect.Height(); 5309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt lineMove = iStateFlags & EOrientation90 ? 1 : lineWidth; 5329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation180) 5349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall targetPtr += targetWidth * (height - 1); 5379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt i = 0; i < height; i++) //source is always smaller 5399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCopyFunction(*this, targetPtr, source, lineWidth, height); 5419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall source += lineMove; 5429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall targetPtr -= targetWidth; 5439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 5469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt i = 0; i < height; i++) //source is always smaller 5509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCopyFunction(*this, targetPtr, source, lineWidth, height); 5529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall source += lineMove; 5539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall targetPtr += targetWidth; 5549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Wipe() //dont call in drawing 5639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(IsDsaAvailable()) 5659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Wipe(iTargetBpp * iScreenRect.Width() * iScreenRect.Height()); 5669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::SetCopyFunction() 5699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall //calculate offset to correct function in iCFTable according to given parameters 5719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt function = 0; 5729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt KCopyFunctions = 4; 5739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt KOffsetToNative = 0; 5749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt KOffsetTo256 = KOffsetToNative + KCopyFunctions; 5759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt KOffsetToOtherModes = KOffsetTo256 + KCopyFunctions; 5769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt KOffsetTo90Functions = 1; 5779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt KOffsetTo180Functions = 2; 5789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iSourceMode == DisplayMode()) 5809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall function = KOffsetToNative; //0 5819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else if(iSourceMode == EColor256) 5829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall function = KOffsetTo256; //4 5839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 5849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall function = KOffsetToOtherModes; //8 5859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation90) 5879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall function += KOffsetTo90Functions; // + 1 5889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation180) 5899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall function += KOffsetTo180Functions; //+ 2 5909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCopyFunction = iCFTable[function]; 5929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Wipe(); 5949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallinline void Rotate(TRect& aRect) 5979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt dx = aRect.iBr.iX - aRect.iTl.iX; 5999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt dy = aRect.iBr.iY - aRect.iTl.iY; 6009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aRect.iBr.iX = aRect.iTl.iX + dy; 6029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aRect.iBr.iY = aRect.iTl.iY + dx; 6039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt tmp = aRect.iTl.iX; 6059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aRect.iTl.iX = aRect.iTl.iY; 6069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aRect.iTl.iY = tmp; 6079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* 6109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallint bar = 0; 6119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall*/ 6129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBool CDsa::AddUpdateRect(const TUint8* aBits, const TRect& aUpdateRect, const TRect& aRect) 6139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientationChanged) 6169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~EOrientationFlags; 6189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= iNewFlags; 6199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetCopyFunction(); 6209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~EOrientationChanged; 6219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall EpocSdlEnv::WaitDeviceChange(); 6229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return EFalse; //skip this frame as data is may be changed 6239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iTargetAddr == NULL) 6269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetAddr = LockHwSurface(); 6289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint8* target = iTargetAddr; 6309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(target == NULL) 6319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return EFalse; 6329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRect targetRect = HwRect(); 6359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRect sourceRect = aRect; 6369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRect updateRect = aUpdateRect; 6379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation90) 6399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Rotate(sourceRect); 6419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Rotate(updateRect); 6429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iSourceMode != DisplayMode() || targetRect != sourceRect || targetRect != updateRect || ((iStateFlags & EOrientationFlags) != 0)) 6459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall sourceRect.Intersection(targetRect); //so source always smaller or equal than target 6479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall updateRect.Intersection(targetRect); 6489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ClipCopy(target, aBits, updateRect, sourceRect); 6499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 6519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt byteCount = aRect.Width() * aRect.Height() * iSourceBpp; //this could be stored 6539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::Copy(target, aBits, byteCount); 6549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return ETrue; 6579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCDsa* CDsa::CreateL(RWsSession& aSession) 6609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(EpocSdlEnv::Flags(CSDL::EDrawModeDSB)) 6629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt flags = CDirectScreenBitmap::ENone; 6649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(EpocSdlEnv::Flags(CSDL::EDrawModeDSBDoubleBuffer)) 6659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall flags |= CDirectScreenBitmap::EDoubleBuffer; 6669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(EpocSdlEnv::Flags(CSDL::EDrawModeDSBIncrentalUpdate)) 6679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall flags |= CDirectScreenBitmap::EIncrementalUpdate; 6689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (ELeave) CDsaB(aSession); 6699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 6719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (ELeave) CDsaA(aSession); 6729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CreateZoomerL(const TSize& aSize) 6759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSwSize = aSize; 6779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= EResizeRequest; 6789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CreateSurfaceL(); 6799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetTargetRect(); 6809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTPoint CDsa::WindowCoordinates(const TPoint& aPoint) const 6839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TPoint pos = aPoint - iScreenRect.iTl; 6859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TSize asz = iScreenRect.Size(); 6869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation180) 6879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iX = asz.iWidth - pos.iX; 6899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iY = asz.iHeight - pos.iY; 6909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EOrientation90) 6929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iX = aPoint.iY; 6949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iY = aPoint.iX; 6959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iX <<= 16; 6979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iY <<= 16; 6989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iX /= asz.iWidth; 6999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iY /= asz.iHeight; 7009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iX *= iSwSize.iWidth; 7019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iY *= iSwSize.iHeight; 7029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iX >>= 16; 7039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pos.iY >>= 16; 7049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return pos; 7059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::SetTargetRect() 7089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetRect = iScreenRect; 7109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStateFlags & EResizeRequest && EpocSdlEnv::Flags(CSDL::EAllowImageResizeKeepRatio)) 7119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TSize asz = iScreenRect.Size(); 7139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TSize sz = iSwSize; 7149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRect rect; 7169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt dh = (sz.iHeight << 16) / sz.iWidth; 7189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if((asz.iWidth * dh ) >> 16 <= asz.iHeight) 7209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall rect.SetRect(TPoint(0, 0), TSize(asz.iWidth, (asz.iWidth * dh) >> 16)); 7229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 7249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt dw = (sz.iWidth << 16) / sz.iHeight; 7269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall rect.SetRect(TPoint(0, 0), TSize((asz.iHeight * dw) >> 16, asz.iHeight)); 7279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall rect.Move((asz.iWidth - rect.Size().iWidth) >> 1, (asz.iHeight - rect.Size().iHeight) >> 1); 7299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetRect = rect; 7319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetRect.Move(iScreenRect.iTl); 7329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(!(iStateFlags & EResizeRequest)) 7359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSwSize = iScreenRect.Size(); 7369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// iScanLineWidth = /*iTargetBpp **/ SwSize().iWidth; 7379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::RecreateL() 7409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Free() 7449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::UpdateSwSurface() 7489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iTargetAddr = NULL; 7509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockHwSurface(); //could be faster if does not use AO, but only check status before redraw, then no context switch needed 7519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::SetBlitter(MBlitter* aBlitter) 7549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iBlitter = aBlitter; 7569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::DrawOverlays() 7599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt last = iOverlays.Count() - 1; 7619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt i = last; i >= 0 ; i--) 7629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iOverlays[i].iOverlay->Draw(*iDsa->Gc(), HwRect(), SwSize()); 7639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CDsa::AppendOverlay(MOverlay& aOverlay, TInt aPriority) 7669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt i; 7689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(i = 0; i < iOverlays.Count() && iOverlays[i].iPriority < aPriority; i++) 7699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall {} 7709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TOverlay overlay = {&aOverlay, aPriority}; 7719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iOverlays.Insert(overlay, i); 7729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CDsa::RemoveOverlay(MOverlay& aOverlay) 7759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall for(TInt i = 0; i < iOverlays.Count(); i++) 7779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iOverlays[i].iOverlay == &aOverlay) 7799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iOverlays.Remove(i); 7819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNone; 7829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNotFound; 7859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CDsa::RedrawRequest() 7889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(!(iStateFlags & (EUpdating) && (iStateFlags & ERunning))) 7909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return ExternalUpdate(); 7929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNotReady; 7949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Resume() 7989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(Stopped()) 8009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Restart(RDirectScreenAccess::ETerminateRegion); 8019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::DoStop() 8049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(IsDsaAvailable()) 8069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags |= ESdlThreadExplicitStop; 8079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Stop(); 8089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Stop() 8119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~ERunning; 8139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// Cancel(); //can be called only from main! 8149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iDsa->Cancel(); 8159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::AbortNow(RDirectScreenAccess::TTerminationReasons /*aReason*/) 8189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// iStateFlags |= EChangeNotify; 8209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Stop(); 8219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Restart(RDirectScreenAccess::TTerminationReasons aReason) 8249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aReason == RDirectScreenAccess::ETerminateRegion) //auto restart 8269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRAPD(err, RestartL()); 8289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall PANIC_IF_ERROR(err); 8299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/*) 8329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBool CDsa::ChangeTrigger() 8339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TBool change = iStateFlags & EChangeNotify; 8359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStateFlags &= ~EChangeNotify; 8369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return change; 8379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall*/ 8399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall///////////////////////////////////////////////////////////////////////////////////////////////////////////////// 8409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Copy256(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt) 8429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* target = aTarget; 8449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* endt = target + aBytes; 8459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint8* source = aSource; 8469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 8479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *target++ = aDsa.iLut256[*source++]; 8499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Copy256Reversed(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt) 8539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* target = aTarget; 8559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* endt = aTarget + aBytes; 8569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint8* source = aSource; 8579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 8589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *(--endt) = aDsa.iLut256[*source++]; 8609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Copy256Flip(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen) 8649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* target = aTarget; 8669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* endt = target + aBytes; 8679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint8* column = aSource; 8689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 8709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *target++ = aDsa.iLut256[*column]; 8729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall column += aLineLen; 8739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::Copy256FlipReversed(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen) 8779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* target = aTarget; 8799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* endt = aTarget + aBytes; 8809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint8* column = aSource; 8819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 8839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *(--endt) = aDsa.iLut256[*column]; 8859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall column += aLineLen; 8869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopyMem(const CDsa& /*aDsa*/, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt) 8909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::Copy(aTarget, aSource, aBytes); 8929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopyMemFlip(const CDsa& /*aDsa*/, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen) 8959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* target = aTarget; 8979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* endt = target + aBytes; 8989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* column = reinterpret_cast<const TUint32*>(aSource); 8999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 9019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *target++ = *column; 9039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall column += aLineLen; 9049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopyMemReversed(const CDsa& /*aDsa*/, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt) 9089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* target = aTarget; 9109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* endt = aTarget + aBytes; 9119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* source = reinterpret_cast<const TUint32*>(aSource); 9129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 9139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *(--endt) = *source++; 9159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopyMemFlipReversed(const CDsa& /*aDsa*/, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen) 9209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* target = aTarget; 9229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* endt = aTarget + aBytes; 9239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TUint32* column = reinterpret_cast<const TUint32*>(aSource); 9249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 9269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *(--endt) = *column; 9289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall column += aLineLen; 9299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef TRgb (*TRgbFunc) (TInt aValue); 9349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallLOCAL_C TRgb rgb16MA(TInt aValue) 9369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return TRgb::Color16MA(aValue); 9389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(MRgbCopy) 9419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 9439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall virtual void Copy(TUint32* aTarget, const TUint8* aSource, TInt aBytes, TBool aReversed) = 0; 9449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall virtual void FlipCopy(TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen, TBool aReversed) = 0; 9459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 9469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> 9479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(TRgbCopy) : public MRgbCopy 9489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 9509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRgbCopy(TDisplayMode aMode); 9519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void* operator new(TUint aBytes, TAny* aMem); 9529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Copy(TUint32* aTarget, const TUint8* aSource, TInt aBytes, TBool aReversed); 9539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void FlipCopy(TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen, TBool aReversed); 9549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 9559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRgbFunc iFunc; 9569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 9579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> 9599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid* TRgbCopy<T>::operator new(TUint /*aBytes*/, TAny* aMem) 9609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return aMem; 9629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> 9659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTRgbCopy<T>::TRgbCopy(TDisplayMode aMode) 9669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall switch(aMode) 9689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EGray256 : iFunc = TRgb::Gray256; break; 9709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EColor256 : iFunc = TRgb::Color256; break; 9719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EColor4K : iFunc = TRgb::Color4K; break; 9729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EColor64K : iFunc = TRgb::Color64K; break; 9739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EColor16M : iFunc = TRgb::Color16M; break; 9749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EColor16MU : iFunc = TRgb::Color16MU; break; 9759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EColor16MA : iFunc = rgb16MA; break; 9769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall default: 9779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall PANIC(KErrNotSupported); 9789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> 9829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TRgbCopy<T>::Copy(TUint32* aTarget, const TUint8* aSource, TInt aBytes, TBool aReversed) 9839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const T* source = reinterpret_cast<const T*>(aSource); 9859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* target = aTarget; 9869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* endt = target + aBytes; 9879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 9889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aReversed) 9899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 9919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32 value = *source++; 9939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *(--endt) = iFunc(value).Value(); 9949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 9969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 9979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 9989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 9999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32 value = *source++; 10019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *target++ = iFunc(value).Value(); 10029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltemplate <class T> 10079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TRgbCopy<T>::FlipCopy(TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen, TBool aReversed) 10089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const T* column = reinterpret_cast<const T*>(aSource); 10109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* target = aTarget; 10119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUint32* endt = target + aBytes; 10129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aReversed) 10149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 10169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *(--endt) = iFunc(*column).Value(); 10189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall column += aLineLen; 10199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 10229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(target < endt) 10249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *target++ = iFunc(*column).Value(); 10269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall column += aLineLen; 10279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef TUint64 TStackMem; 10339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallLOCAL_C MRgbCopy* GetCopy(TAny* mem, TDisplayMode aMode) 10359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aMode == EColor256 || aMode == EGray256) 10379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (mem) TRgbCopy<TUint8>(aMode); 10399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aMode == EColor4K || aMode == EColor64K) 10419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (mem) TRgbCopy<TUint16>(aMode); 10439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aMode == EColor16M || aMode == EColor16MU || aMode == EColor16MA) 10459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (mem) TRgbCopy<TUint32>(aMode); 10479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall PANIC(KErrNotSupported); 10499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return NULL; 10509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopySlowFlipReversed(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen) 10549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TStackMem mem = 0; 10569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall GetCopy(&mem, aDsa.iSourceMode)->FlipCopy(aTarget, aSource, aBytes, aLineLen, ETrue); 10579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopySlowFlip(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt aLineLen) 10609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TStackMem mem = 0; 10629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall GetCopy(&mem, aDsa.iSourceMode)->FlipCopy(aTarget, aSource, aBytes, aLineLen, EFalse); 10639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopySlow(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt) 10669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TStackMem mem = 0; 10689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall GetCopy(&mem, aDsa.iSourceMode)->Copy(aTarget, aSource, aBytes, EFalse); 10699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 10709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 10719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CDsa::CopySlowReversed(const CDsa& aDsa, TUint32* aTarget, const TUint8* aSource, TInt aBytes, TInt) 10729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 10739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TStackMem mem = 0; 10749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall GetCopy(&mem, aDsa.iSourceMode)->Copy(aTarget, aSource, aBytes, ETrue); 10759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }