xref: /AOO41X/main/cui/source/dialogs/cuigrfflt.cxx (revision 3ea0c3d5cfef7203d1d18b0d5fde9ed31f4a4181)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_cui.hxx"
26 
27 #include <tools/shl.hxx>
28 #include <vcl/msgbox.hxx>
29 #include <sfx2/viewfrm.hxx>
30 #include <sfx2/viewsh.hxx>
31 #include <sfx2/objsh.hxx>
32 #include <sfx2/request.hxx>
33 #include <dialmgr.hxx>
34 #include "cuigrfflt.hxx"
35 #include "grfflt.hrc"
36 #include <cuires.hrc>
37 #include <svx/dialogs.hrc> // RID_SVX_GRFFILTER_DLG_...
38 
39 // --------------------
40 // - SvxGraphicFilter -
41 // --------------------
42 /*
43 sal_uLong SvxGraphicFilter::ExecuteGrfFilterSlot( SfxRequest& rReq, GraphicObject& rFilterObject )
44 {
45     const Graphic&  rGraphic = rFilterObject.GetGraphic();
46     sal_uLong           nRet;
47 
48     if( rGraphic.GetType() == GRAPHIC_BITMAP )
49     {
50         SfxViewFrame*   pViewFrame = SfxViewFrame::Current();
51         SfxObjectShell* pShell = pViewFrame ? pViewFrame->GetObjectShell() : NULL;
52         Window*         pWindow = ( pViewFrame && pViewFrame->GetViewShell() ) ? pViewFrame->GetViewShell()->GetWindow() : NULL;
53         Graphic         aGraphic;
54 
55         switch( rReq.GetSlot() )
56         {
57             case( SID_GRFFILTER_INVERT ):
58             {
59                 if( pShell )
60                     pShell->SetWaitCursor( sal_True );
61 
62                 if( rGraphic.IsAnimated() )
63                 {
64                     Animation aAnimation( rGraphic.GetAnimation() );
65 
66                     if( aAnimation.Invert() )
67                         aGraphic = aAnimation;
68                 }
69                 else
70                 {
71                     BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
72 
73                     if( aBmpEx.Invert() )
74                         aGraphic = aBmpEx;
75                 }
76 
77                 if( pShell )
78                     pShell->SetWaitCursor( sal_False );
79             }
80             break;
81 
82             case( SID_GRFFILTER_SMOOTH ):
83             {
84                 if( pShell )
85                     pShell->SetWaitCursor( sal_True );
86 
87                 if( rGraphic.IsAnimated() )
88                 {
89                     Animation aAnimation( rGraphic.GetAnimation() );
90 
91                     if( aAnimation.Filter( BMP_FILTER_SMOOTH ) )
92                         aGraphic = aAnimation;
93                 }
94                 else
95                 {
96                     BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
97 
98                     if( aBmpEx.Filter( BMP_FILTER_SMOOTH ) )
99                         aGraphic = aBmpEx;
100                 }
101 
102                 if( pShell )
103                     pShell->SetWaitCursor( sal_False );
104             }
105             break;
106 
107             case( SID_GRFFILTER_SHARPEN ):
108             {
109                 if( pShell )
110                     pShell->SetWaitCursor( sal_True );
111 
112                 if( rGraphic.IsAnimated() )
113                 {
114                     Animation aAnimation( rGraphic.GetAnimation() );
115 
116                     if( aAnimation.Filter( BMP_FILTER_SHARPEN ) )
117                         aGraphic = aAnimation;
118                 }
119                 else
120                 {
121                     BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
122 
123                     if( aBmpEx.Filter( BMP_FILTER_SHARPEN ) )
124                         aGraphic = aBmpEx;
125                 }
126 
127                 if( pShell )
128                     pShell->SetWaitCursor( sal_False );
129             }
130             break;
131 
132             case( SID_GRFFILTER_REMOVENOISE ):
133             {
134                 if( pShell )
135                     pShell->SetWaitCursor( sal_True );
136 
137                 if( rGraphic.IsAnimated() )
138                 {
139                     Animation aAnimation( rGraphic.GetAnimation() );
140 
141                     if( aAnimation.Filter( BMP_FILTER_REMOVENOISE ) )
142                         aGraphic = aAnimation;
143                 }
144                 else
145                 {
146                     BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
147 
148                     if( aBmpEx.Filter( BMP_FILTER_REMOVENOISE ) )
149                         aGraphic = aBmpEx;
150                 }
151 
152                 if( pShell )
153                     pShell->SetWaitCursor( sal_False );
154             }
155             break;
156 
157             case( SID_GRFFILTER_SOBEL ):
158             {
159                 if( pShell )
160                     pShell->SetWaitCursor( sal_True );
161 
162                 if( rGraphic.IsAnimated() )
163                 {
164                     Animation aAnimation( rGraphic.GetAnimation() );
165 
166                     if( aAnimation.Filter( BMP_FILTER_SOBEL_GREY ) )
167                         aGraphic = aAnimation;
168                 }
169                 else
170                 {
171                     BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
172 
173                     if( aBmpEx.Filter( BMP_FILTER_SOBEL_GREY ) )
174                         aGraphic = aBmpEx;
175                 }
176 
177                 if( pShell )
178                     pShell->SetWaitCursor( sal_False );
179             }
180             break;
181 
182             case( SID_GRFFILTER_MOSAIC ):
183             {
184                 GraphicFilterMosaic aDlg( pWindow, rGraphic, 4, 4, sal_False );
185 
186                 if( aDlg.Execute() == RET_OK )
187                     aGraphic = aDlg.GetFilteredGraphic( rGraphic, 1.0, 1.0 );
188             }
189             break;
190 
191             case( SID_GRFFILTER_EMBOSS  ):
192             {
193                 GraphicFilterEmboss aDlg( pWindow, rGraphic, RP_MM );
194 
195                 if( aDlg.Execute() == RET_OK )
196                     aGraphic = aDlg.GetFilteredGraphic( rGraphic, 1.0, 1.0 );
197             }
198             break;
199 
200             case( SID_GRFFILTER_POSTER  ):
201             {
202                 GraphicFilterPoster aDlg( pWindow, rGraphic, 16 );
203 
204                 if( aDlg.Execute() == RET_OK )
205                     aGraphic = aDlg.GetFilteredGraphic( rGraphic, 1.0, 1.0 );
206             }
207             break;
208 
209             case( SID_GRFFILTER_POPART  ):
210             {
211                 if( pShell )
212                     pShell->SetWaitCursor( sal_True );
213 
214                 if( rGraphic.IsAnimated() )
215                 {
216                     Animation aAnimation( rGraphic.GetAnimation() );
217 
218                     if( aAnimation.Filter( BMP_FILTER_POPART ) )
219                         aGraphic = aAnimation;
220                 }
221                 else
222                 {
223                     BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
224 
225                     if( aBmpEx.Filter( BMP_FILTER_POPART ) )
226                         aGraphic = aBmpEx;
227                 }
228 
229                 if( pShell )
230                     pShell->SetWaitCursor( sal_False );
231             }
232             break;
233 
234             case( SID_GRFFILTER_SEPIA ):
235             {
236                 GraphicFilterSepia aDlg( pWindow, rGraphic, 10 );
237 
238                 if( aDlg.Execute() == RET_OK )
239                     aGraphic = aDlg.GetFilteredGraphic( rGraphic, 1.0, 1.0 );
240             }
241             break;
242 
243             case( SID_GRFFILTER_SOLARIZE ):
244             {
245                 GraphicFilterSolarize aDlg( pWindow, rGraphic, 128, sal_False );
246 
247                 if( aDlg.Execute() == RET_OK )
248                     aGraphic = aDlg.GetFilteredGraphic( rGraphic, 1.0, 1.0 );
249             }
250             break;
251 
252             default:
253             {
254                 DBG_ERROR( "SvxGraphicFilter: selected filter slot not yet implemented" );
255                 nRet = SVX_GRAPHICFILTER_UNSUPPORTED_SLOT;
256             }
257             break;
258         }
259 
260         if( aGraphic.GetType() != GRAPHIC_NONE )
261         {
262             rFilterObject.SetGraphic( aGraphic );
263             nRet = SVX_GRAPHICFILTER_ERRCODE_NONE;
264         }
265     }
266     else
267         nRet = SVX_GRAPHICFILTER_UNSUPPORTED_GRAPHICTYPE;
268 
269     return nRet;
270 }
271 
272 // -----------------------------------------------------------------------------
273 
274 void SvxGraphicFilter::DisableGraphicFilterSlots( SfxItemSet& rSet )
275 {
276     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( SID_GRFFILTER ) )
277         rSet.DisableItem( SID_GRFFILTER );
278 
279     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( SID_GRFFILTER_INVERT ) )
280         rSet.DisableItem( SID_GRFFILTER_INVERT );
281 
282     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( SID_GRFFILTER_SMOOTH ) )
283         rSet.DisableItem( SID_GRFFILTER_SMOOTH );
284 
285     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( SID_GRFFILTER_SHARPEN ) )
286         rSet.DisableItem( SID_GRFFILTER_SHARPEN );
287 
288     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( SID_GRFFILTER_REMOVENOISE ) )
289         rSet.DisableItem( SID_GRFFILTER_REMOVENOISE );
290 
291     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( SID_GRFFILTER_SOBEL ) )
292         rSet.DisableItem( SID_GRFFILTER_SOBEL );
293 
294     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( SID_GRFFILTER_MOSAIC ) )
295         rSet.DisableItem( SID_GRFFILTER_MOSAIC );
296 
297     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( SID_GRFFILTER_EMBOSS ) )
298         rSet.DisableItem( SID_GRFFILTER_EMBOSS );
299 
300     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( SID_GRFFILTER_POSTER ) )
301         rSet.DisableItem( SID_GRFFILTER_POSTER );
302 
303     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( SID_GRFFILTER_POPART ) )
304         rSet.DisableItem( SID_GRFFILTER_POPART );
305 
306     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( SID_GRFFILTER_SEPIA ) )
307         rSet.DisableItem( SID_GRFFILTER_SEPIA );
308 
309     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( SID_GRFFILTER_SOLARIZE ) )
310         rSet.DisableItem( SID_GRFFILTER_SOLARIZE );
311 };
312 */
313 // --------------------------------------
314 // - GraphicFilterDialog::PreviewWindow -
315 // --------------------------------------
316 
PreviewWindow(Window * pParent,const ResId & rResId)317 GraphicFilterDialog::PreviewWindow::PreviewWindow( Window* pParent, const ResId& rResId ) :
318     Control( pParent, rResId )
319 {
320 }
321 
322 // -----------------------------------------------------------------------------
323 
~PreviewWindow()324 GraphicFilterDialog::PreviewWindow::~PreviewWindow()
325 {
326 }
327 
328 // -----------------------------------------------------------------------------
329 
Paint(const Rectangle & rRect)330 void GraphicFilterDialog::PreviewWindow::Paint( const Rectangle& rRect )
331 {
332     Control::Paint( rRect );
333 
334     const Size  aGrfSize( LogicToPixel( maGraphic.GetPrefSize(), maGraphic.GetPrefMapMode() ) );
335     const Size  aOutSize( GetOutputSizePixel() );
336     const Point aGrfPos( ( aOutSize.Width() - aGrfSize.Width() ) >> 1,
337                          ( aOutSize.Height() - aGrfSize.Height() ) >> 1 );
338 
339     if( maGraphic.IsAnimated() )
340         maGraphic.StartAnimation( this , aGrfPos, aGrfSize );
341     else
342         maGraphic.Draw( this, aGrfPos, aGrfSize );
343 }
344 
345 // -----------------------------------------------------------------------------
346 
SetGraphic(const Graphic & rGraphic)347 void GraphicFilterDialog::PreviewWindow::SetGraphic( const Graphic& rGraphic )
348 {
349     maGraphic = rGraphic;
350 
351     if( maGraphic.IsAnimated() || maGraphic.IsTransparent() )
352         Invalidate();
353     else
354         Paint( Rectangle( Point(), GetOutputSizePixel() ) );
355 }
356 
357 // -----------------------
358 // - GraphicFilterDialog -
359 // -----------------------
360 
GraphicFilterDialog(Window * pParent,const ResId & rResId,const Graphic & rGraphic)361 GraphicFilterDialog::GraphicFilterDialog( Window* pParent, const ResId& rResId, const Graphic& rGraphic ) :
362     ModalDialog     ( pParent, rResId ),
363     maModifyHdl     ( LINK( this, GraphicFilterDialog, ImplModifyHdl ) ),
364     mfScaleX        ( 0.0 ),
365     mfScaleY        ( 0.0 ),
366     maSizePixel     ( LogicToPixel( rGraphic.GetPrefSize(), rGraphic.GetPrefMapMode() ) ),
367     maPreview       ( this, CUI_RES( CTL_PREVIEW ) ),
368     maBtnOK         ( this, CUI_RES( BTN_OK ) ),
369     maBtnCancel     ( this, CUI_RES( BTN_CANCEL ) ),
370     maBtnHelp       ( this, CUI_RES( BTN_HELP ) ),
371     maFlParameter   ( this, CUI_RES( FL_PARAMETER ) )
372 {
373     const Size  aPreviewSize( maPreview.GetOutputSizePixel() );
374     Size        aGrfSize( maSizePixel );
375 
376     if( rGraphic.GetType() == GRAPHIC_BITMAP &&
377         aPreviewSize.Width() && aPreviewSize.Height() &&
378         aGrfSize.Width() && aGrfSize.Height() )
379     {
380         const double fGrfWH = (double) aGrfSize.Width() / aGrfSize.Height();
381         const double fPreWH = (double) aPreviewSize.Width() / aPreviewSize.Height();
382 
383         if( fGrfWH < fPreWH )
384         {
385             aGrfSize.Width() = (long) ( aPreviewSize.Height() * fGrfWH );
386             aGrfSize.Height()= aPreviewSize.Height();
387         }
388         else
389         {
390             aGrfSize.Width() = aPreviewSize.Width();
391             aGrfSize.Height()= (long) ( aPreviewSize.Width() / fGrfWH);
392         }
393 
394         mfScaleX = (double) aGrfSize.Width() / maSizePixel.Width();
395         mfScaleY = (double) aGrfSize.Height() / maSizePixel.Height();
396 
397         if( !rGraphic.IsAnimated() )
398         {
399             BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
400 
401             if( aBmpEx.Scale( aGrfSize, BMP_SCALE_INTERPOLATE ) )
402                 maGraphic = aBmpEx;
403         }
404     }
405 
406     maTimer.SetTimeoutHdl( LINK( this, GraphicFilterDialog, ImplPreviewTimeoutHdl ) );
407     maTimer.SetTimeout( 100 );
408     ImplModifyHdl( NULL );
409 }
410 
411 // -----------------------------------------------------------------------------
412 
~GraphicFilterDialog()413 GraphicFilterDialog::~GraphicFilterDialog()
414 {
415 }
416 
417 // -----------------------------------------------------------------------------
418 
IMPL_LINK(GraphicFilterDialog,ImplPreviewTimeoutHdl,Timer *,EMPTYARG)419 IMPL_LINK( GraphicFilterDialog, ImplPreviewTimeoutHdl, Timer*, EMPTYARG )
420 {
421     maTimer.Stop();
422     maPreview.SetGraphic( GetFilteredGraphic( maGraphic, mfScaleX, mfScaleY ) );
423 
424     return 0;
425 }
426 
427 // -----------------------------------------------------------------------------
428 
IMPL_LINK(GraphicFilterDialog,ImplModifyHdl,void *,EMPTYARG)429 IMPL_LINK( GraphicFilterDialog, ImplModifyHdl, void*, EMPTYARG )
430 {
431     if( maGraphic.GetType() == GRAPHIC_BITMAP )
432     {
433         maTimer.Stop();
434         maTimer.Start();
435     }
436 
437     return 0;
438 }
439 
440 // ----------------
441 // - FilterMosaic -
442 // ----------------
443 
GraphicFilterMosaic(Window * pParent,const Graphic & rGraphic,sal_uInt16 nTileWidth,sal_uInt16 nTileHeight,sal_Bool bEnhanceEdges)444 GraphicFilterMosaic::GraphicFilterMosaic( Window* pParent, const Graphic& rGraphic,
445                                           sal_uInt16 nTileWidth, sal_uInt16 nTileHeight, sal_Bool bEnhanceEdges ) :
446     GraphicFilterDialog( pParent, CUI_RES( RID_SVX_GRFFILTER_DLG_MOSAIC ), rGraphic ),
447     maFtWidth   ( this, CUI_RES( DLG_FILTERMOSAIC_FT_WIDTH ) ),
448     maMtrWidth  ( this, CUI_RES( DLG_FILTERMOSAIC_MTR_WIDTH ) ),
449     maFtHeight  ( this, CUI_RES( DLG_FILTERMOSAIC_FT_HEIGHT ) ),
450     maMtrHeight ( this, CUI_RES( DLG_FILTERMOSAIC_MTR_HEIGHT ) ),
451     maCbxEdges  ( this, CUI_RES( DLG_FILTERMOSAIC_CBX_EDGES ) )
452 {
453     FreeResource();
454 
455     maMtrWidth.SetValue( nTileWidth );
456     maMtrWidth.SetLast( GetGraphicSizePixel().Width() );
457     maMtrWidth.SetModifyHdl( GetModifyHdl() );
458 
459     maMtrHeight.SetValue( nTileHeight );
460     maMtrHeight.SetLast( GetGraphicSizePixel().Height() );
461     maMtrHeight.SetModifyHdl( GetModifyHdl() );
462 
463     maCbxEdges.Check( bEnhanceEdges );
464     maCbxEdges.SetToggleHdl( GetModifyHdl() );
465 
466     maMtrWidth.GrabFocus();
467 
468     maFtWidth.SetAccessibleRelationMemberOf(&maFlParameter);
469     maMtrWidth.SetAccessibleRelationMemberOf(&maFlParameter);
470     maFtHeight.SetAccessibleRelationMemberOf(&maFlParameter);
471     maMtrHeight.SetAccessibleRelationMemberOf(&maFlParameter);
472     maCbxEdges.SetAccessibleRelationMemberOf(&maFlParameter);
473 }
474 
475 // -----------------------------------------------------------------------------
476 
~GraphicFilterMosaic()477 GraphicFilterMosaic::~GraphicFilterMosaic()
478 {
479 }
480 
481 // -----------------------------------------------------------------------------
482 
GetFilteredGraphic(const Graphic & rGraphic,double fScaleX,double fScaleY)483 Graphic GraphicFilterMosaic::GetFilteredGraphic( const Graphic& rGraphic,
484                                                  double fScaleX, double fScaleY )
485 {
486     Graphic         aRet;
487     const Size      aSize( Max( FRound( GetTileWidth() * fScaleX ), 1L ),
488                            Max( FRound( GetTileHeight() * fScaleY ), 1L ) );
489     BmpFilterParam  aParam( aSize );
490 
491     if( rGraphic.IsAnimated() )
492     {
493         Animation aAnim( rGraphic.GetAnimation() );
494 
495         if( aAnim.Filter( BMP_FILTER_MOSAIC, &aParam ) )
496         {
497             if( IsEnhanceEdges() )
498                 aAnim.Filter( BMP_FILTER_SHARPEN );
499 
500             aRet = aAnim;
501         }
502     }
503     else
504     {
505         BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
506 
507         if( aBmpEx.Filter( BMP_FILTER_MOSAIC, &aParam ) )
508         {
509             if( IsEnhanceEdges() )
510                 aBmpEx.Filter( BMP_FILTER_SHARPEN );
511 
512             aRet = aBmpEx;
513         }
514     }
515 
516     return aRet;
517 }
518 
519 // ------------------
520 // - GraphicFilterSolarize -
521 // ------------------
522 
GraphicFilterSolarize(Window * pParent,const Graphic & rGraphic,sal_uInt8 cGreyThreshold,sal_Bool bInvert)523 GraphicFilterSolarize::GraphicFilterSolarize( Window* pParent, const Graphic& rGraphic,
524                                               sal_uInt8 cGreyThreshold, sal_Bool bInvert ) :
525     GraphicFilterDialog ( pParent, CUI_RES( RID_SVX_GRFFILTER_DLG_SOLARIZE ), rGraphic ),
526     maFtThreshold   ( this, CUI_RES( DLG_FILTERSOLARIZE_FT_THRESHOLD ) ),
527     maMtrThreshold  ( this, CUI_RES( DLG_FILTERSOLARIZE_MTR_THRESHOLD ) ),
528     maCbxInvert     ( this, CUI_RES( DLG_FILTERSOLARIZE_CBX_INVERT ) )
529 {
530     FreeResource();
531 
532     maMtrThreshold.SetValue( FRound( cGreyThreshold / 2.55 ) );
533     maMtrThreshold.SetModifyHdl( GetModifyHdl() );
534 
535     maCbxInvert.Check( bInvert );
536     maCbxInvert.SetToggleHdl( GetModifyHdl() );
537 }
538 
539 // -----------------------------------------------------------------------------
540 
~GraphicFilterSolarize()541 GraphicFilterSolarize::~GraphicFilterSolarize()
542 {
543 }
544 
545 // -----------------------------------------------------------------------------
546 
GetFilteredGraphic(const Graphic & rGraphic,double,double)547 Graphic GraphicFilterSolarize::GetFilteredGraphic( const Graphic& rGraphic,
548                                                    double /*fScaleX*/, double /*fScaleY*/ )
549 {
550     Graphic         aRet;
551     BmpFilterParam  aParam( GetGreyThreshold() );
552 
553     if( rGraphic.IsAnimated() )
554     {
555         Animation aAnim( rGraphic.GetAnimation() );
556 
557         if( aAnim.Filter( BMP_FILTER_SOLARIZE, &aParam ) )
558         {
559             if( IsInvert() )
560                 aAnim.Invert();
561 
562             aRet = aAnim;
563         }
564     }
565     else
566     {
567         BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
568 
569         if( aBmpEx.Filter( BMP_FILTER_SOLARIZE, &aParam ) )
570         {
571             if( IsInvert() )
572                 aBmpEx.Invert();
573 
574             aRet = aBmpEx;
575         }
576     }
577 
578     return aRet;
579 }
580 
581 // ----------------------
582 // - GraphicFilterSepia -
583 // ----------------------
584 
GraphicFilterSepia(Window * pParent,const Graphic & rGraphic,sal_uInt16 nSepiaPercent)585 GraphicFilterSepia::GraphicFilterSepia( Window* pParent, const Graphic& rGraphic,
586                                         sal_uInt16 nSepiaPercent ) :
587     GraphicFilterDialog ( pParent, CUI_RES( RID_SVX_GRFFILTER_DLG_SEPIA ), rGraphic ),
588     maFtSepia       ( this, CUI_RES( DLG_FILTERSEPIA_FT_SEPIA ) ),
589     maMtrSepia      ( this, CUI_RES( DLG_FILTERSEPIA_MTR_SEPIA ) )
590 {
591     FreeResource();
592 
593     maMtrSepia.SetValue( nSepiaPercent );
594     maMtrSepia.SetModifyHdl( GetModifyHdl() );
595 }
596 
597 // -----------------------------------------------------------------------------
598 
~GraphicFilterSepia()599 GraphicFilterSepia::~GraphicFilterSepia()
600 {
601 }
602 
603 // -----------------------------------------------------------------------------
604 
GetFilteredGraphic(const Graphic & rGraphic,double,double)605 Graphic GraphicFilterSepia::GetFilteredGraphic( const Graphic& rGraphic,
606                                                 double /*fScaleX*/, double /*fScaleY*/ )
607 {
608     Graphic         aRet;
609     BmpFilterParam  aParam( GetSepiaPercent() );
610 
611     if( rGraphic.IsAnimated() )
612     {
613         Animation aAnim( rGraphic.GetAnimation() );
614 
615         if( aAnim.Filter( BMP_FILTER_SEPIA, &aParam ) )
616             aRet = aAnim;
617     }
618     else
619     {
620         BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
621 
622         if( aBmpEx.Filter( BMP_FILTER_SEPIA, &aParam ) )
623             aRet = aBmpEx;
624     }
625 
626     return aRet;
627 }
628 
629 // -----------------------
630 // - GraphicFilterPoster -
631 // -----------------------
632 
GraphicFilterPoster(Window * pParent,const Graphic & rGraphic,sal_uInt16 nPosterCount)633 GraphicFilterPoster::GraphicFilterPoster( Window* pParent, const Graphic& rGraphic,
634                                           sal_uInt16 nPosterCount ) :
635     GraphicFilterDialog ( pParent, CUI_RES( RID_SVX_GRFFILTER_DLG_POSTER ), rGraphic ),
636     maFtPoster      ( this, CUI_RES( DLG_FILTERPOSTER_FT_POSTER ) ),
637     maNumPoster     ( this, CUI_RES( DLG_FILTERPOSTER_NUM_POSTER ) )
638 {
639     FreeResource();
640 
641     maNumPoster.SetFirst( 2 );
642     maNumPoster.SetLast( rGraphic.GetBitmapEx().GetBitCount() );
643     maNumPoster.SetValue( nPosterCount );
644     maNumPoster.SetModifyHdl( GetModifyHdl() );
645 }
646 
647 // -----------------------------------------------------------------------------
648 
~GraphicFilterPoster()649 GraphicFilterPoster::~GraphicFilterPoster()
650 {
651 }
652 
653 // -----------------------------------------------------------------------------
654 
GetFilteredGraphic(const Graphic & rGraphic,double,double)655 Graphic GraphicFilterPoster::GetFilteredGraphic( const Graphic& rGraphic,
656                                                  double /*fScaleX*/, double /*fScaleY*/ )
657 {
658     Graphic         aRet;
659     const sal_uInt16    nPosterCount = GetPosterColorCount();
660 
661     if( rGraphic.IsAnimated() )
662     {
663         Animation aAnim( rGraphic.GetAnimation() );
664 
665         if( aAnim.ReduceColors( nPosterCount, BMP_REDUCE_POPULAR ) )
666             aRet = aAnim;
667     }
668     else
669     {
670         BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
671 
672         if( aBmpEx.ReduceColors( nPosterCount, BMP_REDUCE_POPULAR ) )
673             aRet = aBmpEx;
674     }
675 
676     return aRet;
677 }
678 
679 // -----------------------
680 // - GraphicFilterEmboss -
681 // -----------------------
682 
MouseButtonDown(const MouseEvent & rEvt)683 void GraphicFilterEmboss::EmbossControl::MouseButtonDown( const MouseEvent& rEvt )
684 {
685     const RECT_POINT eOldRP = GetActualRP();
686 
687     SvxRectCtl::MouseButtonDown( rEvt );
688 
689     if( GetActualRP() != eOldRP )
690         maModifyHdl.Call( this );
691 }
692 
693 // -----------------------------------------------------------------------------
694 
GraphicFilterEmboss(Window * pParent,const Graphic & rGraphic,RECT_POINT eLightSource)695 GraphicFilterEmboss::GraphicFilterEmboss( Window* pParent, const Graphic& rGraphic,
696                                           RECT_POINT eLightSource ) :
697     GraphicFilterDialog ( pParent, CUI_RES( RID_SVX_GRFFILTER_DLG_EMBOSS ), rGraphic ),
698     maFtLight       ( this, CUI_RES( DLG_FILTEREMBOSS_FT_LIGHT ) ),
699     maCtlLight      ( this, CUI_RES( DLG_FILTEREMBOSS_CTL_LIGHT ), eLightSource )
700 {
701     FreeResource();
702 
703     maCtlLight.SetModifyHdl( GetModifyHdl() );
704     maCtlLight.GrabFocus();
705 }
706 
707 // -----------------------------------------------------------------------------
708 
~GraphicFilterEmboss()709 GraphicFilterEmboss::~GraphicFilterEmboss()
710 {
711 }
712 
713 // -----------------------------------------------------------------------------
714 
GetFilteredGraphic(const Graphic & rGraphic,double,double)715 Graphic GraphicFilterEmboss::GetFilteredGraphic( const Graphic& rGraphic,
716                                                  double /*fScaleX*/, double /*fScaleY*/ )
717 {
718     Graphic aRet;
719     sal_uInt16  nAzim, nElev;
720 
721     switch( maCtlLight.GetActualRP() )
722     {
723         default:       DBG_ERROR("svx::GraphicFilterEmboss::GetFilteredGraphic(), unknown Reference Point!" );
724         case( RP_LT ): nAzim = 4500,    nElev = 4500; break;
725         case( RP_MT ): nAzim = 9000,    nElev = 4500; break;
726         case( RP_RT ): nAzim = 13500,   nElev = 4500; break;
727         case( RP_LM ): nAzim = 0,       nElev = 4500; break;
728         case( RP_MM ): nAzim = 0,       nElev = 9000; break;
729         case( RP_RM ): nAzim = 18000,   nElev = 4500; break;
730         case( RP_LB ): nAzim = 31500,   nElev = 4500; break;
731         case( RP_MB ): nAzim = 27000,   nElev = 4500; break;
732         case( RP_RB ): nAzim = 22500,   nElev = 4500; break;
733     }
734 
735     BmpFilterParam aParam( nAzim, nElev );
736 
737     if( rGraphic.IsAnimated() )
738     {
739         Animation aAnim( rGraphic.GetAnimation() );
740 
741         if( aAnim.Filter( BMP_FILTER_EMBOSS_GREY, &aParam ) )
742             aRet = aAnim;
743     }
744     else
745     {
746         BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
747 
748         if( aBmpEx.Filter( BMP_FILTER_EMBOSS_GREY, &aParam ) )
749             aRet = aBmpEx;
750     }
751 
752     return aRet;
753 }
754