Revise some of the compositor performance improvements to improve correctness.
Implement pixel blending using a variation of Jim Blinn's no-division blending algorithm.
Move transparency type simplification further up the composition code.
Remove some unnecessary fields.
Output to YUV implementation needs revision as it is actually converting from YUV (copy of source conversion code).
// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
//
/**
@file
@test
@internalComponent - Internal Symbian test code
*/
#ifndef __TGDI_H__
#define __TGDI_H__
#include <e32std.h>
#include <w32std.h>
#include "../tlib/testbase.h"
#include <bitstd.h>
#include "AUTO.H"
#include "TGraphicsHarness.h"
class CGdiTestLowLevel;
CGdiTestLowLevel *SetOriginTest();
CGdiTestLowLevel *PolyLineTest();
CGdiTestLowLevel *PolygonTest();
CGdiTestLowLevel *BlitMaskedTest();
CGdiTestLowLevel *DrawArcTest();
CGdiTestLowLevel *DrawPieTest();
CGdiTestLowLevel *DrawRoundRectTest();
CGdiTestLowLevel *BoxTextTest();
CGdiTestLowLevel *VertTextTest();
CGdiTestLowLevel *JustifiedTextTest();
CGdiTestLowLevel *VertBoxTextTest();
CGdiTestLowLevel *WideLineTest();
CGdiTestLowLevel *DrawTextTest();
CGdiTestLowLevel *DrawRectTest();
class CTGdi;
class CGdiTestLowLevel : public CBase
//
// BaseTest uses code that is assumed to be good to draw to one window
// TheTest uses the code beng tested to draw a matching pattern
//
{
public:
void AssignGdi(CWindowGc *aGc);
void SetGdiTest(CTGdi *aGdiTest);
virtual void PreTestSetupL(const TRect &aRect, TInt aCount);
virtual void BaseTest(const TRect &aRect, TInt aCount)=0;
virtual void TheTest(const TRect &aRect, TInt aCount)=0;
virtual void ConstructL(TInt aNumOfRects);
virtual TInt Count(TBool aMainTests)=0;
protected:
CWindowGc *iGdi;
CTGdi *iGdiTest;
};
class CGdiRect : public CGdiTestLowLevel
{
public:
void PreTestSetupL(const TRect &aRect, TInt aCount);
void ConstructL(TInt aNumOfRects);
TInt Count(TBool aMainTests);
protected:
TRgb iBrushCol;
TRgb iPenCol;
};
class CGdiDrawRect : public CGdiRect
{
public:
TInt Count(TBool aMainTests);
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
};
class CGdiDrawRoundRect : public CGdiRect
{
public:
TInt Count(TBool aMainTests);
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
};
class CGdiDrawACP : public CGdiTestLowLevel
{
public:
void PreTestSetupL(const TRect &aRect, TInt aCount);
void ConstructL(TInt aNumOfRects);
TInt Count(TBool aMainTests);
protected:
TRgb iBrushCol;
TRgb iPenCol;
};
class CGdiDrawArc : public CGdiDrawACP
{
public:
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
};
class CGdiDrawPie : public CGdiDrawACP
{
public:
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
};
class CGdiPolyLine : public CGdiTestLowLevel
{
public:
CGdiPolyLine();
void PreTestSetupL(const TRect &aRect, TInt aCount);
void ConstructL(TInt aNumOfRects);
TInt Count(TBool aMainTests);
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
private:
CArrayFixSeg<TPoint> iPnts;
};
class CGdiPolygon : public CGdiTestLowLevel
{
private:
enum {KMaxPolygonPoints=100};
enum {KPolygonStep=4};
public:
CGdiPolygon();
void PreTestSetupL(const TRect &aRect, TInt aCount);
void ConstructL(TInt aNumOfRects);
TInt Count(TBool aMainTests);
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
private:
CArrayFixSeg<TPoint> iPnts;
};
class CGdiWideLine : public CGdiTestLowLevel
{
private:
enum TMaxWidths {
EMainNumWidths=16,
EMinorNumWidths=4};
public:
void PreTestSetupL(const TRect &aRect, TInt aCount);
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
void ConstructL(TInt aNumOfRects);
TInt Count(TBool aMainTests);
private:
TInt iWidth;
};
class CGdiSetOrigin : public CGdiTestLowLevel
{
public:
~CGdiSetOrigin();
void PreTestSetupL(const TRect &aRect, TInt aCount);
void DrawIt(const TPoint &aOffset);
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
void ConstructL(TInt aNumOfRects);
TInt Count(TBool aMainTests);
private:
CFbsFont *iFont;
CArrayFixFlat<TPoint> *iPolylineArray;
CArrayFixFlat<TPoint> *iPolygonArray;
};
class CGdiDrawText : public CGdiTestLowLevel
{
public:
~CGdiDrawText();
void PreTestSetupL(const TRect &aRect, TInt aCount);
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
void ConstructL(TInt aNumOfRects);
TInt Count(TBool aMainTests);
private:
TInt iWidth;
CFbsFont *iFont;
TBuf<0x400> iBigBuffer;
};
class CGdiDrawVertText : public CGdiTestLowLevel
{
public:
~CGdiDrawVertText();
void PreTestSetupL(const TRect &aRect, TInt aCount);
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
void ConstructL(TInt aNumOfRects);
TInt Count(TBool aMainTests);
private:
TInt iWidth;
CFbsFont *iFont;
TBuf<0x400> iBigBuffer;
};
//class CGdiDrawJustifiedText : public CGdiTestLowLevel
//DEF107985 The test for JustifiedText has been removed as it was a bad/useless test
class CGdiBoxText : public CGdiTestLowLevel
{
public:
~CGdiBoxText();
void PreTestSetupL(const TRect &aRect, TInt aCount);
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
void ConstructL(TInt aNumOfRects);
TInt Count(TBool aMainTests);
private:
TInt iWidth;
TInt iBbLen;
CFbsFont *iFont;
TBuf<0x400> iBigBuffer;
};
class CGdiVertBoxText : public CGdiTestLowLevel
{
public:
~CGdiVertBoxText();
void PreTestSetupL(const TRect &aRect, TInt aCount);
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
void ConstructL(TInt aNumOfRects);
TInt Count(TBool aMainTests);
private:
TInt iWidth;
TInt iBbLen;
CFbsFont *iFont;
TBuf<0x400> iBigBuffer;
};
/*
class CGdiDottedLine : public CGdiTestLowLevel
{
enum TMaxPatterns {
EMainMaxPatterns=5,
EMinorMaxPatterns=3};
public:
void SetGridRegion(TRegion &grid,const TRect &aRect);
void PreTestSetupL(const TRect &aRect, TInt aCount);
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
void ConstructL(TInt aNumOfRects);
TInt Count(TBool aMainTests);
private:
TUint iPattern;
TInt iPattLen;
static TUint iPatterns[EMainMaxPatterns];
static TInt iPattLens[EMainMaxPatterns];
};
TUint CGdiDottedLine::iPatterns[]={
0x55FF0033,
0xFF00,
0x1,
0xFFFF,
0xF0F0F0};
TInt CGdiDottedLine::iPattLens[]={
32,
16,
2,
32,
24};
*/
class CTestWindow : public CBlankWindow
{
public:
CTestWindow(TRgb aCol);
~CTestWindow();
void ConstructL(TPoint aPos,TSize aSize,CTWinBase* aParent, CWindowGc& aGc );
};
class CGdiBlitMasked: public CGdiTestLowLevel
{
enum TNumMasks {ENumMasks=2};
public:
~CGdiBlitMasked();
void PreTestSetupL(const TRect &aRect, TInt aCount);
void BaseTest(const TRect &aRect, TInt aCount);
void TheTest(const TRect &aRect, TInt aCount);
void ConstructL(TInt aNumOfRects);
TInt Count(TBool aMainTests);
private:
void doCreateTestBitmapL(CFbsBitmap *aBitmap, CFbsBitGc *&aGc, CFbsBitmapDevice *&aDevice, const TSize &aSize);
void createTestBitmapL(CFbsBitmap *&aBitmap, const TSize &aSize);
private:
CFbsBitmap *iMask[ENumMasks];
CFbsBitmap *iBitmap;
//
CFbsBitmap *iScratch;
CFbsBitmapDevice *iScratchDevice;
CFbsBitGc *iScratchGc;
//
CFbsBitmap *iScratchMask;
CFbsBitmapDevice *iScratchMaskDevice;
CFbsBitGc *iScratchMaskGc;
//
TBool iInvertMask;
CFbsBitmap *iCurrMask;
CGraphicsContext::TDrawMode iDrawMode;
};
class CTGdi : public CTWsGraphicsBase
{
public:
CTGdi(CTestStep* aStep);
void ConstructL();
TSize WinSize();
void GdiTestL(CGdiTestLowLevel *aTest);
void TestDefetct_DEF045746L();
void DrawTextOnWindow(const TDesC& aText,CTWin* aWin);
protected:
//from CTGraphicsStep
virtual void RunTestCaseL(TInt aCurTestCase);
private:
void DoGdiTestL(const TRect &aRect, TInt aNum);
void NonDrawing();
private:
TSize iWinSize;
TInt iSubState;
CGdiTestLowLevel *iGdiTest;
CTestWindow* iWin;
CFont* iFont;
TInt iTextOffsetX;
TInt iTextOffsetY;
TBool iTestPassing;
};
class CTGdiStep : public CTGraphicsStep
{
public:
CTGdiStep();
protected:
//from CTGraphicsStep
virtual CTGraphicsBase* CreateTestL();
};
_LIT(KTGdiStep,"TGdi");
#endif