LCOV - code coverage report
Current view: top level - vcl/workben - outdevgrind.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 167 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 35 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <sal/main.h>
      21             : #include <tools/extendapplicationenvironment.hxx>
      22             : 
      23             : #include <cppuhelper/bootstrap.hxx>
      24             : #include <comphelper/processfactory.hxx>
      25             : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      26             : #include <com/sun/star/uno/XComponentContext.hpp>
      27             : 
      28             : #include <vcl/svapp.hxx>
      29             : #include <vcl/window.hxx>
      30             : #include <vcl/dialog.hxx>
      31             : #include <vcl/outdev.hxx>
      32             : #include <vcl/virdev.hxx>
      33             : #include <vcl/hatch.hxx>
      34             : #include <vcl/bitmap.hxx>
      35             : #include <vcl/wall.hxx>
      36             : #include <vcl/image.hxx>
      37             : #include <vcl/gdimtf.hxx>
      38             : #include <vcl/metaact.hxx>
      39             : #include <vcl/bitmapex.hxx>
      40             : #include <vcl/gradient.hxx>
      41             : #include <vcl/lineinfo.hxx>
      42             : 
      43             : #include <rtl/bootstrap.hxx>
      44             : 
      45             : #include <osl/time.h>
      46             : 
      47             : #include <boost/function.hpp>
      48             : #include <boost/bind.hpp>
      49             : 
      50             : #include <stdio.h>
      51             : 
      52             : using namespace ::com::sun::star;
      53             : 
      54             : namespace
      55             : {
      56             : 
      57           0 : class GrindApp : public Application
      58             : {
      59             : public:
      60             :     virtual int Main() SAL_OVERRIDE;
      61             :     virtual sal_uInt16 Exception( sal_uInt16 nError ) SAL_OVERRIDE;
      62             : };
      63             : 
      64           0 : class TestWindow : public Dialog
      65             : {
      66             :     public:
      67           0 :         TestWindow() : Dialog( nullptr )
      68             :         {
      69           0 :             SetText( OUString("OutDev grinding") );
      70           0 :             SetSizePixel( Size( 1024, 1024 ) );
      71           0 :             EnablePaint( true );
      72           0 :             Show();
      73           0 :         }
      74             : 
      75             :         virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle& rRect) SAL_OVERRIDE;
      76             : };
      77             : 
      78             : typedef boost::function1<void, OutputDevice*>   functor_type;
      79             : typedef std::vector< std::pair<const char*,
      80             :                                functor_type> >  functor_vector_type;
      81             : 
      82           0 : template< typename Functor > void add( functor_vector_type& res,
      83             :                                        const char*          pStr,
      84             :                                        const Functor&       func )
      85             : {
      86           0 :     res.push_back( std::make_pair(pStr,functor_type(func)) );
      87           0 : }
      88             : 
      89           0 : void setupMethodStubs( functor_vector_type& res )
      90             : {
      91           0 :     const Color aWhiteColor( COL_WHITE );
      92           0 :     const Color aBlackColor( COL_BLACK );
      93             : 
      94           0 :     const Point aPt1(10,10);
      95           0 :     const Point aPt2(500,500);
      96           0 :     const Point aPt3(0,0);
      97           0 :     const Point aPt4(450,450);
      98             : 
      99           0 :     const Rectangle   aRect(aPt1,aPt2);
     100           0 :     const Rectangle   aRect2(aPt3,aPt4);
     101           0 :     const Polygon     aPoly(aRect);
     102           0 :     const Polygon     aPoly2(aRect2);
     103           0 :     tools::PolyPolygon       aPolyPoly(aPoly);
     104           0 :     aPolyPoly.Insert( aPoly2 );
     105           0 :     Polygon           aPoly3(aPoly2);
     106           0 :     aPoly3.Rotate( aPoly3.GetBoundRect().Center(),
     107           0 :                    900 );
     108             : 
     109           0 :     const LineInfo    aLineInfo(LINE_SOLID,5);
     110             : 
     111             : #ifdef FIXME_VDEV
     112             :     const OUString    aString("This is a test");
     113             : 
     114             :     // unfortunately, VDevs have inaccessible copy constructors
     115             :     static VirtualDevice aVDev;
     116             :     static VirtualDevice aVDevBW(1);
     117             : 
     118             :     const Size aVDevSize;
     119             :     aVDev.SetOutputSizePixel(aVDevSize);
     120             :     aVDevBW.SetOutputSizePixel(aVDevSize);
     121             : 
     122             :     const Bitmap      aBitmap( aVDev.GetBitmap(aPt1,aVDevSize) );
     123             :     const Bitmap      aBitmapBW( aVDevBW.GetBitmap(aPt1,aVDevSize) );
     124             :     const Bitmap      aBitmapAlien( aVDevSize, 8 );
     125             : #else
     126           0 :     BitmapEx aIntro;
     127           0 :     rtl::Bootstrap::set("BRAND_BASE_DIR", ".");
     128           0 :     if (Application::LoadBrandBitmap ("intro", aIntro))
     129           0 :         Application::Abort( "Failed to load intro image, run inside program/" );
     130             : 
     131           0 :     const Bitmap      aBitmap( aIntro.GetBitmap() );
     132           0 :     Bitmap            aBitmapBW( aBitmap );
     133           0 :     aBitmapBW.Filter( BMP_FILTER_EMBOSS_GREY );
     134           0 :     Bitmap      aBitmapAlien( Size( 100, 100 ), 8 );
     135           0 :     aBitmapAlien.Erase( COL_RED );
     136             : #endif
     137             : 
     138           0 :     const BitmapEx    aBitmapEx( aBitmap, aBitmapBW );
     139           0 :     const BitmapEx    aBitmapExBW( aBitmapBW, aBitmapBW );
     140           0 :     const BitmapEx    aBitmapExAlien( aBitmapAlien, aBitmapBW );
     141           0 :     const BitmapEx    aBitmapExAlpha( aBitmap, aBitmapAlien );
     142           0 :     const BitmapEx    aBitmapExAlphaAlien( aBitmapAlien, aBitmapAlien );
     143             : 
     144           0 :     const Image       aImage( aBitmapEx );
     145           0 :     const Gradient    aGradient(GradientStyle_ELLIPTICAL,aBlackColor,aWhiteColor);
     146           0 :     const Hatch       aHatch(HatchStyle_TRIPLE,aBlackColor,4,450);
     147           0 :     const Wallpaper   aWallpaper( aWhiteColor );
     148             : 
     149           0 :     GDIMetaFile       aMtf;
     150           0 :     aMtf.AddAction( new MetaFillColorAction(Color(COL_RED),true) );
     151           0 :     aMtf.AddAction( new MetaRectAction(aRect) );
     152             : 
     153             : #ifdef FIXME_NEEDS_LOVE
     154             :     add(res,
     155             :         "DrawTextArray",
     156             :         boost::bind(
     157             :             &OutputDevice::DrawTextArray,
     158             :             _1,
     159             :             aPt1, aString, (const sal_Int32*)0, (sal_uInt16)0, aString.getLength() ));
     160             : #endif
     161             : 
     162             :     /* void DrawPixel( const Point& rPt, const Color& rColor ); */
     163             :     add(res,
     164             :         "DrawPixel",
     165             :         boost::bind(
     166             :             (void (OutputDevice::*)( const Point&, const Color& ))(
     167             :                 &OutputDevice::DrawPixel),
     168             :             _1,
     169           0 :             aPt1, aBlackColor ));
     170             : 
     171             :     /* void DrawLine( const Point& rStartPt, const Point& rEndPt ); */
     172             :     add(res,
     173             :         "DrawLine",
     174             :         boost::bind(
     175             :             (void (OutputDevice::*)( const Point&, const Point& ))(
     176             :                 &OutputDevice::DrawLine),
     177             :             _1,
     178           0 :             aPt1, aPt2 ));
     179             : 
     180             :     /* void DrawLine( const Point& rStartPt, const Point& rEndPt,
     181             :                                   const LineInfo& rLineInfo );
     182             :     */
     183             :     add(res,
     184             :         "DrawLine(LineInfo)",
     185             :         boost::bind(
     186             :             (void (OutputDevice::*)( const Point&, const Point&,const LineInfo& ))(
     187             :                 &OutputDevice::DrawLine),
     188             :             _1,
     189           0 :             aPt1, aPt2, aLineInfo ));
     190             : 
     191             :     /* void DrawPolyLine( const Polygon& rPoly ); */
     192             :     add(res,
     193             :         "DrawPolyLine",
     194             :         boost::bind(
     195             :             (void (OutputDevice::*)( const Polygon& ))(
     196             :                 &OutputDevice::DrawPolyLine),
     197             :             _1,
     198           0 :             aPoly ));
     199             : 
     200             :     /* void DrawPolyLine( const Polygon& rPoly,
     201             :                                       const LineInfo& rLineInfo );
     202             :     */
     203             :     add(res,
     204             :         "DrawPolyLine(LineInfo)",
     205             :         boost::bind(
     206             :             (void (OutputDevice::*)( const Polygon&, const LineInfo& ))(
     207             :                 &OutputDevice::DrawPolyLine),
     208             :             _1,
     209           0 :             aPoly, aLineInfo ));
     210             : 
     211             :     /* void DrawPolygon( const Polygon& rPoly ); */
     212             :     add(res,
     213             :         "DrawPolygon",
     214             :         boost::bind(
     215             :             (void (OutputDevice::*)( const Polygon& ))
     216             :                 &OutputDevice::DrawPolygon,
     217             :             _1,
     218           0 :             aPoly ));
     219             : 
     220             :     /* void DrawPolyPolygon( const tools::PolyPolygon& rPolyPoly ); */
     221             :     add(res,
     222             :         "DrawPolyPolygon",
     223             :         boost::bind(
     224             :             (void (OutputDevice::*)( const tools::PolyPolygon& ))
     225             :                 &OutputDevice::DrawPolyPolygon,
     226             :             _1,
     227           0 :             aPolyPoly ));
     228             : 
     229             :     /* void DrawRect( const Rectangle& rRect ); */
     230             :     add(res,
     231             :         "DrawRect",
     232             :         boost::bind(
     233             :             (void (OutputDevice::*)( const Rectangle& ))(
     234             :                 &OutputDevice::DrawRect),
     235             :             _1,
     236           0 :             aRect ));
     237             : 
     238             :     /* void DrawRect( const Rectangle& rRect,
     239             :                                   sal_uLong nHorzRount, sal_uLong nVertRound );
     240             :     */
     241             :     add(res,
     242             :         "DrawRect(round corners)",
     243             :         boost::bind(
     244             :             (void (OutputDevice::*)( const Rectangle&, sal_uLong nHorzRount, sal_uLong nVertRound ))(
     245             :                 &OutputDevice::DrawRect),
     246             :             _1,
     247             :             aRect2,
     248           0 :             4,4));
     249             : 
     250             :     /* void DrawEllipse( const Rectangle& rRect ); */
     251             :     add(res,
     252             :         "DrawEllipse",
     253             :         boost::bind(
     254             :             &OutputDevice::DrawEllipse,
     255             :             _1,
     256           0 :             aRect ));
     257             : 
     258             :     /* void DrawArc( const Rectangle& rRect,
     259             :                                  const Point& rStartPt, const Point& rEndPt );
     260             :     */
     261             :     add(res,
     262             :         "DrawArc",
     263             :         boost::bind(
     264             :             &OutputDevice::DrawArc,
     265             :             _1,
     266           0 :             aRect,aPt1,aPt2 ));
     267             : 
     268             :     /* void DrawPie( const Rectangle& rRect,
     269             :                                  const Point& rStartPt, const Point& rEndPt );
     270             :     */
     271             :     add(res,
     272             :         "DrawPie",
     273             :         boost::bind(
     274             :             &OutputDevice::DrawPie,
     275             :             _1,
     276           0 :             aRect2,aPt3,aPt4 ));
     277             : 
     278             :     /* void DrawChord( const Rectangle& rRect,
     279             :                                    const Point& rStartPt, const Point& rEndPt );
     280             :     */
     281             :     add(res,
     282             :         "DrawChord",
     283             :         boost::bind(
     284             :             &OutputDevice::DrawChord,
     285             :             _1,
     286           0 :             aRect2,aPt3,aPt4 ));
     287             : 
     288             :     /* void DrawOutDev( const Point& rDestPt, const Size& rDestSize,
     289             :                                     const Point& rSrcPt,  const Size& rSrcSize );
     290             :     */
     291             :     add(res,
     292             :         "DrawOutDev",
     293             :         boost::bind(
     294             :             (void (OutputDevice::*)( const Point&, const Size&,
     295             :                                      const Point&, const Size& ))(
     296             :                 &OutputDevice::DrawOutDev),
     297             :             _1,
     298             :             aRect2.TopLeft(), aRect2.GetSize(),
     299           0 :             aRect.TopLeft(),  aRect.GetSize()));
     300             : 
     301             : #ifdef FIXME_VDEV
     302             :     /* void DrawOutDev( const Point& rDestPt, const Size& rDestSize,
     303             :                                     const Point& rSrcPt,  const Size& rSrcSize,
     304             :                                     const OutputDevice& rOutDev );
     305             :     */
     306             :     add(res,
     307             :         "DrawOutDev(foreign source)",
     308             :         boost::bind(
     309             :             (void (OutputDevice::*)( const Point&, const Size&,
     310             :                                      const Point&, const Size&,
     311             :                                      const OutputDevice& ))(
     312             :                 &OutputDevice::DrawOutDev),
     313             :             _1,
     314             :             aRect2.TopLeft(), aRect2.GetSize(),
     315             :             aRect.TopLeft(),  aRect.GetSize(),
     316             :             boost::cref(aVDevBW) ));
     317             : 
     318             :     /* void DrawOutDev( const Point& rDestPt, const Size& rDestSize,
     319             :                                     const Point& rSrcPt,  const Size& rSrcSize,
     320             :                                     const OutputDevice& rOutDev );
     321             :     */
     322             :     add(res,
     323             :         "DrawOutDev(foreign source, scaled)",
     324             :         boost::bind(
     325             :             (void (OutputDevice::*)( const Point&, const Size&,
     326             :                                      const Point&, const Size&,
     327             :                                      const OutputDevice& ))(
     328             :                 &OutputDevice::DrawOutDev),
     329             :             _1,
     330             :             aRect2.TopLeft(), aRect2.GetSize(),
     331             :             aRect.TopLeft(),  aRect.GetSize(),
     332             :             boost::cref(aVDev) ));
     333             : #endif
     334             : 
     335             :     /* void CopyArea( const Point& rDestPt,
     336             :                                   const Point& rSrcPt,  const Size& rSrcSize,
     337             :                                   sal_uInt16 nFlags = 0 );
     338             :     */
     339             :     add(res,
     340             :         "CopyArea",
     341             :         boost::bind(
     342             :             &OutputDevice::CopyArea,
     343             :             _1,
     344           0 :             aPt1, aPt3, aRect2.GetSize(), false ));
     345             : 
     346             : #ifdef NEEDS_QUALIY_PARAMTER
     347             :     /* void DrawBitmap( const Point& rDestPt,
     348             :                                     const Bitmap& rBitmap );
     349             :     */
     350             :     add(res,
     351             :         "DrawBitmap(alien source)",
     352             :         boost::bind(
     353             :             (void (OutputDevice::*)( const Point&,
     354             :                                      const Bitmap& ))(
     355             :                 &OutputDevice::DrawBitmap),
     356             :             _1,
     357             :             aPt1,aBitmapAlien ));
     358             : 
     359             :     /* void DrawBitmap( const Point& rDestPt,
     360             :                                     const Bitmap& rBitmap );
     361             :     */
     362             :     add(res,
     363             :         "DrawBitmap",
     364             :         boost::bind(
     365             :             (void (OutputDevice::*)( const Point&,
     366             :                                      const Bitmap& ))(
     367             :                 &OutputDevice::DrawBitmap),
     368             :             _1,
     369             :             aPt1,aBitmap ));
     370             : 
     371             :     /* void DrawBitmap( const Point& rDestPt, const Size& rDestSize,
     372             :                                     const Bitmap& rBitmap );
     373             :     */
     374             :     add(res,
     375             :         "DrawBitmap(scaled,alien source)",
     376             :         boost::bind(
     377             :             (void (OutputDevice::*)( const Point&,
     378             :                                      const Size&,
     379             :                                      const Bitmap& ))(
     380             :                 &OutputDevice::DrawBitmap),
     381             :             _1,
     382             :             aPt1,aRect.GetSize(),aBitmapAlien ));
     383             : 
     384             :     /* void DrawBitmap( const Point& rDestPt, const Size& rDestSize,
     385             :                                     const Bitmap& rBitmap );
     386             :     */
     387             :     add(res,
     388             :         "DrawBitmap(scaled)",
     389             :         boost::bind(
     390             :             (void (OutputDevice::*)( const Point&,
     391             :                                      const Size&,
     392             :                                      const Bitmap& ))(
     393             :                 &OutputDevice::DrawBitmap),
     394             :             _1,
     395             :             aPt1,aRect.GetSize(),aBitmap ));
     396             : 
     397             : #if 0
     398             :     /* void DrawBitmap( const Point& rDestPt, const Size& rDestSize,
     399             :                                     const Point& rSrcPtPixel, const Size& rSrcSizePixel,
     400             :                                     const Bitmap& rBitmap );
     401             :     */
     402             :     add(res,
     403             :         "DrawBitmap(scaled subset,alien source)",
     404             :         boost::bind(
     405             :             (void (OutputDevice::*)( const Point&,
     406             :                                      const Size&,
     407             :                                      const Point&,
     408             :                                      const Size&,
     409             :                                      const Bitmap& ))(
     410             :                 &OutputDevice::DrawBitmap),
     411             :             _1,
     412             :             aPt1,aRect.GetSize(),aPt3,aRect2.GetSize(),aBitmapAlien ));
     413             : #endif
     414             : 
     415             :     /* void DrawBitmap( const Point& rDestPt, const Size& rDestSize,
     416             :                                     const Point& rSrcPtPixel, const Size& rSrcSizePixel,
     417             :                                     const Bitmap& rBitmap );
     418             :     */
     419             :     add(res,
     420             :         "DrawBitmap(scaled subset)",
     421             :         boost::bind(
     422             :             (void (OutputDevice::*)( const Point&,
     423             :                                      const Size&,
     424             :                                      const Point&,
     425             :                                      const Size&,
     426             :                                      const Bitmap& ))(
     427             :                 &OutputDevice::DrawBitmap),
     428             :             _1,
     429             :             aPt1,aRect.GetSize(),aPt3,aRect2.GetSize(),aBitmap ));
     430             : 
     431             :     /* void DrawBitmapEx( const Point& rDestPt,
     432             :                                       const BitmapEx& rBitmapEx );
     433             :     */
     434             :     add(res,
     435             :         "DrawBitmapEx(alien source)",
     436             :         boost::bind(
     437             :             (void (OutputDevice::*)( const Point&,
     438             :                                      const BitmapEx& ))(
     439             :                 &OutputDevice::DrawBitmapEx),
     440             :             _1,
     441             :             aPt1,aBitmapExAlien ));
     442             : 
     443             :     /* void DrawBitmapEx( const Point& rDestPt,
     444             :                                       const BitmapEx& rBitmapEx );
     445             :     */
     446             :     add(res,
     447             :         "DrawBitmapEx",
     448             :         boost::bind(
     449             :             (void (OutputDevice::*)( const Point&,
     450             :                                      const BitmapEx& ))(
     451             :                 &OutputDevice::DrawBitmapEx),
     452             :             _1,
     453             :             aPt1,aBitmapEx ));
     454             : 
     455             :     /* void DrawBitmapEx( const Point& rDestPt,
     456             :                                       const BitmapEx& rBitmapEx );
     457             :     */
     458             :     add(res,
     459             :         "DrawBitmapEx(alpha)",
     460             :         boost::bind(
     461             :             (void (OutputDevice::*)( const Point&,
     462             :                                      const BitmapEx& ))(
     463             :                 &OutputDevice::DrawBitmapEx),
     464             :             _1,
     465             :             aPt1,aBitmapExAlpha ));
     466             : 
     467             :     /* void DrawBitmapEx( const Point& rDestPt,
     468             :                                       const BitmapEx& rBitmapEx );
     469             :     */
     470             :     add(res,
     471             :         "DrawBitmapEx(alpha, alien source)",
     472             :         boost::bind(
     473             :             (void (OutputDevice::*)( const Point&,
     474             :                                      const BitmapEx& ))(
     475             :                 &OutputDevice::DrawBitmapEx),
     476             :             _1,
     477             :             aPt1,aBitmapExAlphaAlien ));
     478             : 
     479             :     /* void DrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
     480             :                                       const BitmapEx& rBitmapEx );
     481             :     */
     482             :     add(res,
     483             :         "DrawBitmapEx(scaled,alien source)",
     484             :         boost::bind(
     485             :             (void (OutputDevice::*)( const Point&,
     486             :                                      const Size&,
     487             :                                      const BitmapEx& ))(
     488             :                 &OutputDevice::DrawBitmapEx),
     489             :             _1,
     490             :             aPt1,aRect.GetSize(),aBitmapExAlien ));
     491             : 
     492             :     /* void DrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
     493             :                                       const BitmapEx& rBitmapEx );
     494             :     */
     495             :     add(res,
     496             :         "DrawBitmapEx(scaled)",
     497             :         boost::bind(
     498             :             (void (OutputDevice::*)( const Point&,
     499             :                                      const Size&,
     500             :                                      const BitmapEx& ))(
     501             :                 &OutputDevice::DrawBitmapEx),
     502             :             _1,
     503             :             aPt1,aRect.GetSize(),aBitmapEx ));
     504             : 
     505             :     /* void DrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
     506             :                                       const BitmapEx& rBitmapEx );
     507             :     */
     508             :     add(res,
     509             :         "DrawBitmapEx(scaled alpha)",
     510             :         boost::bind(
     511             :             (void (OutputDevice::*)( const Point&,
     512             :                                      const Size&,
     513             :                                      const BitmapEx& ))(
     514             :                 &OutputDevice::DrawBitmapEx),
     515             :             _1,
     516             :             aPt1,aRect.GetSize(),aBitmapExAlpha ));
     517             : 
     518             :     /* void DrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
     519             :                                       const BitmapEx& rBitmapEx );
     520             :     */
     521             :     add(res,
     522             :         "DrawBitmapEx(scaled alpha, alien source)",
     523             :         boost::bind(
     524             :             (void (OutputDevice::*)( const Point&,
     525             :                                      const Size&,
     526             :                                      const BitmapEx& ))(
     527             :                 &OutputDevice::DrawBitmapEx),
     528             :             _1,
     529             :             aPt1,aRect.GetSize(),aBitmapExAlphaAlien ));
     530             : 
     531             :     /* void DrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
     532             :                                       const Point& rSrcPtPixel, const Size& rSrcSizePixel,
     533             :                                       const BitmapEx& rBitmapEx );
     534             :     */
     535             :     add(res,
     536             :         "DrawBitmapEx(scaled subset,alien source)",
     537             :         boost::bind(
     538             :             (void (OutputDevice::*)( const Point&,
     539             :                                      const Size&,
     540             :                                      const Point&,
     541             :                                      const Size&,
     542             :                                      const BitmapEx& ))(
     543             :                 &OutputDevice::DrawBitmapEx),
     544             :             _1,
     545             :             aPt1,aRect.GetSize(),aPt3,aRect2.GetSize(),aBitmapExAlien ));
     546             : 
     547             :     /* void DrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
     548             :                                       const Point& rSrcPtPixel, const Size& rSrcSizePixel,
     549             :                                       const BitmapEx& rBitmapEx );
     550             :     */
     551             :     add(res,
     552             :         "DrawBitmapEx(scaled subset)",
     553             :         boost::bind(
     554             :             (void (OutputDevice::*)( const Point&,
     555             :                                      const Size&,
     556             :                                      const Point&,
     557             :                                      const Size&,
     558             :                                      const BitmapEx& ))(
     559             :                 &OutputDevice::DrawBitmapEx),
     560             :             _1,
     561             :             aPt1,aRect.GetSize(),aPt3,aRect2.GetSize(),aBitmapEx ));
     562             : 
     563             :     /* void DrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
     564             :                                       const Point& rSrcPtPixel, const Size& rSrcSizePixel,
     565             :                                       const BitmapEx& rBitmapEx );
     566             :     */
     567             :     add(res,
     568             :         "DrawBitmapEx(scaled subset, alpha)",
     569             :         boost::bind(
     570             :             (void (OutputDevice::*)( const Point&,
     571             :                                      const Size&,
     572             :                                      const Point&,
     573             :                                      const Size&,
     574             :                                      const BitmapEx& ))(
     575             :                 &OutputDevice::DrawBitmapEx),
     576             :             _1,
     577             :             aPt1,aRect.GetSize(),aPt3,aRect2.GetSize(),aBitmapExAlpha ));
     578             : 
     579             :     /* void DrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
     580             :                                       const Point& rSrcPtPixel, const Size& rSrcSizePixel,
     581             :                                       const BitmapEx& rBitmapEx );
     582             :     */
     583             :     add(res,
     584             :         "DrawBitmapEx(scaled subset, alpha alien source)",
     585             :         boost::bind(
     586             :             (void (OutputDevice::*)( const Point&,
     587             :                                      const Size&,
     588             :                                      const Point&,
     589             :                                      const Size&,
     590             :                                      const BitmapEx& ))(
     591             :                 &OutputDevice::DrawBitmapEx),
     592             :             _1,
     593             :             aPt1,aRect.GetSize(),aPt3,aRect2.GetSize(),aBitmapExAlphaAlien ));
     594             : 
     595             :     /* void DrawMask( const Point& rDestPt,
     596             :                                   const Bitmap& rBitmap, const Color& rMaskColor );
     597             :     */
     598             :     add(res,
     599             :         "DrawMask(alien source)",
     600             :         boost::bind(
     601             :             (void (OutputDevice::*)( const Point&,
     602             :                                      const Bitmap&,
     603             :                                      const Color& ))(
     604             :                 &OutputDevice::DrawMask),
     605             :             _1,
     606             :             aPt1,aBitmapAlien,aBlackColor ));
     607             : 
     608             :     /* void DrawMask( const Point& rDestPt,
     609             :                                   const Bitmap& rBitmap, const Color& rMaskColor );
     610             :     */
     611             :     add(res,
     612             :         "DrawMask",
     613             :         boost::bind(
     614             :             (void (OutputDevice::*)( const Point&,
     615             :                                      const Bitmap&,
     616             :                                      const Color& ))(
     617             :                 &OutputDevice::DrawMask),
     618             :             _1,
     619             :             aPt1,aBitmap,aBlackColor ));
     620             : 
     621             :     /* void DrawMask( const Point& rDestPt, const Size& rDestSize,
     622             :                                   const Bitmap& rBitmap, const Color& rMaskColor );
     623             :     */
     624             :     add(res,
     625             :         "DrawMask(scaled,alien source)",
     626             :         boost::bind(
     627             :             (void (OutputDevice::*)( const Point&,
     628             :                                      const Size&,
     629             :                                      const Bitmap&,
     630             :                                      const Color& ))(
     631             :                 &OutputDevice::DrawMask),
     632             :             _1,
     633             :             aPt1,aRect.GetSize(),aBitmapAlien, aBlackColor ));
     634             : 
     635             :     /* void DrawMask( const Point& rDestPt, const Size& rDestSize,
     636             :                                   const Bitmap& rBitmap, const Color& rMaskColor );
     637             :     */
     638             :     add(res,
     639             :         "DrawMask(scaled)",
     640             :         boost::bind(
     641             :             (void (OutputDevice::*)( const Point&,
     642             :                                      const Size&,
     643             :                                      const Bitmap&,
     644             :                                      const Color& ))(
     645             :                 &OutputDevice::DrawMask),
     646             :             _1,
     647             :             aPt1,aRect.GetSize(),aBitmap,aBlackColor ));
     648             : 
     649             :     /* void DrawMask( const Point& rDestPt, const Size& rDestSize,
     650             :                                   const Point& rSrcPtPixel, const Size& rSrcSizePixel,
     651             :                                   const Bitmap& rBitmap, const Color& rMaskColor );
     652             :     */
     653             :     add(res,
     654             :         "DrawMask(scaled subset,alien source)",
     655             :         boost::bind(
     656             :             (void (OutputDevice::*)( const Point&,
     657             :                                      const Size&,
     658             :                                      const Point&,
     659             :                                      const Size&,
     660             :                                      const Bitmap&,
     661             :                                      const Color& ))(
     662             :                 &OutputDevice::DrawMask),
     663             :             _1,
     664             :             aPt1,aRect.GetSize(),aPt3,aRect2.GetSize(),aBitmapAlien,aBlackColor ));
     665             : 
     666             :     /* void DrawMask( const Point& rDestPt, const Size& rDestSize,
     667             :                                   const Point& rSrcPtPixel, const Size& rSrcSizePixel,
     668             :                                   const Bitmap& rBitmap, const Color& rMaskColor );
     669             :     */
     670             :     add(res,
     671             :         "DrawMask(scaled subset)",
     672             :         boost::bind(
     673             :             (void (OutputDevice::*)( const Point&,
     674             :                                      const Size&,
     675             :                                      const Point&,
     676             :                                      const Size&,
     677             :                                      const Bitmap&,
     678             :                                      const Color& ))(
     679             :                 &OutputDevice::DrawMask),
     680             :             _1,
     681             :             aPt1,aRect.GetSize(),aPt3,aRect2.GetSize(),aBitmap,aBlackColor ));
     682             : 
     683             :     /* void DrawImage( const Point& rPos,
     684             :                                    const Image& rImage, sal_uInt16 nStyle = 0 );
     685             :     */
     686             :     add(res,
     687             :         "DrawImage",
     688             :         boost::bind(
     689             :             (void (OutputDevice::*)( const Point&,
     690             :                                      const Image&,
     691             :                                      sal_uInt16 nStyle ))(
     692             :                 &OutputDevice::DrawImage),
     693             :             _1,
     694             :             aPt1,aImage,(sal_uInt16)0 ));
     695             : 
     696             :     /* void DrawImage( const Point& rPos, const Size& rSize,
     697             :                                    const Image& rImage, sal_uInt16 nStyle = 0 );
     698             :     */
     699             :     add(res,
     700             :         "DrawImage(scaled)",
     701             :         boost::bind(
     702             :             (void (OutputDevice::*)( const Point&,
     703             :                                      const Size&,
     704             :                                      const Image&,
     705             :                                      sal_uInt16 nStyle ))(
     706             :                 &OutputDevice::DrawImage),
     707             :             _1,
     708             :             aPt1,aRect.GetSize(),aImage,(sal_uInt16)0 ));
     709             : 
     710             : #endif // NEEDS_QUALITY_PARAMATER
     711             : 
     712             :     /* void DrawGradient( const Rectangle& rRect, const Gradient& rGradient ); */
     713             :     add(res,
     714             :         "DrawGradient",
     715             :         boost::bind(
     716             :             (void (OutputDevice::*)( const Rectangle&, const Gradient& ))(
     717             :                 &OutputDevice::DrawGradient),
     718             :             _1,
     719           0 :             aRect,aGradient ));
     720             : 
     721             :     /* void DrawGradient( const tools::PolyPolygon& rPolyPoly, const Gradient& rGradient ); */
     722             :     add(res,
     723             :         "DrawGradient(polygon)",
     724             :         boost::bind(
     725             :             (void (OutputDevice::*)( const tools::PolyPolygon&, const Gradient& ))(
     726             :                 &OutputDevice::DrawGradient),
     727             :             _1,
     728           0 :             aPoly3,aGradient ));
     729             : 
     730             :     /* void DrawHatch( const tools::PolyPolygon& rPolyPoly, const Hatch& rHatch ); */
     731             :     add(res,
     732             :         "DrawHatch",
     733             :         boost::bind(
     734             :             &OutputDevice::DrawHatch,
     735             :             _1,
     736           0 :             aPoly3,aHatch ));
     737             : 
     738             :     /* void DrawWallpaper( const Rectangle& rRect, const Wallpaper& rWallpaper ); */
     739             :     add(res,
     740             :         "DrawWallpaper",
     741             :         boost::bind(
     742             :             &OutputDevice::DrawWallpaper,
     743             :             _1,
     744           0 :             aRect2,aWallpaper ));
     745             : 
     746             : #ifdef FIXME_HAVE_WAVE_NORMAL
     747             :     /* void DrawWaveLine( const Point& rStartPos, const Point& rEndPos, sal_uInt16 nStyle ); */
     748             :     add(res,
     749             :         "DrawWaveLine",
     750             :         boost::bind(
     751             :             &OutputDevice::DrawWaveLine,
     752             :             _1,
     753             :             aPt1,aPt2,(sal_uInt16)WAVE_NORMAL ));
     754             : #endif
     755             : 
     756             :     /* void DrawGrid( const Rectangle& rRect, const Size& rDist, sal_uLong nFlags ); */
     757             :     add(res,
     758             :         "DrawGrid",
     759             :         boost::bind(
     760             :             &OutputDevice::DrawGrid,
     761             :             _1,
     762           0 :             aRect,Size(10,20),DrawGridFlags::HorzLines|DrawGridFlags::VertLines ));
     763             : 
     764             :     /* void DrawTransparent( const tools::PolyPolygon& rPolyPoly,
     765             :                                          sal_uInt16 nTransparencePercent );
     766             :     */
     767             :     add(res,
     768             :         "DrawTransparent",
     769             :         boost::bind(
     770             :             (void (OutputDevice::*)( const tools::PolyPolygon&, sal_uInt16 ))(
     771             :                 &OutputDevice::DrawTransparent),
     772             :             _1,
     773           0 :             aPoly3,(sal_uInt16)50 ));
     774             : 
     775             :     /* void DrawTransparent( const GDIMetaFile& rMtf,
     776             :                                          const Point& rPos, const Size& rSize,
     777             :                                          const Gradient& rTransparenceGradient );
     778             :     */
     779             :     add(res,
     780             :         "DrawTransparent(metafile)",
     781             :         boost::bind(
     782             :             (void (OutputDevice::*)( const GDIMetaFile&,
     783             :                                      const Point&,
     784             :                                      const Size&,
     785             :                                      const Gradient& ))(
     786             :                 &OutputDevice::DrawTransparent),
     787             :             _1,
     788           0 :             aMtf,aPt1,aRect.GetSize(),aGradient ));
     789             : 
     790             :     /* void Erase(); */
     791             :     add(res,
     792             :         "Erase",
     793             :         boost::bind(
     794             :             &OutputDevice::Erase,
     795           0 :             _1 ));
     796             : 
     797           0 : }
     798             : 
     799           0 : void grindFunc( OutputDevice&                       rTarget,
     800             :                 functor_vector_type::const_iterator iter,
     801             :                 sal_Int32                           nTurns,
     802             :                 const char*                         pMsg )
     803             : {
     804           0 :     const sal_uInt32 nStartTime( osl_getGlobalTimer() );
     805             : 
     806           0 :     for( sal_Int32 i=0; i<nTurns; ++i )
     807           0 :         iter->second(&rTarget);
     808             : 
     809           0 :     if( rTarget.GetOutDevType() == OUTDEV_WINDOW )
     810           0 :         static_cast< vcl::Window & >( rTarget ).Sync();
     811             : 
     812             :     fprintf( stdout,
     813             :              "Duration: %d ms (%d repetitions)\tOperation: %s\tSetup: %s\n",
     814           0 :              (int)(osl_getGlobalTimer() - nStartTime),
     815             :              (int)(nTurns),
     816           0 :              iter->first,
     817           0 :              pMsg );
     818           0 : }
     819             : 
     820             : /** Call OutputDevice render methods repeatedly, and output elapsed
     821             :     time to stdout
     822             :  */
     823           0 : void outDevGrind(vcl::RenderContext& rTarget, sal_Int32 nTurns = 100)
     824             : {
     825             :     // TODO(F1): also profile pure complex clip setup times!
     826             : 
     827             :     // State: fill/line color, draw mode, w/o clip, rect clip, complex clip
     828           0 :     functor_vector_type aMethods;
     829           0 :     setupMethodStubs( aMethods );
     830             : 
     831           0 :     const Rectangle aClipRect(10,10,1000,1000);
     832           0 :     const Polygon   aPoly1( aClipRect );
     833           0 :     Polygon         aPoly2( aClipRect );
     834           0 :     aPoly2.Rotate(aClipRect.Center(),450);
     835           0 :     tools::PolyPolygon     aClipPoly(aPoly1);
     836           0 :     aClipPoly.Insert(aPoly2);
     837             : 
     838           0 :     functor_vector_type::const_iterator       iter = aMethods.begin();
     839           0 :     const functor_vector_type::const_iterator end  = aMethods.end();
     840           0 :     while( iter != end )
     841             :     {
     842           0 :         rTarget.SetLineColor( Color(COL_BLACK) );
     843           0 :         rTarget.SetFillColor( Color(COL_GREEN) );
     844           0 :         rTarget.SetRasterOp( ROP_OVERPAINT );
     845           0 :         rTarget.SetClipRegion();
     846           0 :         grindFunc( rTarget, iter, nTurns, "w/o clip, w/o xor" );
     847             : 
     848           0 :         rTarget.SetLineColor( Color(COL_BLACK) );
     849           0 :         rTarget.SetFillColor( Color(COL_GREEN) );
     850           0 :         rTarget.SetRasterOp( ROP_OVERPAINT );
     851           0 :         rTarget.SetClipRegion( vcl::Region( aClipRect ) );
     852           0 :         grindFunc( rTarget, iter, nTurns, "with rect clip, w/o xor" );
     853             : 
     854           0 :         rTarget.SetLineColor( Color(COL_BLACK) );
     855           0 :         rTarget.SetFillColor( Color(COL_GREEN) );
     856           0 :         rTarget.SetRasterOp( ROP_OVERPAINT );
     857           0 :         rTarget.SetClipRegion( vcl::Region( aClipPoly ) );
     858           0 :         grindFunc( rTarget, iter, nTurns, "with complex clip, w/o xor" );
     859             : 
     860           0 :         rTarget.SetLineColor( Color(COL_BLACK) );
     861           0 :         rTarget.SetFillColor( Color(COL_GREEN) );
     862           0 :         rTarget.SetRasterOp( ROP_XOR );
     863           0 :         rTarget.SetClipRegion();
     864           0 :         grindFunc( rTarget, iter, nTurns, "w/o clip, with xor" );
     865             : 
     866           0 :         rTarget.SetLineColor( Color(COL_BLACK) );
     867           0 :         rTarget.SetFillColor( Color(COL_GREEN) );
     868           0 :         rTarget.SetRasterOp( ROP_XOR );
     869           0 :         rTarget.SetClipRegion( vcl::Region( aClipRect ) );
     870           0 :         grindFunc( rTarget, iter, nTurns, "with rect clip, with xor" );
     871             : 
     872           0 :         rTarget.SetLineColor( Color(COL_BLACK) );
     873           0 :         rTarget.SetFillColor( Color(COL_GREEN) );
     874           0 :         rTarget.SetRasterOp( ROP_XOR );
     875           0 :         rTarget.SetClipRegion( vcl::Region( aClipPoly ) );
     876           0 :         grindFunc( rTarget, iter, nTurns, "with complex clip, with xor" );
     877             : 
     878           0 :         ++iter;
     879           0 :     }
     880           0 : }
     881             : 
     882           0 : void TestWindow::Paint(vcl::RenderContext& rRenderContext, const Rectangle&)
     883             : {
     884           0 :     outDevGrind(rRenderContext);
     885           0 :     fflush(stdout);
     886           0 : }
     887             : 
     888           0 : sal_uInt16 GrindApp::Exception( sal_uInt16 nError )
     889             : {
     890           0 :     switch( nError & EXC_MAJORTYPE )
     891             :     {
     892             :         case EXC_RSCNOTLOADED:
     893           0 :             Abort( "Error: could not load language resources.\nPlease check your installation.\n" );
     894           0 :             break;
     895             :     }
     896           0 :     return 0;
     897             : }
     898             : 
     899           0 : int GrindApp::Main()
     900             : {
     901           0 :     ScopedVclPtrInstance<TestWindow> aWindow;
     902           0 :     aWindow->Execute();
     903           0 :     return 0;
     904             : }
     905             : 
     906             : } // namespace
     907             : 
     908             : 
     909           0 : SAL_IMPLEMENT_MAIN()
     910             : {
     911             :     try
     912             :     {
     913           0 :         bool bHelp = false;
     914             : 
     915           0 :         for( sal_uInt16 i = 0; i < Application::GetCommandLineParamCount(); i++ )
     916             :         {
     917           0 :             OUString aParam = Application::GetCommandLineParam( i );
     918             : 
     919           0 :             if( aParam == "--help" || aParam == "-h" )
     920           0 :                     bHelp = true;
     921           0 :         }
     922             : 
     923           0 :         if( bHelp )
     924             :         {
     925           0 :             printf( "outdevgrind - Profile OutputDevice\n" );
     926           0 :             return EXIT_SUCCESS;
     927             :         }
     928             : 
     929           0 :         tools::extendApplicationEnvironment();
     930             : 
     931           0 :         uno::Reference< uno::XComponentContext > xContext = cppu::defaultBootstrap_InitialComponentContext();
     932           0 :         uno::Reference< lang::XMultiServiceFactory > xServiceManager( xContext->getServiceManager(), uno::UNO_QUERY );
     933             : 
     934           0 :         if( !xServiceManager.is() )
     935           0 :             Application::Abort( "Failed to bootstrap" );
     936             : 
     937           0 :         comphelper::setProcessServiceFactory( xServiceManager );
     938             : 
     939           0 :         InitVCL();
     940             : 
     941           0 :         GrindApp aGrindApp;
     942           0 :         aGrindApp.Main();
     943             : 
     944           0 :         DeInitVCL();
     945             :     }
     946           0 :     catch (const css::uno::Exception& e)
     947             :     {
     948             :         SAL_WARN("vcl.app", "Fatal exception: " << e.Message);
     949           0 :         return EXIT_FAILURE;
     950             :     }
     951           0 :     catch (const std::exception& e)
     952             :     {
     953             :         SAL_WARN("vcl.app", "Fatal exception: " << e.what());
     954           0 :         return EXIT_FAILURE;
     955             :     }
     956             : 
     957           0 :     return EXIT_SUCCESS;
     958           0 : }
     959             : 
     960             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11