diff options
author | Michael Meeks <michael.meeks@suse.com> | 2013-06-11 14:14:31 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2013-06-11 14:41:51 +0100 |
commit | eb5e3e3a4e82a55abfb1894dead6a1fb3c10bb41 (patch) | |
tree | 3fe265a73c98ebf6f8732eed99a5907a93cc8bcc /cppcanvas/qa/unit | |
parent | 02ee261150c350f85c55925d01ed342b8a1854c0 (diff) |
create a cairo canvas unit test, if only I could use the XCanvas API.
Change-Id: I3b0fdbe92db751e59ecb3f3b59f27e160b3ca226
Diffstat (limited to 'cppcanvas/qa/unit')
-rw-r--r-- | cppcanvas/qa/unit/test.cxx | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/cppcanvas/qa/unit/test.cxx b/cppcanvas/qa/unit/test.cxx new file mode 100644 index 000000000000..03d0e7368939 --- /dev/null +++ b/cppcanvas/qa/unit/test.cxx @@ -0,0 +1,92 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <test/bootstrapfixture.hxx> + +#include <osl/file.hxx> +#include <osl/process.h> +#include <vcl/svapp.hxx> +#include <vcl/wrkwin.hxx> +#include <vcl/canvastools.hxx> + +#include <comphelper/processfactory.hxx> +#include <com/sun/star/lang/XInitialization.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> + +#include <com/sun/star/rendering/XBitmap.hpp> +#include <com/sun/star/rendering/XCanvas.hpp> +#include <com/sun/star/rendering/XBitmapCanvas.hpp> + +using namespace ::com::sun::star; + +class CanvasTest : public test::BootstrapFixture +{ +public: + CanvasTest() : BootstrapFixture(true, false) {} + + void testComposite(); + + CPPUNIT_TEST_SUITE(CanvasTest); + CPPUNIT_TEST(testComposite); + CPPUNIT_TEST_SUITE_END(); +}; + +void CanvasTest::testComposite() +{ +#ifdef LINUX + Window* pWin = new WorkWindow( (Window *)NULL ); + CPPUNIT_ASSERT( pWin != NULL ); + + uno::Reference<rendering::XCanvas> xCanvas = pWin->GetCanvas (); + CPPUNIT_ASSERT( xCanvas.is() ); + + // a huge canvas ... + Size aSize (1, 1); + uno::Reference<rendering::XBitmap> xBitmap; + xBitmap = xCanvas->getDevice ()->createCompatibleAlphaBitmap( + vcl::unotools::integerSize2DFromSize( aSize ) ); + CPPUNIT_ASSERT( xBitmap.is() ); + + uno::Reference< rendering::XBitmapCanvas > xBitmapCanvas( xBitmap, uno::UNO_QUERY ); + CPPUNIT_ASSERT( xBitmapCanvas.is() ); + + BitmapEx aBitmapEx; + { + // clear the canvas and basic sanity check ... + xBitmapCanvas->clear(); + CPPUNIT_ASSERT( aBitmapEx.Create( xBitmapCanvas, aSize ) ); + CPPUNIT_ASSERT( aBitmapEx.IsAlpha() ); + CPPUNIT_ASSERT( aBitmapEx.GetAlpha() ); + } + + { + // render something + rendering::RenderState aDefaultState; + uno::Sequence< double > aRedTransparent( 4 ); + aRedTransparent[0] = 1.0; // R + aRedTransparent[1] = 0.0; // G + aRedTransparent[2] = 0.0; // B + aRedTransparent[3] = 0.5; // A + aDefaultState.DeviceColor = aRedTransparent; +#if 0 + // words fail me to describe the sheer beauty of allocating an UNO + // object to represent a polygon, and manually handling the ViewState + // and there being no public helper for this - to render ... a rectangle. + XCachedPrimitive fillPolyPolygon( [in] XPolyPolygon2D xPolyPolygon, [in] ViewState aViewState, [in] RenderState aRenderState ) +#endif + } + +#endif +} + +CPPUNIT_TEST_SUITE_REGISTRATION(CanvasTest); + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |