LCOV - code coverage report
Current view: top level - cui/source/dialogs - cuigrfflt.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 0 230 0.0 %
Date: 2014-11-03 Functions: 0 29 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 <vcl/builder.hxx>
      21             : #include <vcl/msgbox.hxx>
      22             : #include <sfx2/viewfrm.hxx>
      23             : #include <sfx2/viewsh.hxx>
      24             : #include <sfx2/objsh.hxx>
      25             : #include <sfx2/request.hxx>
      26             : #include <dialmgr.hxx>
      27             : #include "cuigrfflt.hxx"
      28             : #include <cuires.hrc>
      29             : #include <svx/dialogs.hrc>
      30             : 
      31           0 : GraphicPreviewWindow::GraphicPreviewWindow(vcl::Window* pParent,
      32             :     const WinBits nStyle)
      33             :     : Control(pParent, nStyle)
      34             :     , mpOrigGraphic(NULL)
      35             :     , mfScaleX(0.0)
      36           0 :     , mfScaleY(0.0)
      37             : {
      38           0 : }
      39             : 
      40           0 : extern "C" SAL_DLLPUBLIC_EXPORT vcl::Window* SAL_CALL makeGraphicPreviewWindow(vcl::Window *pParent, VclBuilder::stringmap &rMap)
      41             : {
      42           0 :     WinBits nWinBits = WB_TABSTOP;
      43             : 
      44           0 :     OString sBorder = VclBuilder::extractCustomProperty(rMap);
      45           0 :     if (!sBorder.isEmpty())
      46           0 :        nWinBits |= WB_BORDER;
      47             : 
      48           0 :     return new GraphicPreviewWindow(pParent, nWinBits);
      49             : }
      50             : 
      51           0 : Size GraphicPreviewWindow::GetOptimalSize() const
      52             : {
      53           0 :     return LogicToPixel(Size(81, 73), MAP_APPFONT);
      54             : }
      55             : 
      56             : 
      57             : 
      58           0 : void GraphicPreviewWindow::Paint( const Rectangle& rRect )
      59             : {
      60           0 :     Control::Paint( rRect );
      61             : 
      62           0 :     const Size  aOutputSize( GetOutputSizePixel() );
      63             : 
      64           0 :     if( maPreview.IsAnimated() )
      65             :     {
      66           0 :         const Size  aGraphicSize( LogicToPixel( maPreview.GetPrefSize(), maPreview.GetPrefMapMode() ) );
      67           0 :         const Point aGraphicPosition( ( aOutputSize.Width()  - aGraphicSize.Width()  ) >> 1,
      68           0 :                                       ( aOutputSize.Height() - aGraphicSize.Height() ) >> 1 );
      69           0 :         maPreview.StartAnimation( this, aGraphicPosition, aGraphicSize );
      70             :     }
      71             :     else
      72             :     {
      73           0 :         const Size  aGraphicSize( maPreview.GetSizePixel() );
      74           0 :         const Point aGraphicPosition( ( aOutputSize.Width()  - aGraphicSize.Width()  ) >> 1,
      75           0 :                                       ( aOutputSize.Height() - aGraphicSize.Height() ) >> 1 );
      76           0 :         maPreview.Draw( this, aGraphicPosition, aGraphicSize );
      77             :     }
      78           0 : }
      79             : 
      80             : 
      81             : 
      82           0 : void GraphicPreviewWindow::SetPreview( const Graphic& rGraphic )
      83             : {
      84           0 :     maPreview = rGraphic;
      85           0 :     Invalidate();
      86           0 : }
      87             : 
      88           0 : void GraphicPreviewWindow::ScaleImageToFit()
      89             : {
      90           0 :     if (!mpOrigGraphic)
      91           0 :         return;
      92             : 
      93           0 :     maScaledOrig = *mpOrigGraphic;
      94             : 
      95           0 :     const Size  aPreviewSize( GetOutputSizePixel() );
      96           0 :     Size aSizePixel(LogicToPixel(mpOrigGraphic->GetPrefSize(),
      97           0 :         mpOrigGraphic->GetPrefMapMode()));
      98           0 :     Size aGrfSize(aSizePixel);
      99             : 
     100           0 :     if( mpOrigGraphic->GetType() == GRAPHIC_BITMAP &&
     101           0 :         aPreviewSize.Width() && aPreviewSize.Height() &&
     102           0 :         aGrfSize.Width() && aGrfSize.Height() )
     103             :     {
     104           0 :         const double fGrfWH = (double) aGrfSize.Width() / aGrfSize.Height();
     105           0 :         const double fPreWH = (double) aPreviewSize.Width() / aPreviewSize.Height();
     106             : 
     107           0 :         if( fGrfWH < fPreWH )
     108             :         {
     109           0 :             aGrfSize.Width()  = (long) ( aPreviewSize.Height() * fGrfWH );
     110           0 :             aGrfSize.Height() = aPreviewSize.Height();
     111             :         }
     112             :         else
     113             :         {
     114           0 :             aGrfSize.Width()  = aPreviewSize.Width();
     115           0 :             aGrfSize.Height() = (long) ( aPreviewSize.Width() / fGrfWH );
     116             :         }
     117             : 
     118           0 :         mfScaleX = (double) aGrfSize.Width() / aSizePixel.Width();
     119           0 :         mfScaleY = (double) aGrfSize.Height() / aSizePixel.Height();
     120             : 
     121           0 :         if( !mpOrigGraphic->IsAnimated() )
     122             :         {
     123           0 :             BitmapEx aBmpEx( mpOrigGraphic->GetBitmapEx() );
     124             : 
     125           0 :             if( aBmpEx.Scale( aGrfSize, BMP_SCALE_DEFAULT ) )
     126           0 :                 maScaledOrig = aBmpEx;
     127             :         }
     128             :     }
     129             : 
     130           0 :     maModifyHdl.Call(this);
     131             : }
     132             : 
     133           0 : void GraphicPreviewWindow::Resize()
     134             : {
     135           0 :     Control::Resize();
     136           0 :     ScaleImageToFit();
     137           0 : }
     138             : 
     139           0 : GraphicFilterDialog::GraphicFilterDialog(vcl::Window* pParent,
     140             :     const OString& rID, const OUString& rUIXMLDescription,
     141             :     const Graphic& rGraphic)
     142             :     : ModalDialog(pParent, rID, rUIXMLDescription)
     143             :     , maModifyHdl(LINK( this, GraphicFilterDialog, ImplModifyHdl))
     144             :     , maSizePixel(LogicToPixel(rGraphic.GetPrefSize(),
     145           0 :         rGraphic.GetPrefMapMode()))
     146             : {
     147           0 :     bIsBitmap = rGraphic.GetType() == GRAPHIC_BITMAP;
     148             : 
     149           0 :     maTimer.SetTimeoutHdl( LINK( this, GraphicFilterDialog, ImplPreviewTimeoutHdl ) );
     150           0 :     maTimer.SetTimeout( 5 );
     151             : 
     152           0 :     get(mpPreview, "preview");
     153           0 :     mpPreview->init(&rGraphic, maModifyHdl);
     154           0 : }
     155             : 
     156             : 
     157             : 
     158           0 : IMPL_LINK_NOARG(GraphicFilterDialog, ImplPreviewTimeoutHdl)
     159             : {
     160           0 :     maTimer.Stop();
     161           0 :     mpPreview->SetPreview(GetFilteredGraphic(mpPreview->GetScaledOriginal(),
     162           0 :         mpPreview->GetScaleX(), mpPreview->GetScaleY()));
     163             : 
     164           0 :     return 0;
     165             : }
     166             : 
     167             : 
     168             : 
     169           0 : IMPL_LINK_NOARG(GraphicFilterDialog, ImplModifyHdl)
     170             : {
     171           0 :     if (bIsBitmap)
     172             :     {
     173           0 :         maTimer.Stop();
     174           0 :         maTimer.Start();
     175             :     }
     176             : 
     177           0 :     return 0;
     178             : }
     179             : 
     180             : 
     181             : // - FilterMosaic -
     182             : 
     183             : 
     184           0 : GraphicFilterMosaic::GraphicFilterMosaic( vcl::Window* pParent, const Graphic& rGraphic,
     185             :                                           sal_uInt16 nTileWidth, sal_uInt16 nTileHeight, bool bEnhanceEdges )
     186             :     : GraphicFilterDialog(pParent, "MosaicDialog",
     187           0 :         "cui/ui/mosaicdialog.ui", rGraphic)
     188             : {
     189           0 :     get(mpMtrWidth, "width");
     190           0 :     get(mpMtrHeight, "height");
     191           0 :     get(mpCbxEdges, "edges");
     192             : 
     193           0 :     mpMtrWidth->SetValue( nTileWidth );
     194           0 :     mpMtrWidth->SetLast( GetGraphicSizePixel().Width() );
     195           0 :     mpMtrWidth->SetModifyHdl( GetModifyHdl() );
     196             : 
     197           0 :     mpMtrHeight->SetValue( nTileHeight );
     198           0 :     mpMtrHeight->SetLast( GetGraphicSizePixel().Height() );
     199           0 :     mpMtrHeight->SetModifyHdl( GetModifyHdl() );
     200             : 
     201           0 :     mpCbxEdges->Check( bEnhanceEdges );
     202           0 :     mpCbxEdges->SetToggleHdl( GetModifyHdl() );
     203             : 
     204           0 :     mpMtrWidth->GrabFocus();
     205           0 : }
     206             : 
     207             : 
     208             : 
     209           0 : Graphic GraphicFilterMosaic::GetFilteredGraphic( const Graphic& rGraphic,
     210             :                                                  double fScaleX, double fScaleY )
     211             : {
     212           0 :     Graphic         aRet;
     213           0 :     const Size      aSize( std::max( FRound( GetTileWidth() * fScaleX ), 1L ),
     214           0 :                            std::max( FRound( GetTileHeight() * fScaleY ), 1L ) );
     215           0 :     BmpFilterParam  aParam( aSize );
     216             : 
     217           0 :     if( rGraphic.IsAnimated() )
     218             :     {
     219           0 :         Animation aAnim( rGraphic.GetAnimation() );
     220             : 
     221           0 :         if( aAnim.Filter( BMP_FILTER_MOSAIC, &aParam ) )
     222             :         {
     223           0 :             if( IsEnhanceEdges() )
     224           0 :                 aAnim.Filter( BMP_FILTER_SHARPEN );
     225             : 
     226           0 :             aRet = aAnim;
     227           0 :         }
     228             :     }
     229             :     else
     230             :     {
     231           0 :         BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
     232             : 
     233           0 :         if( aBmpEx.Filter( BMP_FILTER_MOSAIC, &aParam ) )
     234             :         {
     235           0 :             if( IsEnhanceEdges() )
     236           0 :                 (void)aBmpEx.Filter( BMP_FILTER_SHARPEN );
     237             : 
     238           0 :             aRet = aBmpEx;
     239           0 :         }
     240             :     }
     241             : 
     242           0 :     return aRet;
     243             : }
     244             : 
     245             : 
     246             : // - GraphicFilterSmooth -
     247             : 
     248             : 
     249           0 : GraphicFilterSmooth::GraphicFilterSmooth( vcl::Window* pParent, const Graphic& rGraphic, double nRadius)
     250             :     : GraphicFilterDialog(pParent, "SmoothDialog",
     251           0 :         "cui/ui/smoothdialog.ui", rGraphic)
     252             : {
     253           0 :     get(mpMtrRadius, "radius");
     254             : 
     255           0 :     mpMtrRadius->SetValue( nRadius* 10  );
     256           0 :     mpMtrRadius->SetModifyHdl( GetModifyHdl() );
     257           0 :     mpMtrRadius->GrabFocus();
     258           0 : }
     259             : 
     260             : 
     261             : 
     262           0 : Graphic GraphicFilterSmooth::GetFilteredGraphic( const Graphic& rGraphic, double /*fScaleX*/, double /*fScaleY*/ )
     263             : {
     264           0 :     Graphic         aRet;
     265           0 :     BmpFilterParam  aParam( GetRadius() );
     266             : 
     267           0 :     if( rGraphic.IsAnimated() )
     268             :     {
     269           0 :         Animation aAnim( rGraphic.GetAnimation() );
     270             : 
     271           0 :         if( aAnim.Filter( BMP_FILTER_SMOOTH, &aParam ) )
     272             :         {
     273           0 :             aRet = aAnim;
     274           0 :         }
     275             :     }
     276             :     else
     277             :     {
     278           0 :         BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
     279             : 
     280           0 :         if( aBmpEx.Filter( BMP_FILTER_SMOOTH, &aParam ) )
     281             :         {
     282           0 :             aRet = aBmpEx;
     283           0 :         }
     284             :     }
     285             : 
     286           0 :     return aRet;
     287             : }
     288             : 
     289             : 
     290             : // - GraphicFilterSolarize -
     291             : 
     292             : 
     293           0 : GraphicFilterSolarize::GraphicFilterSolarize( vcl::Window* pParent, const Graphic& rGraphic,
     294             :                                               sal_uInt8 cGreyThreshold, bool bInvert )
     295             :     : GraphicFilterDialog(pParent, "SolarizeDialog",
     296           0 :         "cui/ui/solarizedialog.ui", rGraphic)
     297             : {
     298           0 :     get(mpMtrThreshold, "value");
     299           0 :     get(mpCbxInvert, "invert");
     300             : 
     301           0 :     mpMtrThreshold->SetValue( FRound( cGreyThreshold / 2.55 ) );
     302           0 :     mpMtrThreshold->SetModifyHdl( GetModifyHdl() );
     303             : 
     304           0 :     mpCbxInvert->Check( bInvert );
     305           0 :     mpCbxInvert->SetToggleHdl( GetModifyHdl() );
     306           0 : }
     307             : 
     308             : 
     309             : 
     310           0 : Graphic GraphicFilterSolarize::GetFilteredGraphic( const Graphic& rGraphic,
     311             :                                                    double /*fScaleX*/, double /*fScaleY*/ )
     312             : {
     313           0 :     Graphic         aRet;
     314           0 :     BmpFilterParam  aParam( GetGreyThreshold() );
     315             : 
     316           0 :     if( rGraphic.IsAnimated() )
     317             :     {
     318           0 :         Animation aAnim( rGraphic.GetAnimation() );
     319             : 
     320           0 :         if( aAnim.Filter( BMP_FILTER_SOLARIZE, &aParam ) )
     321             :         {
     322           0 :             if( IsInvert() )
     323           0 :                 aAnim.Invert();
     324             : 
     325           0 :             aRet = aAnim;
     326           0 :         }
     327             :     }
     328             :     else
     329             :     {
     330           0 :         BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
     331             : 
     332           0 :         if( aBmpEx.Filter( BMP_FILTER_SOLARIZE, &aParam ) )
     333             :         {
     334           0 :             if( IsInvert() )
     335           0 :                 aBmpEx.Invert();
     336             : 
     337           0 :             aRet = aBmpEx;
     338           0 :         }
     339             :     }
     340             : 
     341           0 :     return aRet;
     342             : }
     343             : 
     344             : 
     345             : // - GraphicFilterSepia -
     346             : 
     347             : 
     348           0 : GraphicFilterSepia::GraphicFilterSepia( vcl::Window* pParent, const Graphic& rGraphic,
     349             :                                         sal_uInt16 nSepiaPercent )
     350             :     : GraphicFilterDialog(pParent, "AgingDialog",
     351           0 :         "cui/ui/agingdialog.ui", rGraphic)
     352             : {
     353           0 :     get(mpMtrSepia, "value");
     354             : 
     355           0 :     mpMtrSepia->SetValue( nSepiaPercent );
     356           0 :     mpMtrSepia->SetModifyHdl( GetModifyHdl() );
     357           0 : }
     358             : 
     359             : 
     360             : 
     361           0 : Graphic GraphicFilterSepia::GetFilteredGraphic( const Graphic& rGraphic,
     362             :                                                 double /*fScaleX*/, double /*fScaleY*/ )
     363             : {
     364           0 :     Graphic         aRet;
     365           0 :     BmpFilterParam  aParam( GetSepiaPercent() );
     366             : 
     367           0 :     if( rGraphic.IsAnimated() )
     368             :     {
     369           0 :         Animation aAnim( rGraphic.GetAnimation() );
     370             : 
     371           0 :         if( aAnim.Filter( BMP_FILTER_SEPIA, &aParam ) )
     372           0 :             aRet = aAnim;
     373             :     }
     374             :     else
     375             :     {
     376           0 :         BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
     377             : 
     378           0 :         if( aBmpEx.Filter( BMP_FILTER_SEPIA, &aParam ) )
     379           0 :             aRet = aBmpEx;
     380             :     }
     381             : 
     382           0 :     return aRet;
     383             : }
     384             : 
     385             : 
     386             : // - GraphicFilterPoster -
     387             : 
     388             : 
     389           0 : GraphicFilterPoster::GraphicFilterPoster(vcl::Window* pParent, const Graphic& rGraphic,
     390             :                                           sal_uInt16 nPosterCount)
     391             :     : GraphicFilterDialog(pParent, "PosterDialog",
     392           0 :         "cui/ui/posterdialog.ui", rGraphic)
     393             : {
     394           0 :     get(mpNumPoster, "value");
     395             : 
     396           0 :     mpNumPoster->SetFirst( 2 );
     397           0 :     mpNumPoster->SetLast( rGraphic.GetBitmapEx().GetBitCount() );
     398           0 :     mpNumPoster->SetValue( nPosterCount );
     399           0 :     mpNumPoster->SetModifyHdl( GetModifyHdl() );
     400           0 : }
     401             : 
     402             : 
     403             : 
     404           0 : Graphic GraphicFilterPoster::GetFilteredGraphic( const Graphic& rGraphic,
     405             :                                                  double /*fScaleX*/, double /*fScaleY*/ )
     406             : {
     407           0 :     Graphic         aRet;
     408           0 :     const sal_uInt16    nPosterCount = GetPosterColorCount();
     409             : 
     410           0 :     if( rGraphic.IsAnimated() )
     411             :     {
     412           0 :         Animation aAnim( rGraphic.GetAnimation() );
     413             : 
     414           0 :         if( aAnim.ReduceColors( nPosterCount, BMP_REDUCE_POPULAR ) )
     415           0 :             aRet = aAnim;
     416             :     }
     417             :     else
     418             :     {
     419           0 :         BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
     420             : 
     421           0 :         if( aBmpEx.ReduceColors( nPosterCount, BMP_REDUCE_POPULAR ) )
     422           0 :             aRet = aBmpEx;
     423             :     }
     424             : 
     425           0 :     return aRet;
     426             : }
     427             : 
     428             : 
     429             : // - GraphicFilterEmboss -
     430             : 
     431             : 
     432           0 : void EmbossControl::MouseButtonDown( const MouseEvent& rEvt )
     433             : {
     434           0 :     const RECT_POINT eOldRP = GetActualRP();
     435             : 
     436           0 :     SvxRectCtl::MouseButtonDown( rEvt );
     437             : 
     438           0 :     if( GetActualRP() != eOldRP )
     439           0 :         maModifyHdl.Call( this );
     440           0 : }
     441             : 
     442           0 : Size EmbossControl::GetOptimalSize() const
     443             : {
     444           0 :     return LogicToPixel(Size(77, 60), MAP_APPFONT);
     445             : }
     446             : 
     447           0 : extern "C" SAL_DLLPUBLIC_EXPORT vcl::Window* SAL_CALL makeEmbossControl(vcl::Window *pParent, VclBuilder::stringmap &)
     448             : {
     449           0 :     return new EmbossControl(pParent);
     450             : }
     451             : 
     452             : 
     453             : 
     454           0 : GraphicFilterEmboss::GraphicFilterEmboss(vcl::Window* pParent,
     455             :     const Graphic& rGraphic, RECT_POINT eLightSource)
     456             :     : GraphicFilterDialog (pParent, "EmbossDialog",
     457           0 :         "cui/ui/embossdialog.ui", rGraphic)
     458             : {
     459           0 :     get(mpCtlLight, "lightsource");
     460           0 :     mpCtlLight->SetActualRP(eLightSource);
     461           0 :     mpCtlLight->SetModifyHdl( GetModifyHdl() );
     462           0 :     mpCtlLight->GrabFocus();
     463           0 : }
     464             : 
     465             : 
     466             : 
     467           0 : Graphic GraphicFilterEmboss::GetFilteredGraphic( const Graphic& rGraphic,
     468             :                                                  double /*fScaleX*/, double /*fScaleY*/ )
     469             : {
     470           0 :     Graphic aRet;
     471             :     sal_uInt16  nAzim, nElev;
     472             : 
     473           0 :     switch( mpCtlLight->GetActualRP() )
     474             :     {
     475             :         default:       OSL_FAIL("svx::GraphicFilterEmboss::GetFilteredGraphic(), unknown Reference Point!" );
     476             :                        /* Fall through */
     477           0 :         case( RP_LT ): nAzim = 4500,    nElev = 4500; break;
     478           0 :         case( RP_MT ): nAzim = 9000,    nElev = 4500; break;
     479           0 :         case( RP_RT ): nAzim = 13500,   nElev = 4500; break;
     480           0 :         case( RP_LM ): nAzim = 0,       nElev = 4500; break;
     481           0 :         case( RP_MM ): nAzim = 0,       nElev = 9000; break;
     482           0 :         case( RP_RM ): nAzim = 18000,   nElev = 4500; break;
     483           0 :         case( RP_LB ): nAzim = 31500,   nElev = 4500; break;
     484           0 :         case( RP_MB ): nAzim = 27000,   nElev = 4500; break;
     485           0 :         case( RP_RB ): nAzim = 22500,   nElev = 4500; break;
     486             :     }
     487             : 
     488           0 :     BmpFilterParam aParam( nAzim, nElev );
     489             : 
     490           0 :     if( rGraphic.IsAnimated() )
     491             :     {
     492           0 :         Animation aAnim( rGraphic.GetAnimation() );
     493             : 
     494           0 :         if( aAnim.Filter( BMP_FILTER_EMBOSS_GREY, &aParam ) )
     495           0 :             aRet = aAnim;
     496             :     }
     497             :     else
     498             :     {
     499           0 :         BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
     500             : 
     501           0 :         if( aBmpEx.Filter( BMP_FILTER_EMBOSS_GREY, &aParam ) )
     502           0 :             aRet = aBmpEx;
     503             :     }
     504             : 
     505           0 :     return aRet;
     506           0 : }
     507             : 
     508             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10