1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_svx.hxx" 26 27 #include <svx/sdr/contact/viewobjectcontactofsdrpage.hxx> 28 #include <svx/sdr/contact/displayinfo.hxx> 29 #include <svx/sdr/contact/viewcontactofsdrpage.hxx> 30 #include <svx/svdview.hxx> 31 #include <svx/svdpage.hxx> 32 #include <svx/sdr/contact/objectcontact.hxx> 33 #include <drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx> 34 #include <basegfx/polygon/b2dpolygontools.hxx> 35 #include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> 36 #include <drawinglayer/primitive2d/gridprimitive2d.hxx> 37 #include <drawinglayer/primitive2d/helplineprimitive2d.hxx> 38 #include <basegfx/polygon/b2dpolygon.hxx> 39 #include <svx/sdr/primitive2d/sdrprimitivetools.hxx> 40 41 ////////////////////////////////////////////////////////////////////////////// 42 43 using namespace com::sun::star; 44 45 ////////////////////////////////////////////////////////////////////////////// 46 47 namespace sdr 48 { 49 namespace contact 50 { getPage() const51 const SdrPage& ViewObjectContactOfPageSubObject::getPage() const 52 { 53 return static_cast< ViewContactOfPageSubObject& >(GetViewContact()).getPage(); 54 } 55 ViewObjectContactOfPageSubObject(ObjectContact & rObjectContact,ViewContact & rViewContact)56 ViewObjectContactOfPageSubObject::ViewObjectContactOfPageSubObject(ObjectContact& rObjectContact, ViewContact& rViewContact) 57 : ViewObjectContact(rObjectContact, rViewContact) 58 { 59 } 60 ~ViewObjectContactOfPageSubObject()61 ViewObjectContactOfPageSubObject::~ViewObjectContactOfPageSubObject() 62 { 63 } 64 isPrimitiveVisible(const DisplayInfo & rDisplayInfo) const65 bool ViewObjectContactOfPageSubObject::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const 66 { 67 if(rDisplayInfo.GetSubContentActive()) 68 { 69 return false; 70 } 71 72 if(rDisplayInfo.GetControlLayerProcessingActive()) 73 { 74 return false; 75 } 76 77 if(!rDisplayInfo.GetPageProcessingActive()) 78 { 79 return false; 80 } 81 82 if(GetObjectContact().isOutputToPrinter()) 83 { 84 return false; 85 } 86 87 if(!GetObjectContact().TryToGetSdrPageView()) 88 { 89 return false; 90 } 91 92 return true; 93 } 94 isPrimitiveGhosted(const DisplayInfo &) const95 bool ViewObjectContactOfPageSubObject::isPrimitiveGhosted(const DisplayInfo& /*rDisplayInfo*/) const 96 { 97 // suppress ghosted for page parts 98 return false; 99 } 100 } // end of namespace contact 101 } // end of namespace sdr 102 103 ////////////////////////////////////////////////////////////////////////////// 104 105 namespace sdr 106 { 107 namespace contact 108 { ViewObjectContactOfPageBackground(ObjectContact & rObjectContact,ViewContact & rViewContact)109 ViewObjectContactOfPageBackground::ViewObjectContactOfPageBackground(ObjectContact& rObjectContact, ViewContact& rViewContact) 110 : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact) 111 { 112 } 113 ~ViewObjectContactOfPageBackground()114 ViewObjectContactOfPageBackground::~ViewObjectContactOfPageBackground() 115 { 116 } 117 isPrimitiveVisible(const DisplayInfo & rDisplayInfo) const118 bool ViewObjectContactOfPageBackground::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const 119 { 120 if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo)) 121 { 122 return false; 123 } 124 125 // no page background for preview renderers 126 if(GetObjectContact().IsPreviewRenderer()) 127 { 128 return false; 129 } 130 131 return true; 132 } 133 createPrimitive2DSequence(const DisplayInfo &) const134 drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfPageBackground::createPrimitive2DSequence(const DisplayInfo& /*rDisplayInfo*/) const 135 { 136 // Initialize background. Dependent of IsPageVisible, use ApplicationBackgroundColor or ApplicationDocumentColor. Most 137 // old renderers for export (html, pdf, gallery, ...) set the page to not visible (SetPageVisible(false)). They expect the 138 // given OutputDevice to be initialized with the ApplicationDocumentColor then. 139 const SdrPageView* pPageView = GetObjectContact().TryToGetSdrPageView(); 140 drawinglayer::primitive2d::Primitive2DSequence xRetval; 141 142 if(pPageView) 143 { 144 const SdrView& rView = pPageView->GetView(); 145 Color aInitColor; 146 147 if(rView.IsPageVisible()) 148 { 149 aInitColor = pPageView->GetApplicationBackgroundColor(); 150 } 151 else 152 { 153 aInitColor = pPageView->GetApplicationDocumentColor(); 154 155 if(Color(COL_AUTO) == aInitColor) 156 { 157 const svtools::ColorConfig aColorConfig; 158 aInitColor = aColorConfig.GetColorValue(svtools::DOCCOLOR).nColor; 159 } 160 } 161 162 // init background with InitColor 163 xRetval.realloc(1); 164 const basegfx::BColor aRGBColor(aInitColor.getBColor()); 165 xRetval[0] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::BackgroundColorPrimitive2D(aRGBColor)); 166 } 167 168 return xRetval; 169 } 170 } // end of namespace contact 171 } // end of namespace sdr 172 173 ////////////////////////////////////////////////////////////////////////////// 174 175 namespace sdr 176 { 177 namespace contact 178 { ViewObjectContactOfMasterPage(ObjectContact & rObjectContact,ViewContact & rViewContact)179 ViewObjectContactOfMasterPage::ViewObjectContactOfMasterPage(ObjectContact& rObjectContact, ViewContact& rViewContact) 180 : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact) 181 { 182 } 183 ~ViewObjectContactOfMasterPage()184 ViewObjectContactOfMasterPage::~ViewObjectContactOfMasterPage() 185 { 186 } 187 isPrimitiveVisible(const DisplayInfo & rDisplayInfo) const188 bool ViewObjectContactOfMasterPage::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const 189 { 190 if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo)) 191 { 192 return false; 193 } 194 195 // this object is only used for MasterPages. When not the MasterPage is 196 // displayed as a page, but another page is using it as sub-object, the 197 // geometry needs to be hidden 198 if(rDisplayInfo.GetSubContentActive()) 199 { 200 return false; 201 } 202 203 return true; 204 } 205 } // end of namespace contact 206 } // end of namespace sdr 207 208 ////////////////////////////////////////////////////////////////////////////// 209 210 namespace sdr 211 { 212 namespace contact 213 { ViewObjectContactOfPageFill(ObjectContact & rObjectContact,ViewContact & rViewContact)214 ViewObjectContactOfPageFill::ViewObjectContactOfPageFill(ObjectContact& rObjectContact, ViewContact& rViewContact) 215 : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact) 216 { 217 } 218 ~ViewObjectContactOfPageFill()219 ViewObjectContactOfPageFill::~ViewObjectContactOfPageFill() 220 { 221 } 222 isPrimitiveVisible(const DisplayInfo & rDisplayInfo) const223 bool ViewObjectContactOfPageFill::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const 224 { 225 if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo)) 226 { 227 return false; 228 } 229 230 SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView(); 231 232 if(!pSdrPageView) 233 { 234 return false; 235 } 236 237 if(!pSdrPageView->GetView().IsPageVisible()) 238 { 239 return false; 240 } 241 242 return true; 243 } 244 createPrimitive2DSequence(const DisplayInfo &) const245 drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfPageFill::createPrimitive2DSequence(const DisplayInfo& /*rDisplayInfo*/) const 246 { 247 const SdrPageView* pPageView = GetObjectContact().TryToGetSdrPageView(); 248 drawinglayer::primitive2d::Primitive2DSequence xRetval; 249 250 if(pPageView) 251 { 252 const SdrPage& rPage = getPage(); 253 254 const basegfx::B2DRange aPageFillRange(0.0, 0.0, (double)rPage.GetWdt(), (double)rPage.GetHgt()); 255 const basegfx::B2DPolygon aPageFillPolygon(basegfx::tools::createPolygonFromRect(aPageFillRange)); 256 Color aPageFillColor; 257 258 if(pPageView->GetApplicationDocumentColor() != COL_AUTO) 259 { 260 aPageFillColor = pPageView->GetApplicationDocumentColor(); 261 } 262 else 263 { 264 const svtools::ColorConfig aColorConfig; 265 aPageFillColor = aColorConfig.GetColorValue(svtools::DOCCOLOR).nColor; 266 } 267 268 // create and add primitive 269 xRetval.realloc(1); 270 const basegfx::BColor aRGBColor(aPageFillColor.getBColor()); 271 xRetval[0] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D(basegfx::B2DPolyPolygon(aPageFillPolygon), aRGBColor)); 272 } 273 274 return xRetval; 275 } 276 } // end of namespace contact 277 } // end of namespace sdr 278 279 ////////////////////////////////////////////////////////////////////////////// 280 281 namespace sdr 282 { 283 namespace contact 284 { ViewObjectContactOfPageShadow(ObjectContact & rObjectContact,ViewContact & rViewContact)285 ViewObjectContactOfPageShadow::ViewObjectContactOfPageShadow(ObjectContact& rObjectContact, ViewContact& rViewContact) 286 : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact) 287 { 288 } 289 ~ViewObjectContactOfPageShadow()290 ViewObjectContactOfPageShadow::~ViewObjectContactOfPageShadow() 291 { 292 } 293 isPrimitiveVisible(const DisplayInfo & rDisplayInfo) const294 bool ViewObjectContactOfPageShadow::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const 295 { 296 if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo)) 297 { 298 return false; 299 } 300 301 SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView(); 302 303 if(!pSdrPageView) 304 { 305 return false; 306 } 307 308 if(!pSdrPageView->GetView().IsPageVisible()) 309 { 310 return false; 311 } 312 313 // no page shadow for preview renderers 314 if(GetObjectContact().IsPreviewRenderer()) 315 { 316 return false; 317 } 318 319 // no page shadow for high contrast mode 320 if(GetObjectContact().isDrawModeHighContrast()) 321 { 322 return false; 323 } 324 325 return true; 326 } 327 } // end of namespace contact 328 } // end of namespace sdr 329 330 ////////////////////////////////////////////////////////////////////////////// 331 332 namespace sdr 333 { 334 namespace contact 335 { ViewObjectContactOfOuterPageBorder(ObjectContact & rObjectContact,ViewContact & rViewContact)336 ViewObjectContactOfOuterPageBorder::ViewObjectContactOfOuterPageBorder(ObjectContact& rObjectContact, ViewContact& rViewContact) 337 : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact) 338 { 339 } 340 ~ViewObjectContactOfOuterPageBorder()341 ViewObjectContactOfOuterPageBorder::~ViewObjectContactOfOuterPageBorder() 342 { 343 } 344 isPrimitiveVisible(const DisplayInfo & rDisplayInfo) const345 bool ViewObjectContactOfOuterPageBorder::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const 346 { 347 if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo)) 348 { 349 return false; 350 } 351 352 SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView(); 353 354 if(!pSdrPageView) 355 { 356 return false; 357 } 358 359 const SdrView& rView = pSdrPageView->GetView(); 360 361 if(!rView.IsPageVisible() && rView.IsPageBorderVisible()) 362 { 363 return false; 364 } 365 366 return true; 367 } 368 } // end of namespace contact 369 } // end of namespace sdr 370 371 ////////////////////////////////////////////////////////////////////////////// 372 373 namespace sdr 374 { 375 namespace contact 376 { ViewObjectContactOfInnerPageBorder(ObjectContact & rObjectContact,ViewContact & rViewContact)377 ViewObjectContactOfInnerPageBorder::ViewObjectContactOfInnerPageBorder(ObjectContact& rObjectContact, ViewContact& rViewContact) 378 : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact) 379 { 380 } 381 ~ViewObjectContactOfInnerPageBorder()382 ViewObjectContactOfInnerPageBorder::~ViewObjectContactOfInnerPageBorder() 383 { 384 } 385 isPrimitiveVisible(const DisplayInfo & rDisplayInfo) const386 bool ViewObjectContactOfInnerPageBorder::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const 387 { 388 if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo)) 389 { 390 return false; 391 } 392 393 SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView(); 394 395 if(!pSdrPageView) 396 { 397 return false; 398 } 399 400 if(!pSdrPageView->GetView().IsBordVisible()) 401 { 402 return false; 403 } 404 405 const SdrPage& rPage = getPage(); 406 407 if(!rPage.GetLftBorder() && !rPage.GetUppBorder() && !rPage.GetRgtBorder() && !rPage.GetLwrBorder()) 408 { 409 return false; 410 } 411 412 // no inner page border for preview renderers 413 if(GetObjectContact().IsPreviewRenderer()) 414 { 415 return false; 416 } 417 418 return true; 419 } 420 } // end of namespace contact 421 } // end of namespace sdr 422 423 ////////////////////////////////////////////////////////////////////////////// 424 425 namespace sdr 426 { 427 namespace contact 428 { ViewObjectContactOfPageHierarchy(ObjectContact & rObjectContact,ViewContact & rViewContact)429 ViewObjectContactOfPageHierarchy::ViewObjectContactOfPageHierarchy(ObjectContact& rObjectContact, ViewContact& rViewContact) 430 : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact) 431 { 432 } 433 ~ViewObjectContactOfPageHierarchy()434 ViewObjectContactOfPageHierarchy::~ViewObjectContactOfPageHierarchy() 435 { 436 } 437 getPrimitive2DSequenceHierarchy(DisplayInfo & rDisplayInfo) const438 drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfPageHierarchy::getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const 439 { 440 drawinglayer::primitive2d::Primitive2DSequence xRetval; 441 442 // process local sub-hierarchy 443 const sal_uInt32 nSubHierarchyCount(GetViewContact().GetObjectCount()); 444 445 if(nSubHierarchyCount) 446 { 447 xRetval = getPrimitive2DSequenceSubHierarchy(rDisplayInfo); 448 449 if(xRetval.hasElements()) 450 { 451 // get ranges 452 const drawinglayer::geometry::ViewInformation2D& rViewInformation2D(GetObjectContact().getViewInformation2D()); 453 const basegfx::B2DRange aObjectRange(drawinglayer::primitive2d::getB2DRangeFromPrimitive2DSequence(xRetval, rViewInformation2D)); 454 const basegfx::B2DRange aViewRange(rViewInformation2D.getViewport()); 455 456 // check geometrical visibility 457 if(!aViewRange.isEmpty() && !aViewRange.overlaps(aObjectRange)) 458 { 459 // not visible, release 460 xRetval.realloc(0); 461 } 462 } 463 } 464 465 return xRetval; 466 } 467 } // end of namespace contact 468 } // end of namespace sdr 469 470 ////////////////////////////////////////////////////////////////////////////// 471 472 namespace sdr 473 { 474 namespace contact 475 { ViewObjectContactOfPageGrid(ObjectContact & rObjectContact,ViewContact & rViewContact)476 ViewObjectContactOfPageGrid::ViewObjectContactOfPageGrid(ObjectContact& rObjectContact, ViewContact& rViewContact) 477 : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact) 478 { 479 } 480 ~ViewObjectContactOfPageGrid()481 ViewObjectContactOfPageGrid::~ViewObjectContactOfPageGrid() 482 { 483 } 484 isPrimitiveVisible(const DisplayInfo & rDisplayInfo) const485 bool ViewObjectContactOfPageGrid::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const 486 { 487 if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo)) 488 { 489 return false; 490 } 491 492 SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView(); 493 494 if(!pSdrPageView) 495 { 496 return false; 497 } 498 499 const SdrView& rView = pSdrPageView->GetView(); 500 501 if(!rView.IsGridVisible()) 502 { 503 return false; 504 } 505 506 // no page grid for preview renderers 507 if(GetObjectContact().IsPreviewRenderer()) 508 { 509 return false; 510 } 511 512 if(static_cast< ViewContactOfGrid& >(GetViewContact()).getFront() != (bool)rView.IsGridFront()) 513 { 514 return false; 515 } 516 517 return true; 518 } 519 createPrimitive2DSequence(const DisplayInfo &) const520 drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfPageGrid::createPrimitive2DSequence(const DisplayInfo& /*rDisplayInfo*/) const 521 { 522 const SdrPageView* pPageView = GetObjectContact().TryToGetSdrPageView(); 523 drawinglayer::primitive2d::Primitive2DSequence xRetval; 524 525 if(pPageView) 526 { 527 const SdrView& rView = pPageView->GetView(); 528 const SdrPage& rPage = getPage(); 529 const Color aGridColor(rView.GetGridColor()); 530 const basegfx::BColor aRGBGridColor(aGridColor.getBColor()); 531 532 basegfx::B2DHomMatrix aGridMatrix; 533 aGridMatrix.set(0, 0, (double)(rPage.GetWdt() - (rPage.GetRgtBorder() + rPage.GetLftBorder()))); 534 aGridMatrix.set(1, 1, (double)(rPage.GetHgt() - (rPage.GetLwrBorder() + rPage.GetUppBorder()))); 535 aGridMatrix.set(0, 2, (double)rPage.GetLftBorder()); 536 aGridMatrix.set(1, 2, (double)rPage.GetUppBorder()); 537 538 const Size aRaw(rView.GetGridCoarse()); 539 const Size aFine(rView.GetGridFine()); 540 const double fWidthX(aRaw.getWidth()); 541 const double fWidthY(aRaw.getHeight()); 542 const sal_uInt32 nSubdivisionsX(aFine.getWidth() ? aRaw.getWidth() / aFine.getWidth() : 0L); 543 const sal_uInt32 nSubdivisionsY(aFine.getHeight() ? aRaw.getHeight() / aFine.getHeight() : 0L); 544 545 xRetval.realloc(1); 546 xRetval[0] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::GridPrimitive2D( 547 aGridMatrix, fWidthX, fWidthY, 10.0, 3.0, nSubdivisionsX, nSubdivisionsY, aRGBGridColor, 548 drawinglayer::primitive2d::createDefaultCross_3x3(aRGBGridColor))); 549 } 550 551 return xRetval; 552 } 553 } // end of namespace contact 554 } // end of namespace sdr 555 556 ////////////////////////////////////////////////////////////////////////////// 557 558 namespace sdr 559 { 560 namespace contact 561 { ViewObjectContactOfPageHelplines(ObjectContact & rObjectContact,ViewContact & rViewContact)562 ViewObjectContactOfPageHelplines::ViewObjectContactOfPageHelplines(ObjectContact& rObjectContact, ViewContact& rViewContact) 563 : ViewObjectContactOfPageSubObject(rObjectContact, rViewContact) 564 { 565 } 566 ~ViewObjectContactOfPageHelplines()567 ViewObjectContactOfPageHelplines::~ViewObjectContactOfPageHelplines() 568 { 569 } 570 isPrimitiveVisible(const DisplayInfo & rDisplayInfo) const571 bool ViewObjectContactOfPageHelplines::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const 572 { 573 if(!ViewObjectContactOfPageSubObject::isPrimitiveVisible(rDisplayInfo)) 574 { 575 return false; 576 } 577 578 SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView(); 579 580 if(!pSdrPageView) 581 { 582 return false; 583 } 584 585 const SdrView& rView = pSdrPageView->GetView(); 586 587 if(!rView.IsHlplVisible()) 588 { 589 return false; 590 } 591 592 // no helplines for preview renderers 593 if(GetObjectContact().IsPreviewRenderer()) 594 { 595 return false; 596 } 597 598 if(static_cast< ViewContactOfHelplines& >(GetViewContact()).getFront() != (bool)rView.IsHlplFront()) 599 { 600 return false; 601 } 602 603 return true; 604 } 605 createPrimitive2DSequence(const DisplayInfo &) const606 drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfPageHelplines::createPrimitive2DSequence(const DisplayInfo& /*rDisplayInfo*/) const 607 { 608 drawinglayer::primitive2d::Primitive2DSequence xRetval; 609 const SdrPageView* pPageView = GetObjectContact().TryToGetSdrPageView(); 610 611 if(pPageView) 612 { 613 const SdrHelpLineList& rHelpLineList = pPageView->GetHelpLines(); 614 const sal_uInt32 nCount(rHelpLineList.GetCount()); 615 616 if(nCount) 617 { 618 const basegfx::BColor aRGBColorA(1.0, 1.0, 1.0); 619 const basegfx::BColor aRGBColorB(0.0, 0.0, 0.0); 620 xRetval.realloc(nCount); 621 622 for(sal_uInt32 a(0L); a < nCount; a++) 623 { 624 const SdrHelpLine& rHelpLine = rHelpLineList[(sal_uInt16)a]; 625 const basegfx::B2DPoint aPosition((double)rHelpLine.GetPos().X(), (double)rHelpLine.GetPos().Y()); 626 const double fDiscreteDashLength(4.0); 627 628 switch(rHelpLine.GetKind()) 629 { 630 default : // SDRHELPLINE_POINT 631 { 632 xRetval[a] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::HelplinePrimitive2D( 633 aPosition, basegfx::B2DVector(1.0, 0.0), drawinglayer::primitive2d::HELPLINESTYLE2D_POINT, 634 aRGBColorA, aRGBColorB, fDiscreteDashLength)); 635 break; 636 } 637 case SDRHELPLINE_VERTICAL : 638 { 639 xRetval[a] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::HelplinePrimitive2D( 640 aPosition, basegfx::B2DVector(0.0, 1.0), drawinglayer::primitive2d::HELPLINESTYLE2D_LINE, 641 aRGBColorA, aRGBColorB, fDiscreteDashLength)); 642 break; 643 } 644 case SDRHELPLINE_HORIZONTAL : 645 { 646 xRetval[a] = drawinglayer::primitive2d::Primitive2DReference(new drawinglayer::primitive2d::HelplinePrimitive2D( 647 aPosition, basegfx::B2DVector(1.0, 0.0), drawinglayer::primitive2d::HELPLINESTYLE2D_LINE, 648 aRGBColorA, aRGBColorB, fDiscreteDashLength)); 649 break; 650 } 651 } 652 } 653 } 654 } 655 656 return xRetval; 657 } 658 } // end of namespace contact 659 } // end of namespace sdr 660 661 ////////////////////////////////////////////////////////////////////////////// 662 663 namespace sdr 664 { 665 namespace contact 666 { ViewObjectContactOfSdrPage(ObjectContact & rObjectContact,ViewContact & rViewContact)667 ViewObjectContactOfSdrPage::ViewObjectContactOfSdrPage(ObjectContact& rObjectContact, ViewContact& rViewContact) 668 : ViewObjectContact(rObjectContact, rViewContact) 669 { 670 } 671 ~ViewObjectContactOfSdrPage()672 ViewObjectContactOfSdrPage::~ViewObjectContactOfSdrPage() 673 { 674 } 675 getPrimitive2DSequenceHierarchy(DisplayInfo & rDisplayInfo) const676 drawinglayer::primitive2d::Primitive2DSequence ViewObjectContactOfSdrPage::getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const 677 { 678 drawinglayer::primitive2d::Primitive2DSequence xRetval; 679 680 // process local sub-hierarchy 681 const sal_uInt32 nSubHierarchyCount(GetViewContact().GetObjectCount()); 682 683 if(nSubHierarchyCount) 684 { 685 const sal_Bool bDoGhostedDisplaying( 686 GetObjectContact().DoVisualizeEnteredGroup() 687 && !GetObjectContact().isOutputToPrinter() 688 && GetObjectContact().getActiveViewContact() == &GetViewContact()); 689 690 if(bDoGhostedDisplaying) 691 { 692 rDisplayInfo.ClearGhostedDrawMode(); 693 } 694 695 // create object hierarchy 696 xRetval = getPrimitive2DSequenceSubHierarchy(rDisplayInfo); 697 698 if(xRetval.hasElements()) 699 { 700 // get ranges 701 const drawinglayer::geometry::ViewInformation2D& rViewInformation2D(GetObjectContact().getViewInformation2D()); 702 const basegfx::B2DRange aObjectRange(drawinglayer::primitive2d::getB2DRangeFromPrimitive2DSequence(xRetval, rViewInformation2D)); 703 const basegfx::B2DRange aViewRange(rViewInformation2D.getViewport()); 704 705 // check geometrical visibility 706 if(!aViewRange.isEmpty() && !aViewRange.overlaps(aObjectRange)) 707 { 708 // not visible, release 709 xRetval.realloc(0); 710 } 711 } 712 713 if(bDoGhostedDisplaying) 714 { 715 rDisplayInfo.SetGhostedDrawMode(); 716 } 717 } 718 719 return xRetval; 720 } 721 } // end of namespace contact 722 } // end of namespace sdr 723 724 ////////////////////////////////////////////////////////////////////////////// 725 // eof 726