1ce9c7ef7SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3ce9c7ef7SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4ce9c7ef7SAndrew Rist * or more contributor license agreements. See the NOTICE file 5ce9c7ef7SAndrew Rist * distributed with this work for additional information 6ce9c7ef7SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7ce9c7ef7SAndrew Rist * to you under the Apache License, Version 2.0 (the 8ce9c7ef7SAndrew Rist * "License"); you may not use this file except in compliance 9ce9c7ef7SAndrew Rist * with the License. You may obtain a copy of the License at 10ce9c7ef7SAndrew Rist * 11ce9c7ef7SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12ce9c7ef7SAndrew Rist * 13ce9c7ef7SAndrew Rist * Unless required by applicable law or agreed to in writing, 14ce9c7ef7SAndrew Rist * software distributed under the License is distributed on an 15ce9c7ef7SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16ce9c7ef7SAndrew Rist * KIND, either express or implied. See the License for the 17ce9c7ef7SAndrew Rist * specific language governing permissions and limitations 18ce9c7ef7SAndrew Rist * under the License. 19ce9c7ef7SAndrew Rist * 20ce9c7ef7SAndrew Rist *************************************************************/ 21ce9c7ef7SAndrew Rist 22ce9c7ef7SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #ifndef _BGFX_RANGE_BASICBOX_HXX 25cdf0e10cSrcweir #define _BGFX_RANGE_BASICBOX_HXX 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <basegfx/range/basicrange.hxx> 28*b63233d8Sdamjan #include <basegfx/basegfxdllapi.h> 29cdf0e10cSrcweir 30cdf0e10cSrcweir 31cdf0e10cSrcweir namespace basegfx 32cdf0e10cSrcweir { 33cdf0e10cSrcweir /** Specialization of BasicRange, handling the inside predicates 34cdf0e10cSrcweir differently. 35cdf0e10cSrcweir 36cdf0e10cSrcweir This template considers the rightmost and bottommost border as 37cdf0e10cSrcweir <em>outside</em> of the range, in contrast to BasicRange, 38cdf0e10cSrcweir which considers them inside. 39cdf0e10cSrcweir */ 40*b63233d8Sdamjan class BASEGFX_DLLPUBLIC BasicBox : public BasicRange< sal_Int32, Int32Traits > 41cdf0e10cSrcweir { 42cdf0e10cSrcweir typedef BasicRange< sal_Int32, Int32Traits > Base; 43cdf0e10cSrcweir public: BasicBox()44cdf0e10cSrcweir BasicBox() : 45cdf0e10cSrcweir Base() 46cdf0e10cSrcweir { 47cdf0e10cSrcweir } 48cdf0e10cSrcweir BasicBox(sal_Int32 nValue)49cdf0e10cSrcweir BasicBox( sal_Int32 nValue ) : 50cdf0e10cSrcweir Base( nValue ) 51cdf0e10cSrcweir { 52cdf0e10cSrcweir } 53cdf0e10cSrcweir BasicBox(const BasicBox & rBox)54cdf0e10cSrcweir BasicBox(const BasicBox& rBox) : 55cdf0e10cSrcweir Base( rBox ) 56cdf0e10cSrcweir { 57cdf0e10cSrcweir } 58cdf0e10cSrcweir getCenter() const59cdf0e10cSrcweir double getCenter() const 60cdf0e10cSrcweir { 61cdf0e10cSrcweir if(isEmpty()) 62cdf0e10cSrcweir { 63cdf0e10cSrcweir return 0.0; 64cdf0e10cSrcweir } 65cdf0e10cSrcweir else 66cdf0e10cSrcweir { 67cdf0e10cSrcweir return ((mnMaximum + mnMinimum - 1.0) / 2.0); 68cdf0e10cSrcweir } 69cdf0e10cSrcweir } 70cdf0e10cSrcweir 71cdf0e10cSrcweir using Base::isInside; 72cdf0e10cSrcweir isInside(sal_Int32 nValue) const73cdf0e10cSrcweir bool isInside(sal_Int32 nValue) const 74cdf0e10cSrcweir { 75cdf0e10cSrcweir if(isEmpty()) 76cdf0e10cSrcweir { 77cdf0e10cSrcweir return false; 78cdf0e10cSrcweir } 79cdf0e10cSrcweir else 80cdf0e10cSrcweir { 81cdf0e10cSrcweir return (nValue >= mnMinimum) && (nValue < mnMaximum); 82cdf0e10cSrcweir } 83cdf0e10cSrcweir } 84cdf0e10cSrcweir 85cdf0e10cSrcweir using Base::overlaps; 86cdf0e10cSrcweir overlaps(const BasicBox & rBox) const87cdf0e10cSrcweir bool overlaps(const BasicBox& rBox) const 88cdf0e10cSrcweir { 89cdf0e10cSrcweir if(isEmpty()) 90cdf0e10cSrcweir { 91cdf0e10cSrcweir return false; 92cdf0e10cSrcweir } 93cdf0e10cSrcweir else 94cdf0e10cSrcweir { 95cdf0e10cSrcweir if(rBox.isEmpty()) 96cdf0e10cSrcweir { 97cdf0e10cSrcweir return false; 98cdf0e10cSrcweir } 99cdf0e10cSrcweir else 100cdf0e10cSrcweir { 101cdf0e10cSrcweir return !((rBox.mnMaximum <= mnMinimum) || (rBox.mnMinimum >= mnMaximum)); 102cdf0e10cSrcweir } 103cdf0e10cSrcweir } 104cdf0e10cSrcweir } 105cdf0e10cSrcweir grow(sal_Int32 nValue)106cdf0e10cSrcweir void grow(sal_Int32 nValue) 107cdf0e10cSrcweir { 108cdf0e10cSrcweir if(!isEmpty()) 109cdf0e10cSrcweir { 110cdf0e10cSrcweir bool bLessThanZero(nValue < 0); 111cdf0e10cSrcweir 112cdf0e10cSrcweir if(nValue > 0 || bLessThanZero) 113cdf0e10cSrcweir { 114cdf0e10cSrcweir mnMinimum -= nValue; 115cdf0e10cSrcweir mnMaximum += nValue; 116cdf0e10cSrcweir 117cdf0e10cSrcweir if(bLessThanZero) 118cdf0e10cSrcweir { 119cdf0e10cSrcweir // test if range did collapse 120cdf0e10cSrcweir if(mnMinimum > mnMaximum) 121cdf0e10cSrcweir { 122cdf0e10cSrcweir // if yes, collapse to center 123cdf0e10cSrcweir mnMinimum = mnMaximum = ((mnMaximum + mnMinimum - 1) / 2); 124cdf0e10cSrcweir } 125cdf0e10cSrcweir } 126cdf0e10cSrcweir } 127cdf0e10cSrcweir } 128cdf0e10cSrcweir } 129cdf0e10cSrcweir }; 130cdf0e10cSrcweir 131cdf0e10cSrcweir } // end of namespace basegfx 132cdf0e10cSrcweir 133cdf0e10cSrcweir #endif /* _BGFX_RANGE_BASICBOX_HXX */ 134