diff -r de3d5b6102ac -r 5e51caaeeb72 graphicsdeviceinterface/screendriver/sgeneric/scdraw.inl --- a/graphicsdeviceinterface/screendriver/sgeneric/scdraw.inl Tue Apr 27 17:59:32 2010 +0300 +++ b/graphicsdeviceinterface/screendriver/sgeneric/scdraw.inl Tue May 11 17:25:23 2010 +0300 @@ -175,10 +175,15 @@ } // Need to update size, scan line size, etc. + CGenericScreenDevice::SetSize(newSize); + + // Setting iScanLineWords MUST occur after the call to SetSize because SetSize itself + // sets iScanLineBytes to support offscreen bitmaps and may do so incorrectly for hardware devices + // as it just uses the width, whereas BytesPerScanline takes into account any extra bytes needed + // as defined by the hardware. CGenericScreenDevice::iScanLineWords = CGenericScreenDevice::iHelper.BytesPerScanline() / 4; //presumption here that BPS is always mod4. CGenericScreenDevice::iBits = (TUint32*)CGenericScreenDevice::iHelper.AddressFirstPixel(); __ASSERT_ALWAYS(CGenericScreenDevice::iScanLineWords && CGenericScreenDevice::iBits,Panic(EScreenDriverPanicInvalidHalValue)); - CGenericScreenDevice::SetSize(newSize); return ETrue; } @@ -216,10 +221,15 @@ } // Need to update size, scan line size, etc. + CGenericScreenDevice::SetSize(newSize); + + // Setting iScanLineWords MUST occur after the call to SetSize because SetSize itself + // sets iScanLineBytes to support offscreen bitmaps and may do so incorrectly for hardware devices + // as it just uses the width, whereas BytesPerScanline takes into account any extra bytes needed + // as defined by the hardware. CGenericScreenDevice::iScanLineWords = CGenericScreenDevice::iHelper.BytesPerScanline() / 4; //presumption here that BPS is always mod4. CGenericScreenDevice::iBits = (TUint32*)CGenericScreenDevice::iHelper.AddressFirstPixel(); __ASSERT_ALWAYS(CGenericScreenDevice::iScanLineWords && CGenericScreenDevice::iBits,Panic(EScreenDriverPanicInvalidHalValue)); - CGenericScreenDevice::SetSize(newSize); return ETrue; }