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 :
21 : #include <sdr/contact/viewobjectcontactofsdrpage.hxx>
22 : #include <svx/sdr/contact/displayinfo.hxx>
23 : #include <sdr/contact/viewcontactofsdrpage.hxx>
24 : #include <svx/svdview.hxx>
25 : #include <svx/svdpage.hxx>
26 : #include <svx/sdr/contact/objectcontact.hxx>
27 : #include <drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx>
28 : #include <basegfx/polygon/b2dpolygontools.hxx>
29 : #include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
30 : #include <drawinglayer/primitive2d/gridprimitive2d.hxx>
31 : #include <drawinglayer/primitive2d/helplineprimitive2d.hxx>
32 : #include <basegfx/polygon/b2dpolygon.hxx>
33 : #include <sdr/primitive2d/sdrprimitivetools.hxx>
34 :
35 : using namespace com::sun::star;
36 :
37 : namespace sdr { namespace contact {
38 :
39 2806 : const SdrPage& ViewObjectContactOfPageSubObject::getPage() const
40 : {
41 2806 : return static_cast< ViewContactOfPageSubObject& >(GetViewContact()).getPage();
42 : }
43 :
44 38231 : ViewObjectContactOfPageSubObject::ViewObjectContactOfPageSubObject(ObjectContact& rObjectContact, ViewContact& rViewContact)
45 38231 : : ViewObjectContact(rObjectContact, rViewContact)
46 : {
47 38231 : }
48 :
49 37978 : ViewObjectContactOfPageSubObject::~ViewObjectContactOfPageSubObject()
50 : {
51 37978 : }
52 :
53 457538 : bool ViewObjectContactOfPageSubObject::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const
54 : {
55 457538 : if(rDisplayInfo.GetSubContentActive())
56 : {
57 7760 : return false;
58 : }
59 :
60 449778 : if(rDisplayInfo.GetControlLayerProcessingActive())
61 : {
62 153024 : return false;
63 : }
64 :
65 296754 : if(!rDisplayInfo.GetPageProcessingActive())
66 : {
67 287340 : return false;
68 : }
69 :
70 9414 : if(GetObjectContact().isOutputToPrinter())
71 : {
72 0 : return false;
73 : }
74 :
75 9414 : if(!GetObjectContact().TryToGetSdrPageView())
76 : {
77 0 : return false;
78 : }
79 :
80 9414 : return true;
81 : }
82 :
83 3431 : bool ViewObjectContactOfPageSubObject::isPrimitiveGhosted(const DisplayInfo& /*rDisplayInfo*/) const
84 : {
85 : // suppress ghosted for page parts
86 3431 : return false;
87 : }
88 :
89 3513 : ViewObjectContactOfPageBackground::ViewObjectContactOfPageBackground(ObjectContact& rObjectContact, ViewContact& rViewContact)
90 3513 : : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact)
91 : {
92 3513 : }
93 :
94 6980 : ViewObjectContactOfPageBackground::~ViewObjectContactOfPageBackground()
95 : {
96 6980 : }
97 :
98 45909 : bool ViewObjectContactOfPageBackground::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const
99 : {
100 45909 : if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo))
101 : {
102 44890 : return false;
103 : }
104 :
105 : // no page background for preview renderers
106 1019 : if(GetObjectContact().IsPreviewRenderer())
107 : {
108 181 : return false;
109 : }
110 :
111 838 : return true;
112 : }
113 :
114 1440 : drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfPageBackground::createPrimitive2DSequence(const DisplayInfo& /*rDisplayInfo*/) const
115 : {
116 : // Initialize background. Dependent of IsPageVisible, use ApplicationBackgroundColor or ApplicationDocumentColor. Most
117 : // old renderers for export (html, pdf, gallery, ...) set the page to not visible (SetPageVisible(false)). They expect the
118 : // given OutputDevice to be initialized with the ApplicationDocumentColor then.
119 1440 : const SdrPageView* pPageView = GetObjectContact().TryToGetSdrPageView();
120 1440 : drawinglayer::primitive2d::Primitive2DSequence xRetval;
121 :
122 1440 : if(pPageView)
123 : {
124 1440 : const SdrView& rView = pPageView->GetView();
125 1440 : Color aInitColor;
126 :
127 1440 : if(rView.IsPageVisible())
128 : {
129 801 : aInitColor = pPageView->GetApplicationBackgroundColor();
130 : }
131 : else
132 : {
133 639 : aInitColor = pPageView->GetApplicationDocumentColor();
134 :
135 639 : if(Color(COL_AUTO) == aInitColor)
136 : {
137 639 : const svtools::ColorConfig aColorConfig;
138 639 : aInitColor = aColorConfig.GetColorValue(svtools::DOCCOLOR).nColor;
139 : }
140 : }
141 :
142 : // init background with InitColor
143 1440 : xRetval.realloc(1);
144 1440 : const basegfx::BColor aRGBColor(aInitColor.getBColor());
145 1440 : xRetval[0] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::BackgroundColorPrimitive2D(aRGBColor));
146 : }
147 :
148 1440 : return xRetval;
149 : }
150 :
151 3101 : ViewObjectContactOfMasterPage::ViewObjectContactOfMasterPage(ObjectContact& rObjectContact, ViewContact& rViewContact)
152 3101 : : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact)
153 : {
154 3101 : }
155 :
156 6156 : ViewObjectContactOfMasterPage::~ViewObjectContactOfMasterPage()
157 : {
158 6156 : }
159 :
160 44357 : bool ViewObjectContactOfMasterPage::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const
161 : {
162 44357 : if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo))
163 : {
164 44114 : return false;
165 : }
166 :
167 : // this object is only used for MasterPages. When not the MasterPage is
168 : // displayed as a page, but another page is using it as sub-object, the
169 : // geometry needs to be hidden
170 243 : if(rDisplayInfo.GetSubContentActive())
171 : {
172 0 : return false;
173 : }
174 :
175 243 : return true;
176 : }
177 :
178 3513 : ViewObjectContactOfPageFill::ViewObjectContactOfPageFill(ObjectContact& rObjectContact, ViewContact& rViewContact)
179 3513 : : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact)
180 : {
181 3513 : }
182 :
183 6980 : ViewObjectContactOfPageFill::~ViewObjectContactOfPageFill()
184 : {
185 6980 : }
186 :
187 45909 : bool ViewObjectContactOfPageFill::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const
188 : {
189 45909 : if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo))
190 : {
191 44890 : return false;
192 : }
193 :
194 1019 : SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView();
195 :
196 1019 : if(!pSdrPageView)
197 : {
198 0 : return false;
199 : }
200 :
201 1019 : if(!pSdrPageView->GetView().IsPageVisible())
202 : {
203 542 : return false;
204 : }
205 :
206 477 : return true;
207 : }
208 :
209 1079 : drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfPageFill::createPrimitive2DSequence(const DisplayInfo& /*rDisplayInfo*/) const
210 : {
211 1079 : const SdrPageView* pPageView = GetObjectContact().TryToGetSdrPageView();
212 1079 : drawinglayer::primitive2d::Primitive2DSequence xRetval;
213 :
214 1079 : if(pPageView)
215 : {
216 1079 : const SdrPage& rPage = getPage();
217 :
218 1079 : const basegfx::B2DRange aPageFillRange(0.0, 0.0, (double)rPage.GetWdt(), (double)rPage.GetHgt());
219 1079 : const basegfx::B2DPolygon aPageFillPolygon(basegfx::tools::createPolygonFromRect(aPageFillRange));
220 1079 : Color aPageFillColor;
221 :
222 1079 : if(pPageView->GetApplicationDocumentColor() != COL_AUTO)
223 : {
224 0 : aPageFillColor = pPageView->GetApplicationDocumentColor();
225 : }
226 : else
227 : {
228 1079 : const svtools::ColorConfig aColorConfig;
229 1079 : aPageFillColor = aColorConfig.GetColorValue(svtools::DOCCOLOR).nColor;
230 : }
231 :
232 : // create and add primitive
233 1079 : xRetval.realloc(1);
234 2158 : const basegfx::BColor aRGBColor(aPageFillColor.getBColor());
235 2158 : xRetval[0] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D(basegfx::B2DPolyPolygon(aPageFillPolygon), aRGBColor));
236 : }
237 :
238 1079 : return xRetval;
239 : }
240 :
241 3513 : ViewObjectContactOfPageShadow::ViewObjectContactOfPageShadow(ObjectContact& rObjectContact, ViewContact& rViewContact)
242 3513 : : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact)
243 : {
244 3513 : }
245 :
246 6980 : ViewObjectContactOfPageShadow::~ViewObjectContactOfPageShadow()
247 : {
248 6980 : }
249 :
250 45909 : bool ViewObjectContactOfPageShadow::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const
251 : {
252 45909 : if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo))
253 : {
254 44890 : return false;
255 : }
256 :
257 1019 : SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView();
258 :
259 1019 : if(!pSdrPageView)
260 : {
261 0 : return false;
262 : }
263 :
264 1019 : if(!pSdrPageView->GetView().IsPageVisible())
265 : {
266 542 : return false;
267 : }
268 :
269 : // no page shadow for preview renderers
270 477 : if(GetObjectContact().IsPreviewRenderer())
271 : {
272 0 : return false;
273 : }
274 :
275 : // no page shadow for high contrast mode
276 477 : if(GetObjectContact().isDrawModeHighContrast())
277 : {
278 0 : return false;
279 : }
280 :
281 477 : return true;
282 : }
283 :
284 3513 : ViewObjectContactOfOuterPageBorder::ViewObjectContactOfOuterPageBorder(ObjectContact& rObjectContact, ViewContact& rViewContact)
285 3513 : : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact)
286 : {
287 3513 : }
288 :
289 6980 : ViewObjectContactOfOuterPageBorder::~ViewObjectContactOfOuterPageBorder()
290 : {
291 6980 : }
292 :
293 45909 : bool ViewObjectContactOfOuterPageBorder::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const
294 : {
295 45909 : if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo))
296 : {
297 44890 : return false;
298 : }
299 :
300 1019 : SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView();
301 :
302 1019 : if(!pSdrPageView)
303 : {
304 0 : return false;
305 : }
306 :
307 1019 : const SdrView& rView = pSdrPageView->GetView();
308 :
309 1019 : if(!rView.IsPageVisible() && rView.IsPageBorderVisible())
310 : {
311 303 : return false;
312 : }
313 :
314 716 : return true;
315 : }
316 :
317 3513 : ViewObjectContactOfInnerPageBorder::ViewObjectContactOfInnerPageBorder(ObjectContact& rObjectContact, ViewContact& rViewContact)
318 3513 : : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact)
319 : {
320 3513 : }
321 :
322 6980 : ViewObjectContactOfInnerPageBorder::~ViewObjectContactOfInnerPageBorder()
323 : {
324 6980 : }
325 :
326 45909 : bool ViewObjectContactOfInnerPageBorder::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const
327 : {
328 45909 : if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo))
329 : {
330 44890 : return false;
331 : }
332 :
333 1019 : SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView();
334 :
335 1019 : if(!pSdrPageView)
336 : {
337 0 : return false;
338 : }
339 :
340 1019 : if(!pSdrPageView->GetView().IsBordVisible())
341 : {
342 542 : return false;
343 : }
344 :
345 477 : const SdrPage& rPage = getPage();
346 :
347 477 : if(!rPage.GetLftBorder() && !rPage.GetUppBorder() && !rPage.GetRgtBorder() && !rPage.GetLwrBorder())
348 : {
349 45 : return false;
350 : }
351 :
352 : // no inner page border for preview renderers
353 432 : if(GetObjectContact().IsPreviewRenderer())
354 : {
355 0 : return false;
356 : }
357 :
358 432 : return true;
359 : }
360 :
361 3513 : ViewObjectContactOfPageHierarchy::ViewObjectContactOfPageHierarchy(ObjectContact& rObjectContact, ViewContact& rViewContact)
362 3513 : : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact)
363 : {
364 3513 : }
365 :
366 6980 : ViewObjectContactOfPageHierarchy::~ViewObjectContactOfPageHierarchy()
367 : {
368 6980 : }
369 :
370 45909 : drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfPageHierarchy::getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const
371 : {
372 45909 : drawinglayer::primitive2d::Primitive2DSequence xRetval;
373 :
374 : // process local sub-hierarchy
375 45909 : const sal_uInt32 nSubHierarchyCount(GetViewContact().GetObjectCount());
376 :
377 45909 : if(nSubHierarchyCount)
378 : {
379 12937 : xRetval = getPrimitive2DSequenceSubHierarchy(rDisplayInfo);
380 :
381 12937 : if(xRetval.hasElements())
382 : {
383 : // get ranges
384 3848 : const drawinglayer::geometry::ViewInformation2D& rViewInformation2D(GetObjectContact().getViewInformation2D());
385 3848 : const basegfx::B2DRange aObjectRange(drawinglayer::primitive2d::getB2DRangeFromPrimitive2DSequence(xRetval, rViewInformation2D));
386 3848 : const basegfx::B2DRange aViewRange(rViewInformation2D.getViewport());
387 :
388 : // check geometrical visibility
389 3848 : if(!aViewRange.isEmpty() && !aViewRange.overlaps(aObjectRange))
390 : {
391 : // not visible, release
392 0 : xRetval.realloc(0);
393 : }
394 : }
395 : }
396 :
397 45909 : return xRetval;
398 : }
399 :
400 7026 : ViewObjectContactOfPageGrid::ViewObjectContactOfPageGrid(ObjectContact& rObjectContact, ViewContact& rViewContact)
401 7026 : : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact)
402 : {
403 7026 : }
404 :
405 13960 : ViewObjectContactOfPageGrid::~ViewObjectContactOfPageGrid()
406 : {
407 13960 : }
408 :
409 91818 : bool ViewObjectContactOfPageGrid::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const
410 : {
411 91818 : if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo))
412 : {
413 89780 : return false;
414 : }
415 :
416 2038 : SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView();
417 :
418 2038 : if(!pSdrPageView)
419 : {
420 0 : return false;
421 : }
422 :
423 2038 : const SdrView& rView = pSdrPageView->GetView();
424 :
425 2038 : if(!rView.IsGridVisible())
426 : {
427 2038 : return false;
428 : }
429 :
430 : // no page grid for preview renderers
431 0 : if(GetObjectContact().IsPreviewRenderer())
432 : {
433 0 : return false;
434 : }
435 :
436 0 : if(static_cast< ViewContactOfGrid& >(GetViewContact()).getFront() != (bool)rView.IsGridFront())
437 : {
438 0 : return false;
439 : }
440 :
441 0 : return true;
442 : }
443 :
444 1250 : drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfPageGrid::createPrimitive2DSequence(const DisplayInfo& /*rDisplayInfo*/) const
445 : {
446 1250 : const SdrPageView* pPageView = GetObjectContact().TryToGetSdrPageView();
447 1250 : drawinglayer::primitive2d::Primitive2DSequence xRetval;
448 :
449 1250 : if(pPageView)
450 : {
451 1250 : const SdrView& rView = pPageView->GetView();
452 1250 : const SdrPage& rPage = getPage();
453 1250 : const Color aGridColor(rView.GetGridColor());
454 1250 : const basegfx::BColor aRGBGridColor(aGridColor.getBColor());
455 :
456 2500 : basegfx::B2DHomMatrix aGridMatrix;
457 1250 : aGridMatrix.set(0, 0, (double)(rPage.GetWdt() - (rPage.GetRgtBorder() + rPage.GetLftBorder())));
458 1250 : aGridMatrix.set(1, 1, (double)(rPage.GetHgt() - (rPage.GetLwrBorder() + rPage.GetUppBorder())));
459 1250 : aGridMatrix.set(0, 2, (double)rPage.GetLftBorder());
460 1250 : aGridMatrix.set(1, 2, (double)rPage.GetUppBorder());
461 :
462 1250 : const Size aRaw(rView.GetGridCoarse());
463 1250 : const Size aFine(rView.GetGridFine());
464 1250 : const double fWidthX(aRaw.getWidth());
465 1250 : const double fWidthY(aRaw.getHeight());
466 1250 : const sal_uInt32 nSubdivisionsX(aFine.getWidth() ? aRaw.getWidth() / aFine.getWidth() : 0L);
467 1250 : const sal_uInt32 nSubdivisionsY(aFine.getHeight() ? aRaw.getHeight() / aFine.getHeight() : 0L);
468 :
469 1250 : xRetval.realloc(1);
470 2500 : xRetval[0] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::GridPrimitive2D(
471 : aGridMatrix, fWidthX, fWidthY, 10.0, 3.0, nSubdivisionsX, nSubdivisionsY, aRGBGridColor,
472 5000 : drawinglayer::primitive2d::createDefaultCross_3x3(aRGBGridColor)));
473 : }
474 :
475 1250 : return xRetval;
476 : }
477 :
478 7026 : ViewObjectContactOfPageHelplines::ViewObjectContactOfPageHelplines(ObjectContact& rObjectContact, ViewContact& rViewContact)
479 7026 : : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact)
480 : {
481 7026 : }
482 :
483 13960 : ViewObjectContactOfPageHelplines::~ViewObjectContactOfPageHelplines()
484 : {
485 13960 : }
486 :
487 91818 : bool ViewObjectContactOfPageHelplines::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const
488 : {
489 91818 : if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo))
490 : {
491 89780 : return false;
492 : }
493 :
494 2038 : SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView();
495 :
496 2038 : if(!pSdrPageView)
497 : {
498 0 : return false;
499 : }
500 :
501 2038 : const SdrView& rView = pSdrPageView->GetView();
502 :
503 2038 : if(!rView.IsHlplVisible())
504 : {
505 2038 : return false;
506 : }
507 :
508 : // no helplines for preview renderers
509 0 : if(GetObjectContact().IsPreviewRenderer())
510 : {
511 0 : return false;
512 : }
513 :
514 0 : if(static_cast< ViewContactOfHelplines& >(GetViewContact()).getFront() != (bool)rView.IsHlplFront())
515 : {
516 0 : return false;
517 : }
518 :
519 0 : return true;
520 : }
521 :
522 1812 : drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfPageHelplines::createPrimitive2DSequence(const DisplayInfo& /*rDisplayInfo*/) const
523 : {
524 1812 : drawinglayer::primitive2d::Primitive2DSequence xRetval;
525 1812 : const SdrPageView* pPageView = GetObjectContact().TryToGetSdrPageView();
526 :
527 1812 : if(pPageView)
528 : {
529 1812 : const SdrHelpLineList& rHelpLineList = pPageView->GetHelpLines();
530 1812 : const sal_uInt32 nCount(rHelpLineList.GetCount());
531 :
532 1812 : if(nCount)
533 : {
534 0 : const basegfx::BColor aRGBColorA(1.0, 1.0, 1.0);
535 0 : const basegfx::BColor aRGBColorB(0.0, 0.0, 0.0);
536 0 : xRetval.realloc(nCount);
537 :
538 0 : for(sal_uInt32 a(0L); a < nCount; a++)
539 : {
540 0 : const SdrHelpLine& rHelpLine = rHelpLineList[(sal_uInt16)a];
541 0 : const basegfx::B2DPoint aPosition((double)rHelpLine.GetPos().X(), (double)rHelpLine.GetPos().Y());
542 0 : const double fDiscreteDashLength(4.0);
543 :
544 0 : switch(rHelpLine.GetKind())
545 : {
546 : default : // SDRHELPLINE_POINT
547 : {
548 0 : xRetval[a] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::HelplinePrimitive2D(
549 : aPosition, basegfx::B2DVector(1.0, 0.0), drawinglayer::primitive2d::HELPLINESTYLE2D_POINT,
550 0 : aRGBColorA, aRGBColorB, fDiscreteDashLength));
551 0 : break;
552 : }
553 : case SDRHELPLINE_VERTICAL :
554 : {
555 0 : xRetval[a] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::HelplinePrimitive2D(
556 : aPosition, basegfx::B2DVector(0.0, 1.0), drawinglayer::primitive2d::HELPLINESTYLE2D_LINE,
557 0 : aRGBColorA, aRGBColorB, fDiscreteDashLength));
558 0 : break;
559 : }
560 : case SDRHELPLINE_HORIZONTAL :
561 : {
562 0 : xRetval[a] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::HelplinePrimitive2D(
563 : aPosition, basegfx::B2DVector(1.0, 0.0), drawinglayer::primitive2d::HELPLINESTYLE2D_LINE,
564 0 : aRGBColorA, aRGBColorB, fDiscreteDashLength));
565 0 : break;
566 : }
567 : }
568 0 : }
569 : }
570 : }
571 :
572 1812 : return xRetval;
573 : }
574 :
575 3513 : ViewObjectContactOfSdrPage::ViewObjectContactOfSdrPage(ObjectContact& rObjectContact, ViewContact& rViewContact)
576 3513 : : ViewObjectContact(rObjectContact, rViewContact)
577 : {
578 3513 : }
579 :
580 6980 : ViewObjectContactOfSdrPage::~ViewObjectContactOfSdrPage()
581 : {
582 6980 : }
583 :
584 45909 : drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfSdrPage::getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const
585 : {
586 45909 : drawinglayer::primitive2d::Primitive2DSequence xRetval;
587 :
588 : // process local sub-hierarchy
589 45909 : const sal_uInt32 nSubHierarchyCount(GetViewContact().GetObjectCount());
590 :
591 45909 : if(nSubHierarchyCount)
592 : {
593 : const bool bDoGhostedDisplaying(
594 45909 : GetObjectContact().DoVisualizeEnteredGroup()
595 45909 : && !GetObjectContact().isOutputToPrinter()
596 91818 : && GetObjectContact().getActiveViewContact() == &GetViewContact());
597 :
598 45909 : if(bDoGhostedDisplaying)
599 : {
600 45133 : rDisplayInfo.ClearGhostedDrawMode();
601 : }
602 :
603 : // create object hierarchy
604 45909 : xRetval = getPrimitive2DSequenceSubHierarchy(rDisplayInfo);
605 :
606 45909 : if(xRetval.hasElements())
607 : {
608 : // get ranges
609 4182 : const drawinglayer::geometry::ViewInformation2D& rViewInformation2D(GetObjectContact().getViewInformation2D());
610 4182 : const basegfx::B2DRange aObjectRange(drawinglayer::primitive2d::getB2DRangeFromPrimitive2DSequence(xRetval, rViewInformation2D));
611 4182 : const basegfx::B2DRange aViewRange(rViewInformation2D.getViewport());
612 :
613 : // check geometrical visibility
614 4182 : if(!aViewRange.isEmpty() && !aViewRange.overlaps(aObjectRange))
615 : {
616 : // not visible, release
617 0 : xRetval.realloc(0);
618 : }
619 : }
620 :
621 45909 : if(bDoGhostedDisplaying)
622 : {
623 45133 : rDisplayInfo.SetGhostedDrawMode();
624 : }
625 : }
626 :
627 45909 : return xRetval;
628 : }
629 :
630 651 : }}
631 :
632 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|