1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove 25*b1cdbd2cSJim Jagielski #include "precompiled_svx.hxx" 26*b1cdbd2cSJim Jagielski #include <svx/sdr/contact/viewcontactofvirtobj.hxx> 27*b1cdbd2cSJim Jagielski #include <svx/svdovirt.hxx> 28*b1cdbd2cSJim Jagielski #include <svx/sdr/contact/displayinfo.hxx> 29*b1cdbd2cSJim Jagielski #include <basegfx/matrix/b2dhommatrix.hxx> 30*b1cdbd2cSJim Jagielski #include <drawinglayer/primitive2d/transformprimitive2d.hxx> 31*b1cdbd2cSJim Jagielski #include <vcl/outdev.hxx> 32*b1cdbd2cSJim Jagielski #include <drawinglayer/primitive2d/sdrdecompositiontools2d.hxx> 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski namespace sdr 37*b1cdbd2cSJim Jagielski { 38*b1cdbd2cSJim Jagielski namespace contact 39*b1cdbd2cSJim Jagielski { GetVirtObj() const40*b1cdbd2cSJim Jagielski SdrVirtObj& ViewContactOfVirtObj::GetVirtObj() const 41*b1cdbd2cSJim Jagielski { 42*b1cdbd2cSJim Jagielski return (SdrVirtObj&)mrObject; 43*b1cdbd2cSJim Jagielski } 44*b1cdbd2cSJim Jagielski ViewContactOfVirtObj(SdrVirtObj & rObj)45*b1cdbd2cSJim Jagielski ViewContactOfVirtObj::ViewContactOfVirtObj(SdrVirtObj& rObj) 46*b1cdbd2cSJim Jagielski : ViewContactOfSdrObj(rObj) 47*b1cdbd2cSJim Jagielski { 48*b1cdbd2cSJim Jagielski } 49*b1cdbd2cSJim Jagielski ~ViewContactOfVirtObj()50*b1cdbd2cSJim Jagielski ViewContactOfVirtObj::~ViewContactOfVirtObj() 51*b1cdbd2cSJim Jagielski { 52*b1cdbd2cSJim Jagielski } 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski // Access to possible sub-hierarchy GetObjectCount() const55*b1cdbd2cSJim Jagielski sal_uInt32 ViewContactOfVirtObj::GetObjectCount() const 56*b1cdbd2cSJim Jagielski { 57*b1cdbd2cSJim Jagielski // Here, SdrVirtObj's need to return 0L to show that they have no 58*b1cdbd2cSJim Jagielski // sub-hierarchy, even when they are group objects. This is necessary 59*b1cdbd2cSJim Jagielski // to avoid that the same VOCs will be added to the draw hierarchy 60*b1cdbd2cSJim Jagielski // twice which leads to problems. 61*b1cdbd2cSJim Jagielski // 62*b1cdbd2cSJim Jagielski // This solution is only a first solution to get things running. Later 63*b1cdbd2cSJim Jagielski // this needs to be replaced with creating real VOCs for the objects 64*b1cdbd2cSJim Jagielski // referenced by virtual objects to avoid the 'trick' of setting the 65*b1cdbd2cSJim Jagielski // offset for painting at the destination OutputDevive. 66*b1cdbd2cSJim Jagielski // 67*b1cdbd2cSJim Jagielski // As can be seen, with primitives, the problem will be solved using 68*b1cdbd2cSJim Jagielski // a transformPrimitive, so this solution can stay with primitives. 69*b1cdbd2cSJim Jagielski return 0L; 70*b1cdbd2cSJim Jagielski } 71*b1cdbd2cSJim Jagielski createViewIndependentPrimitive2DSequence() const72*b1cdbd2cSJim Jagielski drawinglayer::primitive2d::Primitive2DSequence ViewContactOfVirtObj::createViewIndependentPrimitive2DSequence() const 73*b1cdbd2cSJim Jagielski { 74*b1cdbd2cSJim Jagielski // create displacement transformation if we have content 75*b1cdbd2cSJim Jagielski basegfx::B2DHomMatrix aObjectMatrix; 76*b1cdbd2cSJim Jagielski Point aAnchor(GetVirtObj().GetAnchorPos()); 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski if(aAnchor.X() || aAnchor.Y()) 79*b1cdbd2cSJim Jagielski { 80*b1cdbd2cSJim Jagielski aObjectMatrix.set(0, 2, aAnchor.X()); 81*b1cdbd2cSJim Jagielski aObjectMatrix.set(1, 2, aAnchor.Y()); 82*b1cdbd2cSJim Jagielski } 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski // use method from referenced object to get the Primitive2DSequence 85*b1cdbd2cSJim Jagielski const drawinglayer::primitive2d::Primitive2DSequence xSequenceVirtual( 86*b1cdbd2cSJim Jagielski GetVirtObj().GetReferencedObj().GetViewContact().getViewIndependentPrimitive2DSequence()); 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski if(xSequenceVirtual.hasElements()) 89*b1cdbd2cSJim Jagielski { 90*b1cdbd2cSJim Jagielski // create transform primitive 91*b1cdbd2cSJim Jagielski const drawinglayer::primitive2d::Primitive2DReference xReference( 92*b1cdbd2cSJim Jagielski new drawinglayer::primitive2d::TransformPrimitive2D( 93*b1cdbd2cSJim Jagielski aObjectMatrix, 94*b1cdbd2cSJim Jagielski xSequenceVirtual)); 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski return drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1); 97*b1cdbd2cSJim Jagielski } 98*b1cdbd2cSJim Jagielski else 99*b1cdbd2cSJim Jagielski { 100*b1cdbd2cSJim Jagielski // always append an invisible outline for the cases where no visible content exists 101*b1cdbd2cSJim Jagielski const drawinglayer::primitive2d::Primitive2DReference xReference( 102*b1cdbd2cSJim Jagielski drawinglayer::primitive2d::createHiddenGeometryPrimitives2D( 103*b1cdbd2cSJim Jagielski false, aObjectMatrix)); 104*b1cdbd2cSJim Jagielski 105*b1cdbd2cSJim Jagielski return drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1); 106*b1cdbd2cSJim Jagielski } 107*b1cdbd2cSJim Jagielski } 108*b1cdbd2cSJim Jagielski } // end of namespace contact 109*b1cdbd2cSJim Jagielski } // end of namespace sdr 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 112*b1cdbd2cSJim Jagielski // eof 113