예제 #1
0
파일: testcanvas.cpp 프로젝트: rhcad/vglite
void TestCanvas::test(GiCanvas* canvas, int bits, int n, bool randStyle)
{
    s_randStyle = randStyle;
    if ((bits & 0x400) == 0 || !s_inited) {
        initRand();
    }
    
    if (bits & 0x01)
        testRect(canvas, n);
    if (bits & 0x02)
        testLine(canvas, n);
    if (bits & 0x04)
        testTextAt(canvas, n);
    if (bits & 0x08)
        testEllipse(canvas, n);
    if (bits & 0x10)
        testQuadBezier(canvas, n);
    if (bits & 0x20)
        testCubicBezier(canvas, n);
    if (bits & 0x40)
        testPolygon(canvas, n);
    if (bits & 0x80)
        canvas->clearRect(100, 100, 200, 200);
    if (bits & 0x100)
        testClipPath(canvas, n);
    if (bits & 0x200)
        testHandle(canvas, n);
    if (bits & 0x400)
        testDynCurves(canvas);
}
예제 #2
0
void TestCanvas::testClipPath(GiCanvas* canvas)
{
    for (int i = 0; i < 5; i++) {
        canvas->saveClip();
        canvas->clipRect(randFloat(10.f, 400.f), randFloat(10.f, 400.f),
                         randFloat(50.f, 200.f), randFloat(50.f, 200.f));
        testCubicBezier(canvas);
        canvas->restoreClip();
    }
    for (int j = 0; j < 5; j++) {
        canvas->saveClip();
        canvas->beginPath();
        
        float x = randFloat(200.f, 600.f);
        float y = randFloat(200.f, 600.f);
        canvas->moveTo(x, y);
        
        for (int j = randInt(1, 5); j > 0; j--) {
            canvas->lineTo(x += randFloat(-200.f, 200.f), y += randFloat(-200.f, 200.f));
        }
        canvas->closePath();
        canvas->clipPath();
        
        canvas->setPen(0x41000000 | randInt(0, 0xFFFFFF), -1.f, randInt(0, 4));
        canvas->setBrush(0x11000000 | randInt(0, 0xFFFFFF), 0);
        canvas->drawPath(true, true);
        
        canvas->restoreClip();
    }
}
예제 #3
0
void TestCanvas::test(GiCanvas* canvas, int bits, int n, bool randStyle)
{
    s_randStyle = randStyle;
    if ((bits & kDynCurves) == 0 || !s_inited) {
        initRand();
    }
    
    if (bits & kRect)
        testRect(canvas, n * 2);
    if (bits & kLine)
        testLine(canvas, n * 2);
    if (bits & kTextAt)
        testTextAt(canvas, n);
    if (bits & kEllipse)
        testEllipse(canvas, n * 2);
    if (bits & kQuadBezier)
        testQuadBezier(canvas, n);
    if (bits & kCubicBezier)
        testCubicBezier(canvas, n);
    if (bits & kPolygon)
        testPolygon(canvas, n);
    if (bits & kClearRect)
        canvas->clearRect(100, 100, 200, 200);
    if (bits & kClipPath)
        testClipPath(canvas, n);
    if (bits & kHandle)
        testHandle(canvas, n);
    if (bits & kDynCurves)
        testDynCurves(canvas);
}
예제 #4
0
파일: testcanvas.cpp 프로젝트: rhcad/vglite
void TestCanvas::testClipPath(GiCanvas* canvas, int n)
{
    for (int i = 0; i < 2; i++) {
        canvas->saveClip();
        if (canvas->clipRect(randFloat(100.f, 500.f), randFloat(100.f, 500.f),
                            randFloat(50.f, 200.f), randFloat(50.f, 200.f))) {
            testLine(canvas, n);
        }
        canvas->restoreClip();
    }
    
    canvas->saveClip();
    canvas->beginPath();
    
    for (int j = 0; j < 5; j++) {
        float x1 = randFloat(100.f, 400.f);
        float y1 = randFloat(100.f, 400.f);
        canvas->moveTo(x1, y1);
        
        for (int k = randInt(2, 4); k > 0; k--) {
            float x2 = x1 + randFloat(-150.f, 150.f);
            float y2 = y1 + randFloat(-150.f, 150.f);
            float x3 = x2 + randFloat(-150.f, 150.f);
            float y3 = y2 + randFloat(-150.f, 150.f);
            x1 = x3 + randFloat(-150.f, 150.f);
            y1 = y3 + randFloat(-150.f, 150.f);
            canvas->bezierTo(x2, y2, x3, y3, x1, y1);
        }
        canvas->closePath();
    }
    
    if (canvas->clipPath()) {
        if (s_randStyle) {
            canvas->setPen(0x41000000 | randInt(0, 0xFFFFFF), -1.f, -1, 0);
            canvas->setBrush(0x41000000 | randInt(0, 0xFFFFFF), 0);
        }
        canvas->drawRect(0, 0, 1000, 1000, true, true);
        testCubicBezier(canvas, n);
    }
    canvas->restoreClip();
}