1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir #ifndef _SV_IMPOCT_HXX 29*cdf0e10cSrcweir #define _SV_IMPOCT_HXX 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <vcl/octree.hxx> 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir // ---------------- 34*cdf0e10cSrcweir // - ImpErrorQuad - 35*cdf0e10cSrcweir // ---------------- 36*cdf0e10cSrcweir 37*cdf0e10cSrcweir class ImpErrorQuad 38*cdf0e10cSrcweir { 39*cdf0e10cSrcweir long nRed; 40*cdf0e10cSrcweir long nGreen; 41*cdf0e10cSrcweir long nBlue; 42*cdf0e10cSrcweir long nReserved; 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir public: 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir inline ImpErrorQuad() {} 47*cdf0e10cSrcweir inline ImpErrorQuad( const BitmapColor& rColor ) : 48*cdf0e10cSrcweir nRed ( (long) rColor.GetRed() << 5L ), 49*cdf0e10cSrcweir nGreen ( (long) rColor.GetGreen() << 5L ), 50*cdf0e10cSrcweir nBlue ( (long) rColor.GetBlue() << 5L ) {} 51*cdf0e10cSrcweir 52*cdf0e10cSrcweir inline void operator=( const BitmapColor& rColor ); 53*cdf0e10cSrcweir inline ImpErrorQuad& operator-=( const BitmapColor& rColor ); 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir inline void ImplAddColorError1( const ImpErrorQuad& rErrQuad ); 56*cdf0e10cSrcweir inline void ImplAddColorError3( const ImpErrorQuad& rErrQuad ); 57*cdf0e10cSrcweir inline void ImplAddColorError5( const ImpErrorQuad& rErrQuad ); 58*cdf0e10cSrcweir inline void ImplAddColorError7( const ImpErrorQuad& rErrQuad ); 59*cdf0e10cSrcweir 60*cdf0e10cSrcweir inline BitmapColor ImplGetColor(); 61*cdf0e10cSrcweir }; 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir // ------------------------------------------------------------------------ 64*cdf0e10cSrcweir 65*cdf0e10cSrcweir inline void ImpErrorQuad::operator=( const BitmapColor& rColor ) 66*cdf0e10cSrcweir { 67*cdf0e10cSrcweir nRed = (long) rColor.GetRed() << 5L; 68*cdf0e10cSrcweir nGreen = (long) rColor.GetGreen() << 5L; 69*cdf0e10cSrcweir nBlue = (long) rColor.GetBlue() << 5L; 70*cdf0e10cSrcweir } 71*cdf0e10cSrcweir 72*cdf0e10cSrcweir // ------------------------------------------------------------------------ 73*cdf0e10cSrcweir 74*cdf0e10cSrcweir inline ImpErrorQuad& ImpErrorQuad::operator-=( const BitmapColor& rColor ) 75*cdf0e10cSrcweir { 76*cdf0e10cSrcweir nRed -= ( (long) rColor.GetRed() << 5L ); 77*cdf0e10cSrcweir nGreen -= ( (long) rColor.GetGreen() << 5L ); 78*cdf0e10cSrcweir nBlue -= ( (long) rColor.GetBlue() << 5L ); 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir return *this; 81*cdf0e10cSrcweir } 82*cdf0e10cSrcweir 83*cdf0e10cSrcweir // ------------------------------------------------------------------------ 84*cdf0e10cSrcweir 85*cdf0e10cSrcweir inline void ImpErrorQuad::ImplAddColorError1( const ImpErrorQuad& rErrQuad ) 86*cdf0e10cSrcweir { 87*cdf0e10cSrcweir nRed += ( rErrQuad.nRed >> 4L ); 88*cdf0e10cSrcweir nGreen += ( rErrQuad.nGreen >> 4L ); 89*cdf0e10cSrcweir nBlue += ( rErrQuad.nBlue >> 4L ); 90*cdf0e10cSrcweir } 91*cdf0e10cSrcweir 92*cdf0e10cSrcweir // ------------------------------------------------------------------------ 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir inline void ImpErrorQuad::ImplAddColorError3( const ImpErrorQuad& rErrQuad ) 95*cdf0e10cSrcweir { 96*cdf0e10cSrcweir nRed += ( rErrQuad.nRed * 3L >> 4L ); 97*cdf0e10cSrcweir nGreen += ( rErrQuad.nGreen * 3L >> 4L ); 98*cdf0e10cSrcweir nBlue += ( rErrQuad.nBlue * 3L >> 4L ); 99*cdf0e10cSrcweir } 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir // ------------------------------------------------------------------------ 102*cdf0e10cSrcweir 103*cdf0e10cSrcweir inline void ImpErrorQuad::ImplAddColorError5( const ImpErrorQuad& rErrQuad ) 104*cdf0e10cSrcweir { 105*cdf0e10cSrcweir nRed += ( rErrQuad.nRed * 5L >> 4L ); 106*cdf0e10cSrcweir nGreen += ( rErrQuad.nGreen * 5L >> 4L ); 107*cdf0e10cSrcweir nBlue += ( rErrQuad.nBlue * 5L >> 4L ); 108*cdf0e10cSrcweir } 109*cdf0e10cSrcweir 110*cdf0e10cSrcweir // ------------------------------------------------------------------------ 111*cdf0e10cSrcweir 112*cdf0e10cSrcweir inline void ImpErrorQuad::ImplAddColorError7( const ImpErrorQuad& rErrQuad ) 113*cdf0e10cSrcweir { 114*cdf0e10cSrcweir nRed += ( rErrQuad.nRed * 7L >> 4L ); 115*cdf0e10cSrcweir nGreen += ( rErrQuad.nGreen * 7L >> 4L ); 116*cdf0e10cSrcweir nBlue += ( rErrQuad.nBlue *7L >> 4L ); 117*cdf0e10cSrcweir } 118*cdf0e10cSrcweir 119*cdf0e10cSrcweir // ------------------------------------------------------------------------ 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir inline BitmapColor ImpErrorQuad::ImplGetColor() 122*cdf0e10cSrcweir { 123*cdf0e10cSrcweir return BitmapColor( (sal_uInt8) ( ( nRed < 0L ? 0L : nRed > 8160L ? 8160L : nRed ) >> 5L ), 124*cdf0e10cSrcweir (sal_uInt8) ( ( nGreen < 0L ? 0L : nGreen > 8160L ? 8160L : nGreen ) >> 5L ), 125*cdf0e10cSrcweir (sal_uInt8) ( ( nBlue < 0L ? 0L : nBlue > 8160L ? 8160L : nBlue ) >> 5L ) ); 126*cdf0e10cSrcweir } 127*cdf0e10cSrcweir 128*cdf0e10cSrcweir // ------------- 129*cdf0e10cSrcweir // - NodeCache - 130*cdf0e10cSrcweir // ------------- 131*cdf0e10cSrcweir 132*cdf0e10cSrcweir class ImpNodeCache 133*cdf0e10cSrcweir { 134*cdf0e10cSrcweir OctreeNode* pActNode; 135*cdf0e10cSrcweir sal_uLong nNew; 136*cdf0e10cSrcweir sal_uLong nDelete; 137*cdf0e10cSrcweir sal_uLong nGet; 138*cdf0e10cSrcweir sal_uLong nRelease; 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir public: 141*cdf0e10cSrcweir 142*cdf0e10cSrcweir ImpNodeCache( const sal_uLong nInitSize ); 143*cdf0e10cSrcweir ~ImpNodeCache(); 144*cdf0e10cSrcweir 145*cdf0e10cSrcweir inline OctreeNode* ImplGetFreeNode(); 146*cdf0e10cSrcweir inline void ImplReleaseNode( OctreeNode* pNode ); 147*cdf0e10cSrcweir }; 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir // ------------------------------------------------------------------------ 150*cdf0e10cSrcweir 151*cdf0e10cSrcweir inline OctreeNode* ImpNodeCache::ImplGetFreeNode() 152*cdf0e10cSrcweir { 153*cdf0e10cSrcweir OctreeNode* pNode; 154*cdf0e10cSrcweir 155*cdf0e10cSrcweir if ( !pActNode ) 156*cdf0e10cSrcweir { 157*cdf0e10cSrcweir pActNode = new NODE; 158*cdf0e10cSrcweir pActNode->pNextInCache = NULL; 159*cdf0e10cSrcweir } 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir pNode = pActNode; 162*cdf0e10cSrcweir pActNode = pNode->pNextInCache; 163*cdf0e10cSrcweir memset( pNode, 0, sizeof( NODE ) ); 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir return pNode; 166*cdf0e10cSrcweir } 167*cdf0e10cSrcweir 168*cdf0e10cSrcweir // ------------------------------------------------------------------------ 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir inline void ImpNodeCache::ImplReleaseNode( OctreeNode* pNode ) 171*cdf0e10cSrcweir { 172*cdf0e10cSrcweir pNode->pNextInCache = pActNode; 173*cdf0e10cSrcweir pActNode = pNode; 174*cdf0e10cSrcweir } 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir #endif // _SV_IMPOCT_HXX 177