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/wrkwin.hxx>
21 : #include <vcl/metaact.hxx>
22 : #include <vcl/settings.hxx>
23 : #include <svtools/valueset.hxx>
24 : #include <svl/eitem.hxx>
25 : #include <sfx2/dispatch.hxx>
26 : #include <svtools/colrdlg.hxx>
27 :
28 : #include <svx/dialmgr.hxx>
29 : #include <svx/bmpmask.hxx>
30 : #include <svx/dialogs.hrc>
31 : #include <bmpmask.hrc>
32 : #include <svx/svxids.hrc>
33 : #include <boost/scoped_array.hpp>
34 : #include <boost/scoped_ptr.hpp>
35 : #include "helpid.hrc"
36 :
37 : #define BMP_RESID(nId) ResId(nId, DIALOG_MGR())
38 : #define TRANSP_COL (Color( 252, 252, 252 ))
39 : #define OWN_CALLMODE SfxCallMode::ASYNCHRON | SfxCallMode::RECORD
40 :
41 :
42 :
43 : #define TEST_COLS() \
44 : { \
45 : nR = aCol.GetRed(); nG = aCol.GetGreen(); nB = aCol.GetBlue(); \
46 : for( i = 0; i < nCount; i++ ) \
47 : { \
48 : if ( ( pMinR[i] <= nR ) && ( pMaxR[i] >= nR ) && \
49 : ( pMinG[i] <= nG ) && ( pMaxG[i] >= nG ) && \
50 : ( pMinB[i] <= nB ) && ( pMaxB[i] >= nB ) ) \
51 : { \
52 : aCol = pDstCols[i]; bReplace = true; break; \
53 : } \
54 : } \
55 : }
56 :
57 405 : SFX_IMPL_DOCKINGWINDOW_WITHID( SvxBmpMaskChildWindow, SID_BMPMASK )
58 :
59 0 : class ColorWindow : public Control
60 : {
61 : Color aColor;
62 :
63 :
64 : public:
65 0 : explicit ColorWindow(vcl::Window* pParent)
66 : : Control(pParent, WB_BORDER)
67 0 : , aColor( COL_WHITE )
68 : {
69 0 : }
70 :
71 0 : void SetColor( const Color& rColor )
72 : {
73 0 : aColor = rColor;
74 0 : Invalidate();
75 0 : }
76 :
77 : virtual void Paint( vcl::RenderContext& /*rRenderContext*/, const Rectangle& rRect ) SAL_OVERRIDE;
78 :
79 0 : virtual Size GetOptimalSize() const SAL_OVERRIDE
80 : {
81 0 : return LogicToPixel(Size(43, 14), MAP_APPFONT);
82 : }
83 : };
84 :
85 : class MaskSet : public ValueSet
86 : {
87 : VclPtr<SvxBmpMask> pSvxBmpMask;
88 :
89 : public:
90 : MaskSet(SvxBmpMask* pMask, vcl::Window* pParent);
91 0 : virtual ~MaskSet() { disposeOnce(); }
92 0 : virtual void dispose() SAL_OVERRIDE { pSvxBmpMask.clear(); ValueSet::dispose(); }
93 : virtual void Select() SAL_OVERRIDE;
94 : virtual void KeyInput( const KeyEvent& rKEvt ) SAL_OVERRIDE;
95 : virtual void GetFocus() SAL_OVERRIDE;
96 0 : virtual Size GetOptimalSize() const SAL_OVERRIDE
97 : {
98 0 : return LogicToPixel(Size(24, 12), MAP_APPFONT);
99 : }
100 :
101 : void onEditColor();
102 : };
103 :
104 0 : MaskSet::MaskSet(SvxBmpMask* pMask, vcl::Window* pParent)
105 : : ValueSet(pParent, WB_TABSTOP)
106 0 : , pSvxBmpMask(pMask)
107 : {
108 0 : SetHelpId(HID_BMPMASK_CTL_QCOL_1);
109 0 : }
110 :
111 0 : void MaskSet::Select()
112 : {
113 0 : ValueSet::Select();
114 :
115 0 : pSvxBmpMask->onSelect( this );
116 0 : }
117 :
118 0 : void MaskSet::GetFocus()
119 : {
120 0 : ValueSet::GetFocus();
121 0 : SelectItem( 1 );
122 0 : pSvxBmpMask->onSelect( this );
123 0 : }
124 :
125 0 : void MaskSet::KeyInput( const KeyEvent& rKEvt )
126 : {
127 0 : vcl::KeyCode aCode = rKEvt.GetKeyCode();
128 :
129 : // if the key has a modifier we don't care
130 0 : if( aCode.GetModifier() )
131 : {
132 0 : ValueSet::KeyInput( rKEvt );
133 : }
134 : else
135 : {
136 : // check for keys that interests us
137 0 : switch ( aCode.GetCode() )
138 : {
139 : case KEY_SPACE:
140 0 : onEditColor();
141 0 : break;
142 : default:
143 0 : ValueSet::KeyInput( rKEvt );
144 : }
145 :
146 : }
147 0 : }
148 :
149 0 : void MaskSet::onEditColor()
150 : {
151 0 : boost::scoped_ptr<SvColorDialog> pColorDlg(new SvColorDialog( GetParent() ));
152 :
153 0 : pColorDlg->SetColor(GetItemColor(1));
154 :
155 0 : if( pColorDlg->Execute() )
156 0 : SetItemColor( 1, pColorDlg->GetColor() );
157 0 : }
158 :
159 :
160 :
161 0 : class MaskData
162 : {
163 : VclPtr<SvxBmpMask> pMask;
164 : bool bIsReady;
165 : bool bExecState;
166 : SfxBindings& rBindings;
167 :
168 : public:
169 : MaskData( SvxBmpMask* pBmpMask, SfxBindings& rBind );
170 :
171 0 : bool IsCbxReady() const { return bIsReady; }
172 0 : void SetExecState( bool bState ) { bExecState = bState; }
173 0 : bool IsExecReady() const { return bExecState; }
174 :
175 : DECL_LINK_TYPED( PipetteHdl, ToolBox*, void );
176 : DECL_LINK( CbxHdl, CheckBox* pCbx );
177 : DECL_LINK( CbxTransHdl, CheckBox* pCbx );
178 : DECL_LINK( FocusLbHdl, ColorLB* pLb );
179 : DECL_LINK(ExecHdl, void *);
180 : };
181 :
182 :
183 :
184 0 : MaskData::MaskData( SvxBmpMask* pBmpMask, SfxBindings& rBind ) :
185 :
186 : pMask ( pBmpMask ),
187 : bIsReady ( false ),
188 : bExecState ( false ),
189 0 : rBindings ( rBind )
190 :
191 : {
192 0 : }
193 :
194 0 : IMPL_LINK_TYPED( MaskData, PipetteHdl, ToolBox*, pTbx, void )
195 : {
196 : SfxBoolItem aBItem( SID_BMPMASK_PIPETTE,
197 0 : pTbx->IsItemChecked( pTbx->GetItemId(0) ) );
198 :
199 0 : rBindings.GetDispatcher()->Execute( SID_BMPMASK_PIPETTE, OWN_CALLMODE, &aBItem, 0L );
200 0 : }
201 :
202 0 : IMPL_LINK( MaskData, CbxHdl, CheckBox*, pCbx )
203 : {
204 0 : bIsReady = pMask->m_pCbx1->IsChecked() || pMask->m_pCbx2->IsChecked() ||
205 0 : pMask->m_pCbx3->IsChecked() || pMask->m_pCbx4->IsChecked();
206 :
207 0 : if ( bIsReady && IsExecReady() )
208 0 : pMask->m_pBtnExec->Enable();
209 : else
210 0 : pMask->m_pBtnExec->Disable();
211 :
212 : // When a checkbox is checked, the pipette is enabled
213 0 : if ( pCbx->IsChecked() )
214 : {
215 0 : MaskSet* pSet = NULL;
216 :
217 0 : if (pCbx == pMask->m_pCbx1)
218 0 : pSet = pMask->m_pQSet1;
219 0 : else if (pCbx == pMask->m_pCbx2)
220 0 : pSet = pMask->m_pQSet2;
221 0 : else if (pCbx == pMask->m_pCbx3)
222 0 : pSet = pMask->m_pQSet3;
223 : else // if ( pCbx == pMask->m_pCbx4 )
224 0 : pSet = pMask->m_pQSet4;
225 :
226 0 : pSet->SelectItem( 1 );
227 0 : pSet->Select();
228 :
229 0 : pMask->m_pTbxPipette->CheckItem( pMask->m_pTbxPipette->GetItemId(0), true );
230 0 : PipetteHdl(pMask->m_pTbxPipette);
231 : }
232 :
233 0 : return 0;
234 : }
235 :
236 :
237 :
238 0 : IMPL_LINK( MaskData, CbxTransHdl, CheckBox*, pCbx )
239 : {
240 0 : bIsReady = pCbx->IsChecked();
241 0 : if ( bIsReady )
242 : {
243 0 : pMask->m_pQSet1->Disable();
244 0 : pMask->m_pQSet2->Disable();
245 0 : pMask->m_pQSet3->Disable();
246 0 : pMask->m_pQSet4->Disable();
247 0 : pMask->m_pCtlPipette->Disable();
248 0 : pMask->m_pCbx1->Disable();
249 0 : pMask->m_pSp1->Disable();
250 0 : pMask->m_pCbx2->Disable();
251 0 : pMask->m_pSp2->Disable();
252 0 : pMask->m_pCbx3->Disable();
253 0 : pMask->m_pSp3->Disable();
254 0 : pMask->m_pCbx4->Disable();
255 0 : pMask->m_pSp4->Disable();
256 0 : pMask->m_pTbxPipette->Disable();
257 :
258 0 : pMask->m_pLbColor1->Disable();
259 0 : pMask->m_pLbColor2->Disable();
260 0 : pMask->m_pLbColor3->Disable();
261 0 : pMask->m_pLbColor4->Disable();
262 0 : pMask->m_pLbColorTrans->Enable();
263 : }
264 : else
265 : {
266 0 : pMask->m_pQSet1->Enable();
267 0 : pMask->m_pQSet2->Enable();
268 0 : pMask->m_pQSet3->Enable();
269 0 : pMask->m_pQSet4->Enable();
270 0 : pMask->m_pCtlPipette->Enable();
271 0 : pMask->m_pCbx1->Enable();
272 0 : pMask->m_pSp1->Enable();
273 0 : pMask->m_pCbx2->Enable();
274 0 : pMask->m_pSp2->Enable();
275 0 : pMask->m_pCbx3->Enable();
276 0 : pMask->m_pSp3->Enable();
277 0 : pMask->m_pCbx4->Enable();
278 0 : pMask->m_pSp4->Enable();
279 0 : pMask->m_pTbxPipette->Enable();
280 :
281 0 : pMask->m_pLbColor1->Enable();
282 0 : pMask->m_pLbColor2->Enable();
283 0 : pMask->m_pLbColor3->Enable();
284 0 : pMask->m_pLbColor4->Enable();
285 0 : pMask->m_pLbColorTrans->Disable();
286 :
287 0 : bIsReady = pMask->m_pCbx1->IsChecked() || pMask->m_pCbx2->IsChecked() ||
288 0 : pMask->m_pCbx3->IsChecked() || pMask->m_pCbx4->IsChecked();
289 : }
290 :
291 0 : if ( bIsReady && IsExecReady() )
292 0 : pMask->m_pBtnExec->Enable();
293 : else
294 0 : pMask->m_pBtnExec->Disable();
295 :
296 0 : return 0L;
297 : }
298 :
299 :
300 :
301 0 : IMPL_LINK( MaskData, FocusLbHdl, ColorLB*, pLb )
302 : {
303 : // MT: bFireFox as API parameter is ugly, find better solution????
304 0 : pMask->m_pQSet1->SelectItem( pLb == pMask->m_pLbColor1 ? 1 : 0 /* , false */ );
305 0 : pMask->m_pQSet2->SelectItem( pLb == pMask->m_pLbColor2 ? 1 : 0 /* , false */ );
306 0 : pMask->m_pQSet3->SelectItem( pLb == pMask->m_pLbColor3 ? 1 : 0 /* , false */ );
307 0 : pMask->m_pQSet4->SelectItem( pLb == pMask->m_pLbColor4 ? 1 : 0 /* , false */ );
308 :
309 0 : return 0;
310 : }
311 :
312 :
313 :
314 0 : IMPL_LINK_NOARG(MaskData, ExecHdl)
315 : {
316 0 : SfxBoolItem aBItem( SID_BMPMASK_EXEC, true );
317 0 : rBindings.GetDispatcher()->Execute( SID_BMPMASK_EXEC, OWN_CALLMODE, &aBItem, 0L );
318 :
319 0 : return 0L;
320 : }
321 :
322 0 : void ColorWindow::Paint( vcl::RenderContext& rRenderContext, const Rectangle& /*Rect*/)
323 : {
324 0 : rRenderContext.Push(PushFlags::LINECOLOR | PushFlags::FILLCOLOR);
325 0 : rRenderContext.SetLineColor(aColor);
326 0 : rRenderContext.SetFillColor(aColor);
327 0 : rRenderContext.DrawRect(Rectangle(Point(), GetSizePixel()));
328 0 : rRenderContext.Pop();
329 0 : }
330 :
331 0 : SvxBmpMaskSelectItem::SvxBmpMaskSelectItem( sal_uInt16 nId_, SvxBmpMask& rMask,
332 : SfxBindings& rBindings ) :
333 : SfxControllerItem ( nId_, rBindings ),
334 0 : rBmpMask ( rMask)
335 : {
336 0 : }
337 :
338 0 : void SvxBmpMaskSelectItem::StateChanged( sal_uInt16 nSID, SfxItemState /*eState*/,
339 : const SfxPoolItem* pItem )
340 : {
341 0 : if ( ( nSID == SID_BMPMASK_EXEC ) && pItem )
342 : {
343 0 : const SfxBoolItem* pStateItem = PTR_CAST( SfxBoolItem, pItem );
344 : assert(pStateItem); //SfxBoolItem erwartet
345 0 : if (pStateItem)
346 0 : rBmpMask.SetExecState( pStateItem->GetValue() );
347 : }
348 0 : }
349 :
350 0 : SvxBmpMaskChildWindow::SvxBmpMaskChildWindow(vcl::Window* pParent_, sal_uInt16 nId,
351 : SfxBindings* pBindings,
352 : SfxChildWinInfo* pInfo)
353 0 : : SfxChildWindow(pParent_, nId)
354 : {
355 0 : VclPtr<SvxBmpMask> pDlg = VclPtr<SvxBmpMask>::Create(pBindings, this, pParent_);
356 :
357 0 : pWindow = pDlg;
358 :
359 0 : eChildAlignment = SfxChildAlignment::NOALIGNMENT;
360 :
361 0 : pDlg->Initialize( pInfo );
362 0 : }
363 :
364 0 : SvxBmpMask::SvxBmpMask(SfxBindings *pBindinx, SfxChildWindow *pCW, vcl::Window* pParent)
365 : : SfxDockingWindow(pBindinx, pCW, pParent, "DockingColorReplace",
366 : "svx/ui/dockingcolorreplace.ui" )
367 0 : , pData(new MaskData(this, *pBindinx))
368 : , aPipetteColor(COL_WHITE)
369 0 : , aSelItem(SID_BMPMASK_EXEC, *this, *pBindinx)
370 : {
371 0 : get(m_pTbxPipette, "toolbar");
372 0 : m_pTbxPipette->SetItemBits(m_pTbxPipette->GetItemId(0),
373 0 : ToolBoxItemBits::AUTOCHECK);
374 0 : get(m_pBtnExec, "replace");
375 0 : m_pCtlPipette = VclPtr<ColorWindow>::Create(get<Window>("toolgrid"));
376 0 : m_pCtlPipette->Show();
377 0 : m_pCtlPipette->set_grid_left_attach(1);
378 0 : m_pCtlPipette->set_grid_top_attach(0);
379 0 : m_pCtlPipette->set_hexpand(true);
380 0 : get(m_pCbx1, "cbx1");
381 0 : Window *pGrid = get<Window>("colorgrid");
382 0 : m_pQSet1 = VclPtr<MaskSet>::Create(this, pGrid);
383 0 : m_pQSet1->set_grid_left_attach(1);
384 0 : m_pQSet1->set_grid_top_attach(1);
385 0 : m_pQSet1->Show();
386 0 : get(m_pSp1, "tol1");
387 0 : get(m_pLbColor1, "color1");
388 0 : get(m_pCbx2, "cbx2");
389 0 : m_pQSet2 = VclPtr<MaskSet>::Create(this, pGrid);
390 0 : m_pQSet2->set_grid_left_attach(1);
391 0 : m_pQSet2->set_grid_top_attach(2);
392 0 : m_pQSet2->Show();
393 0 : get(m_pSp2, "tol2");
394 0 : get(m_pLbColor2, "color2");
395 0 : get(m_pCbx3, "cbx3");
396 0 : m_pQSet3 = VclPtr<MaskSet>::Create(this, pGrid);
397 0 : m_pQSet3->set_grid_left_attach(1);
398 0 : m_pQSet3->set_grid_top_attach(3);
399 0 : m_pQSet3->Show();
400 0 : get(m_pSp3, "tol3");
401 0 : get(m_pLbColor3, "color3");
402 0 : get(m_pCbx4, "cbx4");
403 0 : m_pQSet4 = VclPtr<MaskSet>::Create(this, pGrid);
404 0 : m_pQSet4->set_grid_left_attach(1);
405 0 : m_pQSet4->set_grid_top_attach(4);
406 0 : m_pQSet4->Show();
407 0 : get(m_pSp4, "tol4");
408 0 : get(m_pLbColor4, "color4");
409 0 : get(m_pCbxTrans, "cbx5");
410 0 : get(m_pLbColorTrans, "color5");
411 :
412 : //temp fill it to get optimal size
413 0 : m_pLbColor1->Fill(XColorList::GetStdColorList());
414 0 : m_pLbColor1->set_width_request(m_pLbColor1->get_preferred_size().Width());
415 0 : m_pLbColor1->Clear();
416 : //clear again
417 :
418 0 : m_pTbxPipette->SetSelectHdl( LINK( pData, MaskData, PipetteHdl ) );
419 0 : m_pBtnExec->SetClickHdl( LINK( pData, MaskData, ExecHdl ) );
420 :
421 0 : m_pCbx1->SetClickHdl( LINK( pData, MaskData, CbxHdl ) );
422 0 : m_pCbx2->SetClickHdl( LINK( pData, MaskData, CbxHdl ) );
423 0 : m_pCbx3->SetClickHdl( LINK( pData, MaskData, CbxHdl ) );
424 0 : m_pCbx4->SetClickHdl( LINK( pData, MaskData, CbxHdl ) );
425 0 : m_pCbxTrans->SetClickHdl( LINK( pData, MaskData, CbxTransHdl ) );
426 :
427 0 : SetAccessibleNames ();
428 :
429 0 : m_pLbColor1->SetGetFocusHdl( LINK( pData, MaskData, FocusLbHdl ) );
430 0 : m_pLbColor2->SetGetFocusHdl( LINK( pData, MaskData, FocusLbHdl ) );
431 0 : m_pLbColor3->SetGetFocusHdl( LINK( pData, MaskData, FocusLbHdl ) );
432 0 : m_pLbColor4->SetGetFocusHdl( LINK( pData, MaskData, FocusLbHdl ) );
433 0 : m_pLbColorTrans->Disable();
434 :
435 0 : m_pQSet1->SetStyle( m_pQSet1->GetStyle() | WB_DOUBLEBORDER | WB_ITEMBORDER );
436 0 : m_pQSet1->SetColCount( 1 );
437 0 : m_pQSet1->SetLineCount( 1 );
438 0 : OUString sColorPalette (BMP_RESID( RID_SVXDLG_BMPMASK_STR_PALETTE));
439 0 : OUString sColorPaletteN;
440 0 : sColorPaletteN = sColorPalette;
441 0 : sColorPaletteN += " 1";
442 0 : m_pQSet1->InsertItem( 1, aPipetteColor, sColorPaletteN);
443 0 : m_pQSet1->SelectItem( 1 );
444 :
445 0 : m_pQSet2->SetStyle( m_pQSet2->GetStyle() | WB_DOUBLEBORDER | WB_ITEMBORDER );
446 0 : m_pQSet2->SetColCount( 1 );
447 0 : m_pQSet2->SetLineCount( 1 );
448 0 : sColorPaletteN = sColorPalette;
449 0 : sColorPaletteN += " 2";
450 0 : m_pQSet2->InsertItem( 1, aPipetteColor, sColorPaletteN);
451 0 : m_pQSet2->SelectItem( 0 );
452 :
453 0 : m_pQSet3->SetStyle( m_pQSet3->GetStyle() | WB_DOUBLEBORDER | WB_ITEMBORDER );
454 0 : m_pQSet3->SetColCount( 1 );
455 0 : m_pQSet3->SetLineCount( 1 );
456 0 : sColorPaletteN = sColorPalette;
457 0 : sColorPaletteN += " 3";
458 0 : m_pQSet3->InsertItem( 1, aPipetteColor, sColorPaletteN);
459 0 : m_pQSet3->SelectItem( 0 );
460 :
461 0 : m_pQSet4->SetStyle( m_pQSet4->GetStyle() | WB_DOUBLEBORDER | WB_ITEMBORDER );
462 0 : m_pQSet4->SetColCount( 1 );
463 0 : m_pQSet4->SetLineCount( 1 );
464 0 : sColorPaletteN = sColorPalette;
465 0 : sColorPaletteN += " 4";
466 0 : m_pQSet4->InsertItem( 1, aPipetteColor, sColorPaletteN);
467 0 : m_pQSet4->SelectItem( 0 );
468 :
469 0 : m_pQSet1->Show();
470 0 : m_pQSet2->Show();
471 0 : m_pQSet3->Show();
472 0 : m_pQSet4->Show();
473 0 : }
474 :
475 0 : SvxBmpMask::~SvxBmpMask()
476 : {
477 0 : disposeOnce();
478 0 : }
479 :
480 0 : void SvxBmpMask::dispose()
481 : {
482 0 : m_pQSet1.disposeAndClear();
483 0 : m_pQSet2.disposeAndClear();
484 0 : m_pQSet3.disposeAndClear();
485 0 : m_pQSet4.disposeAndClear();
486 0 : m_pCtlPipette.disposeAndClear();
487 0 : delete pData;
488 0 : pData = NULL;
489 0 : m_pTbxPipette.clear();
490 0 : m_pBtnExec.clear();
491 0 : m_pCbx1.clear();
492 0 : m_pSp1.clear();
493 0 : m_pLbColor1.clear();
494 0 : m_pCbx2.clear();
495 0 : m_pSp2.clear();
496 0 : m_pLbColor2.clear();
497 0 : m_pCbx3.clear();
498 0 : m_pSp3.clear();
499 0 : m_pLbColor3.clear();
500 0 : m_pCbx4.clear();
501 0 : m_pSp4.clear();
502 0 : m_pLbColor4.clear();
503 0 : m_pCbxTrans.clear();
504 0 : m_pLbColorTrans.clear();
505 0 : aSelItem.dispose();
506 0 : SfxDockingWindow::dispose();
507 0 : }
508 :
509 : /** is called by a MaskSet when it is selected */
510 0 : void SvxBmpMask::onSelect( MaskSet* pSet )
511 : {
512 : // now deselect all other value sets
513 0 : if( pSet != m_pQSet1 )
514 0 : m_pQSet1->SelectItem( 0 );
515 :
516 0 : if( pSet != m_pQSet2 )
517 0 : m_pQSet2->SelectItem( 0 );
518 :
519 0 : if( pSet != m_pQSet3 )
520 0 : m_pQSet3->SelectItem( 0 );
521 :
522 0 : if( pSet != m_pQSet4 )
523 0 : m_pQSet4->SelectItem( 0 );
524 0 : }
525 :
526 0 : bool SvxBmpMask::Close()
527 : {
528 0 : SfxBoolItem aItem2( SID_BMPMASK_PIPETTE, false );
529 0 : GetBindings().GetDispatcher()->Execute( SID_BMPMASK_PIPETTE, OWN_CALLMODE, &aItem2, 0L );
530 :
531 0 : return SfxDockingWindow::Close();
532 : }
533 :
534 0 : bool SvxBmpMask::NeedsColorList() const
535 : {
536 0 : return ( m_pLbColor1->GetEntryCount() == 0 );
537 : }
538 :
539 0 : void SvxBmpMask::SetColorList( const XColorListRef &pList )
540 : {
541 0 : if ( pList.is() && ( pList != pColLst ) )
542 : {
543 0 : const OUString aTransp(BMP_RESID(RID_SVXDLG_BMPMASK_STR_TRANSP).toString());
544 :
545 0 : pColLst = pList;
546 :
547 0 : m_pLbColorTrans->Fill( pColLst );
548 0 : m_pLbColorTrans->SelectEntryPos( 0 );
549 :
550 0 : m_pLbColor1->Fill( pColLst );
551 0 : m_pLbColor1->InsertEntry( TRANSP_COL, aTransp, 0 );
552 0 : m_pLbColor1->SelectEntryPos( 0 );
553 :
554 0 : m_pLbColor2->Fill( pColLst );
555 0 : m_pLbColor2->InsertEntry( TRANSP_COL, aTransp, 0 );
556 0 : m_pLbColor2->SelectEntryPos( 0 );
557 :
558 0 : m_pLbColor3->Fill( pColLst );
559 0 : m_pLbColor3->InsertEntry( TRANSP_COL, aTransp, 0 );
560 0 : m_pLbColor3->SelectEntryPos( 0 );
561 :
562 0 : m_pLbColor4->Fill( pColLst );
563 0 : m_pLbColor4->InsertEntry( TRANSP_COL, aTransp, 0 );
564 0 : m_pLbColor4->SelectEntryPos( 0 );
565 : }
566 0 : }
567 :
568 0 : void SvxBmpMask::SetColor( const Color& rColor )
569 : {
570 0 : aPipetteColor = rColor;
571 0 : m_pCtlPipette->SetColor( aPipetteColor );
572 0 : }
573 :
574 0 : void SvxBmpMask::PipetteClicked()
575 : {
576 0 : if( m_pQSet1->GetSelectItemId() == 1 )
577 : {
578 0 : m_pCbx1->Check( true );
579 0 : pData->CbxHdl(m_pCbx1);
580 0 : m_pQSet1->SetItemColor( 1, aPipetteColor );
581 : }
582 0 : else if( m_pQSet2->GetSelectItemId() == 1 )
583 : {
584 0 : m_pCbx2->Check( true );
585 0 : pData->CbxHdl(m_pCbx2);
586 0 : m_pQSet2->SetItemColor( 1, aPipetteColor );
587 : }
588 0 : else if( m_pQSet3->GetSelectItemId() == 1 )
589 : {
590 0 : m_pCbx3->Check( true );
591 0 : pData->CbxHdl(m_pCbx3);
592 0 : m_pQSet3->SetItemColor( 1, aPipetteColor );
593 : }
594 0 : else if( m_pQSet4->GetSelectItemId() == 1 )
595 : {
596 0 : m_pCbx4->Check( true );
597 0 : pData->CbxHdl(m_pCbx4);
598 0 : m_pQSet4->SetItemColor( 1, aPipetteColor );
599 : }
600 :
601 0 : m_pTbxPipette->CheckItem( m_pTbxPipette->GetItemId(0), false );
602 0 : pData->PipetteHdl(m_pTbxPipette);
603 0 : }
604 :
605 0 : void SvxBmpMask::SetExecState( bool bEnable )
606 : {
607 0 : pData->SetExecState( bEnable );
608 :
609 0 : if ( pData->IsExecReady() && pData->IsCbxReady() )
610 0 : m_pBtnExec->Enable();
611 : else
612 0 : m_pBtnExec->Disable();
613 0 : }
614 :
615 :
616 :
617 0 : sal_uInt16 SvxBmpMask::InitColorArrays( Color* pSrcCols, Color* pDstCols, sal_uIntPtr* pTols )
618 : {
619 0 : sal_uInt16 nCount = 0;
620 :
621 0 : if ( m_pCbx1->IsChecked() )
622 : {
623 0 : pSrcCols[nCount] = m_pQSet1->GetItemColor( 1 );
624 0 : pDstCols[nCount] = m_pLbColor1->GetSelectEntryColor();
625 0 : pTols[nCount++] = static_cast<sal_uIntPtr>(m_pSp1->GetValue());
626 : }
627 :
628 0 : if ( m_pCbx2->IsChecked() )
629 : {
630 0 : pSrcCols[nCount] = m_pQSet2->GetItemColor( 1 );
631 0 : pDstCols[nCount] = m_pLbColor2->GetSelectEntryColor();
632 0 : pTols[nCount++] = static_cast<sal_uIntPtr>(m_pSp2->GetValue());
633 : }
634 :
635 0 : if ( m_pCbx3->IsChecked() )
636 : {
637 0 : pSrcCols[nCount] = m_pQSet3->GetItemColor( 1 );
638 0 : pDstCols[nCount] = m_pLbColor3->GetSelectEntryColor();
639 0 : pTols[nCount++] = static_cast<sal_uIntPtr>(m_pSp3->GetValue());
640 : }
641 :
642 0 : if ( m_pCbx4->IsChecked() )
643 : {
644 0 : pSrcCols[nCount] = m_pQSet4->GetItemColor( 1 );
645 0 : pDstCols[nCount] = m_pLbColor4->GetSelectEntryColor();
646 0 : pTols[nCount++] = static_cast<sal_uIntPtr>(m_pSp4->GetValue());
647 : }
648 :
649 0 : return nCount;
650 : }
651 :
652 :
653 :
654 0 : Bitmap SvxBmpMask::ImpMask( const Bitmap& rBitmap )
655 : {
656 0 : Bitmap aBitmap( rBitmap );
657 0 : Color pSrcCols[4];
658 0 : Color pDstCols[4];
659 : sal_uIntPtr pTols[4];
660 0 : const sal_uInt16 nCount = InitColorArrays( pSrcCols, pDstCols, pTols );
661 :
662 0 : EnterWait();
663 0 : aBitmap.Replace( pSrcCols, pDstCols, nCount, pTols );
664 0 : LeaveWait();
665 :
666 0 : return aBitmap;
667 : }
668 :
669 :
670 :
671 0 : BitmapEx SvxBmpMask::ImpMaskTransparent( const BitmapEx& rBitmapEx, const Color& rColor, const long nTol )
672 : {
673 0 : EnterWait();
674 :
675 0 : BitmapEx aBmpEx;
676 0 : Bitmap aMask( rBitmapEx.GetBitmap().CreateMask( rColor, nTol ) );
677 :
678 0 : if( rBitmapEx.IsTransparent() )
679 0 : aMask.CombineSimple( rBitmapEx.GetMask(), BMP_COMBINE_OR );
680 :
681 0 : aBmpEx = BitmapEx( rBitmapEx.GetBitmap(), aMask );
682 0 : LeaveWait();
683 :
684 0 : return aBmpEx;
685 : }
686 :
687 :
688 :
689 0 : Animation SvxBmpMask::ImpMask( const Animation& rAnimation )
690 : {
691 0 : Animation aAnimation( rAnimation );
692 0 : Color pSrcCols[4];
693 0 : Color pDstCols[4];
694 : sal_uIntPtr pTols[4];
695 0 : InitColorArrays( pSrcCols, pDstCols, pTols );
696 0 : sal_uInt16 nAnimationCount = aAnimation.Count();
697 :
698 0 : for( sal_uInt16 i = 0; i < nAnimationCount; i++ )
699 : {
700 0 : AnimationBitmap aAnimBmp( aAnimation.Get( i ) );
701 0 : aAnimBmp.aBmpEx = Mask( aAnimBmp.aBmpEx ).GetBitmapEx();
702 0 : aAnimation.Replace( aAnimBmp, i );
703 0 : }
704 :
705 0 : return aAnimation;
706 : }
707 :
708 :
709 :
710 0 : GDIMetaFile SvxBmpMask::ImpMask( const GDIMetaFile& rMtf )
711 : {
712 0 : GDIMetaFile aMtf;
713 0 : Color pSrcCols[4];
714 0 : Color pDstCols[4];
715 : sal_uIntPtr pTols[4];
716 0 : sal_uInt16 nCount = InitColorArrays( pSrcCols, pDstCols, pTols );
717 :
718 : // If no color is selected, we copy only the Mtf
719 0 : if( !nCount )
720 0 : aMtf = rMtf;
721 : else
722 : {
723 : bool pTrans[4];
724 0 : Color aCol;
725 : long nR;
726 : long nG;
727 : long nB;
728 0 : boost::scoped_array<long> pMinR(new long[nCount]);
729 0 : boost::scoped_array<long> pMaxR(new long[nCount]);
730 0 : boost::scoped_array<long> pMinG(new long[nCount]);
731 0 : boost::scoped_array<long> pMaxG(new long[nCount]);
732 0 : boost::scoped_array<long> pMinB(new long[nCount]);
733 0 : boost::scoped_array<long> pMaxB(new long[nCount]);
734 : sal_uInt16 i;
735 :
736 0 : aMtf.SetPrefSize( rMtf.GetPrefSize() );
737 0 : aMtf.SetPrefMapMode( rMtf.GetPrefMapMode() );
738 :
739 : // Prepare Color comparison array
740 0 : for( i = 0; i < nCount; i++ )
741 : {
742 0 : long nTol = ( pTols[i] * 255L ) / 100L;
743 :
744 0 : long nVal = ( (long) pSrcCols[i].GetRed() );
745 0 : pMinR[i] = std::max( nVal - nTol, 0L );
746 0 : pMaxR[i] = std::min( nVal + nTol, 255L );
747 :
748 0 : nVal = ( (long) pSrcCols[i].GetGreen() );
749 0 : pMinG[i] = std::max( nVal - nTol, 0L );
750 0 : pMaxG[i] = std::min( nVal + nTol, 255L );
751 :
752 0 : nVal = ( (long) pSrcCols[i].GetBlue() );
753 0 : pMinB[i] = std::max( nVal - nTol, 0L );
754 0 : pMaxB[i] = std::min( nVal + nTol, 255L );
755 :
756 0 : pTrans[ i ] = ( pDstCols[ i ] == TRANSP_COL );
757 : }
758 :
759 : // Investigate actions and if necessary replace colors
760 0 : for( size_t nAct = 0, nActCount = rMtf.GetActionSize(); nAct < nActCount; nAct++ )
761 : {
762 0 : MetaAction* pAction = rMtf.GetAction( nAct );
763 :
764 0 : bool bReplace = false;
765 :
766 0 : switch( pAction->GetType() )
767 : {
768 : case( MetaActionType::PIXEL ):
769 : {
770 0 : MetaPixelAction* pAct = static_cast<MetaPixelAction*>(pAction);
771 :
772 0 : aCol = pAct->GetColor();
773 0 : TEST_COLS();
774 :
775 0 : if( bReplace )
776 0 : pAct = new MetaPixelAction( pAct->GetPoint(), aCol );
777 : else
778 0 : pAct->Duplicate();
779 :
780 0 : aMtf.AddAction( pAct );
781 : }
782 0 : break;
783 :
784 : case( MetaActionType::LINECOLOR ):
785 : {
786 0 : MetaLineColorAction* pAct = static_cast<MetaLineColorAction*>(pAction);
787 :
788 0 : aCol = pAct->GetColor();
789 0 : TEST_COLS();
790 :
791 0 : if( bReplace )
792 0 : pAct = new MetaLineColorAction( aCol, !pTrans[ i ] );
793 : else
794 0 : pAct->Duplicate();
795 :
796 0 : aMtf.AddAction( pAct );
797 : }
798 0 : break;
799 :
800 : case( MetaActionType::FILLCOLOR ):
801 : {
802 0 : MetaFillColorAction* pAct = static_cast<MetaFillColorAction*>(pAction);
803 :
804 0 : aCol = pAct->GetColor();
805 0 : TEST_COLS();
806 :
807 0 : if( bReplace )
808 0 : pAct = new MetaFillColorAction( aCol, !pTrans[ i ] );
809 : else
810 0 : pAct->Duplicate();
811 :
812 0 : aMtf.AddAction( pAct );
813 : }
814 0 : break;
815 :
816 : case( MetaActionType::TEXTCOLOR ):
817 : {
818 0 : MetaTextColorAction* pAct = static_cast<MetaTextColorAction*>(pAction);
819 :
820 0 : aCol = pAct->GetColor();
821 0 : TEST_COLS();
822 :
823 0 : if( bReplace )
824 0 : pAct = new MetaTextColorAction( aCol );
825 : else
826 0 : pAct->Duplicate();
827 :
828 0 : aMtf.AddAction( pAct );
829 : }
830 0 : break;
831 :
832 : case( MetaActionType::TEXTFILLCOLOR ):
833 : {
834 0 : MetaTextFillColorAction* pAct = static_cast<MetaTextFillColorAction*>(pAction);
835 :
836 0 : aCol = pAct->GetColor();
837 0 : TEST_COLS();
838 :
839 0 : if( bReplace )
840 0 : pAct = new MetaTextFillColorAction( aCol, !pTrans[ i ] );
841 : else
842 0 : pAct->Duplicate();
843 :
844 0 : aMtf.AddAction( pAct );
845 : }
846 0 : break;
847 :
848 : case( MetaActionType::FONT ):
849 : {
850 0 : MetaFontAction* pAct = static_cast<MetaFontAction*>(pAction);
851 0 : vcl::Font aFont( pAct->GetFont() );
852 :
853 0 : aCol = aFont.GetColor();
854 0 : TEST_COLS();
855 :
856 0 : if( bReplace )
857 : {
858 0 : aFont.SetColor( aCol );
859 0 : pAct = new MetaFontAction( aFont );
860 : }
861 : else
862 0 : pAct->Duplicate();
863 :
864 0 : aMtf.AddAction( pAct );
865 : }
866 0 : break;
867 :
868 : case( MetaActionType::WALLPAPER ):
869 : {
870 0 : MetaWallpaperAction* pAct = static_cast<MetaWallpaperAction*>(pAction);
871 0 : Wallpaper aWall( pAct->GetWallpaper() );
872 :
873 0 : aCol = aWall.GetColor();
874 0 : TEST_COLS();
875 :
876 0 : if( bReplace )
877 : {
878 0 : aWall.SetColor( aCol );
879 0 : pAct = new MetaWallpaperAction( pAct->GetRect(), aWall );
880 : }
881 : else
882 0 : pAct->Duplicate();
883 :
884 0 : aMtf.AddAction( pAct );
885 : }
886 0 : break;
887 :
888 : case( MetaActionType::BMP ):
889 : {
890 0 : MetaBmpAction* pAct = static_cast<MetaBmpAction*>(pAction);
891 0 : const Bitmap aBmp( Mask( pAct->GetBitmap() ).GetBitmap() );
892 :
893 0 : pAct = new MetaBmpAction( pAct->GetPoint(), aBmp );
894 0 : aMtf.AddAction( pAct );
895 : }
896 0 : break;
897 :
898 : case( MetaActionType::BMPSCALE ):
899 : {
900 0 : MetaBmpScaleAction* pAct = static_cast<MetaBmpScaleAction*>(pAction);
901 0 : const Bitmap aBmp( Mask( pAct->GetBitmap() ).GetBitmap() );
902 :
903 0 : pAct = new MetaBmpScaleAction( pAct->GetPoint(), pAct->GetSize(), aBmp );
904 0 : aMtf.AddAction( pAct );
905 : }
906 0 : break;
907 :
908 : case( MetaActionType::BMPSCALEPART ):
909 : {
910 0 : MetaBmpScalePartAction* pAct = static_cast<MetaBmpScalePartAction*>(pAction);
911 0 : const Bitmap aBmp( Mask( pAct->GetBitmap() ).GetBitmap() );
912 :
913 : pAct = new MetaBmpScalePartAction( pAct->GetDestPoint(), pAct->GetDestSize(),
914 0 : pAct->GetSrcPoint(), pAct->GetSrcSize(), aBmp );
915 0 : aMtf.AddAction( pAct );
916 : }
917 0 : break;
918 :
919 : case( MetaActionType::BMPEX ):
920 : {
921 0 : MetaBmpExAction* pAct = static_cast<MetaBmpExAction*>(pAction);
922 0 : const BitmapEx aBmpEx( Mask( pAct->GetBitmapEx() ).GetBitmapEx() );
923 :
924 0 : pAct = new MetaBmpExAction( pAct->GetPoint(), aBmpEx );
925 0 : aMtf.AddAction( pAct );
926 : }
927 0 : break;
928 :
929 : case( MetaActionType::BMPEXSCALE ):
930 : {
931 0 : MetaBmpExScaleAction* pAct = static_cast<MetaBmpExScaleAction*>(pAction);
932 0 : const BitmapEx aBmpEx( Mask( pAct->GetBitmapEx() ).GetBitmapEx() );
933 :
934 0 : pAct = new MetaBmpExScaleAction( pAct->GetPoint(), pAct->GetSize(), aBmpEx );
935 0 : aMtf.AddAction( pAct );
936 : }
937 0 : break;
938 :
939 : case( MetaActionType::BMPEXSCALEPART ):
940 : {
941 0 : MetaBmpExScalePartAction* pAct = static_cast<MetaBmpExScalePartAction*>(pAction);
942 0 : const BitmapEx aBmpEx( Mask( pAct->GetBitmapEx() ).GetBitmapEx() );
943 :
944 : pAct = new MetaBmpExScalePartAction( pAct->GetDestPoint(), pAct->GetDestSize(),
945 0 : pAct->GetSrcPoint(), pAct->GetSrcSize(), aBmpEx );
946 0 : aMtf.AddAction( pAct );
947 : }
948 0 : break;
949 :
950 : default:
951 : {
952 0 : pAction->Duplicate();
953 0 : aMtf.AddAction( pAction );
954 : }
955 0 : break;
956 : }
957 0 : }
958 : }
959 :
960 0 : LeaveWait();
961 :
962 0 : return aMtf;
963 : }
964 :
965 :
966 :
967 0 : BitmapEx SvxBmpMask::ImpReplaceTransparency( const BitmapEx& rBmpEx, const Color& rColor )
968 : {
969 0 : if( rBmpEx.IsTransparent() )
970 : {
971 0 : Bitmap aBmp( rBmpEx.GetBitmap() );
972 0 : aBmp.Replace( rBmpEx.GetMask(), rColor );
973 0 : return aBmp;
974 : }
975 : else
976 0 : return rBmpEx;
977 : }
978 :
979 :
980 :
981 0 : Animation SvxBmpMask::ImpReplaceTransparency( const Animation& rAnim, const Color& rColor )
982 : {
983 0 : Animation aAnimation( rAnim );
984 0 : sal_uInt16 nAnimationCount = aAnimation.Count();
985 :
986 0 : for( sal_uInt16 i = 0; i < nAnimationCount; i++ )
987 : {
988 0 : AnimationBitmap aAnimBmp( aAnimation.Get( i ) );
989 0 : aAnimBmp.aBmpEx = ImpReplaceTransparency( aAnimBmp.aBmpEx, rColor );
990 0 : aAnimation.Replace( aAnimBmp, i );
991 0 : }
992 :
993 0 : return aAnimation;
994 : }
995 :
996 :
997 :
998 0 : GDIMetaFile SvxBmpMask::ImpReplaceTransparency( const GDIMetaFile& rMtf, const Color& rColor )
999 : {
1000 0 : ScopedVclPtrInstance< VirtualDevice > pVDev;
1001 0 : GDIMetaFile aMtf;
1002 0 : const MapMode& rPrefMap = rMtf.GetPrefMapMode();
1003 0 : const Size& rPrefSize = rMtf.GetPrefSize();
1004 0 : const size_t nActionCount = rMtf.GetActionSize();
1005 :
1006 0 : pVDev->EnableOutput( false );
1007 0 : aMtf.Record( pVDev );
1008 0 : aMtf.SetPrefSize( rPrefSize );
1009 0 : aMtf.SetPrefMapMode( rPrefMap );
1010 0 : pVDev->SetLineColor( rColor );
1011 0 : pVDev->SetFillColor( rColor );
1012 :
1013 : // retrieve one action at the time; first
1014 : // set the whole area to the replacement color.
1015 0 : pVDev->DrawRect( Rectangle( rPrefMap.GetOrigin(), rPrefSize ) );
1016 0 : for ( size_t i = 0; i < nActionCount; i++ )
1017 : {
1018 0 : MetaAction* pAct = rMtf.GetAction( i );
1019 :
1020 0 : pAct->Duplicate();
1021 0 : aMtf.AddAction( pAct );
1022 : }
1023 :
1024 0 : aMtf.Stop();
1025 0 : aMtf.WindStart();
1026 :
1027 0 : return aMtf;
1028 : }
1029 :
1030 :
1031 :
1032 0 : Graphic SvxBmpMask::Mask( const Graphic& rGraphic )
1033 : {
1034 0 : Graphic aGraphic( rGraphic );
1035 0 : const Color aReplColor( m_pLbColorTrans->GetSelectEntryColor() );
1036 :
1037 0 : switch( rGraphic.GetType() )
1038 : {
1039 : case( GRAPHIC_BITMAP ):
1040 : {
1041 0 : if( rGraphic.IsAnimated() )
1042 : {
1043 : // Replace transparency?
1044 0 : if ( m_pCbxTrans->IsChecked() )
1045 0 : aGraphic = ImpReplaceTransparency( rGraphic.GetAnimation(), aReplColor );
1046 : else
1047 0 : aGraphic = ImpMask( rGraphic.GetAnimation() );
1048 : }
1049 : else
1050 : {
1051 : // Replace transparency?
1052 0 : if( m_pCbxTrans->IsChecked() )
1053 : {
1054 0 : if( aGraphic.IsTransparent() )
1055 : {
1056 0 : BitmapEx aBmpEx( ImpReplaceTransparency( aGraphic.GetBitmapEx(), aReplColor ) );
1057 0 : const Size aSize( aBmpEx.GetSizePixel() );
1058 :
1059 0 : if( aSize.Width() && aSize.Height() )
1060 0 : aGraphic = aBmpEx;
1061 : }
1062 : }
1063 : else
1064 : {
1065 0 : Color pSrcCols[4];
1066 0 : Color pDstCols[4];
1067 : sal_uIntPtr pTols[4];
1068 0 : sal_uInt16 nCount = InitColorArrays( pSrcCols, pDstCols, pTols );
1069 :
1070 0 : if( nCount )
1071 : {
1072 : // first set all transparent colors
1073 0 : for( sal_uInt16 i = 0; i < nCount; i++ )
1074 : {
1075 : // Do we have a transparent color?
1076 0 : if( pDstCols[i] == TRANSP_COL )
1077 : {
1078 : BitmapEx aBmpEx( ImpMaskTransparent( aGraphic.GetBitmapEx(),
1079 0 : pSrcCols[ i ], pTols[ i ] ) );
1080 0 : const Size aSize( aBmpEx.GetSizePixel() );
1081 :
1082 0 : if( aSize.Width() && aSize.Height() )
1083 0 : aGraphic = aBmpEx;
1084 : }
1085 : }
1086 :
1087 : // now replace it again with the normal colors
1088 0 : Bitmap aBitmap( ImpMask( aGraphic.GetBitmap() ) );
1089 0 : Size aSize( aBitmap.GetSizePixel() );
1090 :
1091 0 : if ( aSize.Width() && aSize.Height() )
1092 : {
1093 0 : if ( aGraphic.IsTransparent() )
1094 0 : aGraphic = Graphic( BitmapEx( aBitmap, aGraphic.GetBitmapEx().GetMask() ) );
1095 : else
1096 0 : aGraphic = aBitmap;
1097 0 : }
1098 : }
1099 : }
1100 : }
1101 : }
1102 0 : break;
1103 :
1104 : case( GRAPHIC_GDIMETAFILE ):
1105 : {
1106 0 : GDIMetaFile aMtf( aGraphic.GetGDIMetaFile() );
1107 :
1108 : // Replace transparency?
1109 0 : if( m_pCbxTrans->IsChecked() )
1110 0 : aMtf = ImpReplaceTransparency( aMtf, aReplColor );
1111 : else
1112 0 : aMtf = ImpMask( aMtf );
1113 :
1114 0 : Size aSize( aMtf.GetPrefSize() );
1115 0 : if ( aSize.Width() && aSize.Height() )
1116 0 : aGraphic = Graphic( aMtf );
1117 : else
1118 0 : aGraphic = rGraphic;
1119 : }
1120 0 : break;
1121 :
1122 : default:
1123 0 : aGraphic = rGraphic;
1124 0 : break;
1125 : }
1126 :
1127 0 : if( aGraphic != rGraphic )
1128 : {
1129 0 : aGraphic.SetPrefSize( rGraphic.GetPrefSize() );
1130 0 : aGraphic.SetPrefMapMode( rGraphic.GetPrefMapMode() );
1131 : }
1132 :
1133 0 : return aGraphic;
1134 : }
1135 :
1136 0 : bool SvxBmpMask::IsEyedropping() const
1137 : {
1138 0 : return m_pTbxPipette->IsItemChecked( m_pTbxPipette->GetItemId(0) );
1139 : }
1140 :
1141 : /** Set an accessible name for the source color check boxes. Without this
1142 : the lengthy description is read.
1143 : */
1144 0 : void SvxBmpMask::SetAccessibleNames()
1145 : {
1146 0 : OUString sSourceColor(BMP_RESID(RID_SVXDLG_BMPMASK_STR_SOURCECOLOR).toString());
1147 0 : OUString sSourceColorN;
1148 :
1149 0 : sSourceColorN = sSourceColor;
1150 0 : sSourceColorN += " 1";
1151 0 : m_pCbx1->SetAccessibleName (sSourceColorN);
1152 :
1153 0 : sSourceColorN = sSourceColor;
1154 0 : sSourceColorN += " 2";
1155 0 : m_pCbx2->SetAccessibleName (sSourceColorN);
1156 :
1157 0 : sSourceColorN = sSourceColor;
1158 0 : sSourceColorN += " 3";
1159 0 : m_pCbx3->SetAccessibleName (sSourceColorN);
1160 :
1161 0 : sSourceColorN = sSourceColor;
1162 0 : sSourceColorN += " 4";
1163 0 : m_pCbx4->SetAccessibleName (sSourceColorN);
1164 : // set the accessible name for valueset
1165 0 : OUString sColorPalette (BMP_RESID( RID_SVXDLG_BMPMASK_STR_PALETTE));
1166 0 : OUString sColorPaletteN;
1167 0 : sColorPaletteN = sColorPalette;
1168 0 : sColorPaletteN += " 1";
1169 0 : m_pQSet1->SetText (sColorPaletteN);
1170 0 : sColorPaletteN = sColorPalette;
1171 0 : sColorPaletteN += " 2";
1172 0 : m_pQSet2->SetText (sColorPaletteN);
1173 0 : sColorPaletteN = sColorPalette;
1174 0 : sColorPaletteN += " 3";
1175 0 : m_pQSet3->SetText (sColorPaletteN);
1176 0 : sColorPaletteN = sColorPalette;
1177 0 : sColorPaletteN += " 4";
1178 0 : m_pQSet4->SetText (sColorPaletteN);
1179 : // set the accessible for replace with spin boxes.
1180 0 : OUString sTolerance(BMP_RESID( RID_SVXDLG_BMPMASK_STR_TOLERANCE));
1181 0 : OUString sToleranceN;
1182 0 : sToleranceN = sTolerance;
1183 0 : sToleranceN += " 1";
1184 0 : m_pSp1->SetAccessibleName (sToleranceN);
1185 0 : sToleranceN = sTolerance;
1186 0 : sToleranceN += " 2";
1187 0 : m_pSp2->SetAccessibleName (sToleranceN);
1188 0 : sToleranceN = sTolerance;
1189 0 : sToleranceN += " 3";
1190 0 : m_pSp3->SetAccessibleName (sToleranceN);
1191 0 : sToleranceN = sTolerance;
1192 0 : sToleranceN += " 4";
1193 0 : m_pSp4->SetAccessibleName (sToleranceN);
1194 : // set the accessible for replace with combo boxes.
1195 0 : OUString sReplaceWith(BMP_RESID( RID_SVXDLG_BMPMASK_STR_REPLACEWITH));
1196 0 : OUString sReplaceWithN;
1197 0 : sReplaceWithN = sReplaceWith;
1198 0 : sReplaceWithN += " 1";
1199 0 : m_pLbColor1->SetAccessibleName (sReplaceWithN);
1200 0 : sReplaceWithN = sReplaceWith;
1201 0 : sReplaceWithN += " 2";
1202 0 : m_pLbColor2->SetAccessibleName (sReplaceWithN);
1203 0 : sReplaceWithN = sReplaceWith;
1204 0 : sReplaceWithN += " 3";
1205 0 : m_pLbColor3->SetAccessibleName (sReplaceWithN);
1206 0 : sReplaceWithN = sReplaceWith;
1207 0 : sReplaceWithN += " 4";
1208 0 : m_pLbColor4->SetAccessibleName (sReplaceWithN);
1209 390 : }
1210 :
1211 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|