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