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 #include "precompiled_sc.hxx" 23 24 #include <CellBorderUpdater.hxx> 25 #include <vcl/bmpacc.hxx> 26 #include <vcl/svapp.hxx> 27 28 namespace sc { namespace sidebar { 29 30 CellBorderUpdater::CellBorderUpdater( 31 sal_uInt16 nTbxBtnId, 32 ToolBox& rTbx) 33 : mnBtnId(nTbxBtnId), 34 mrTbx(rTbx) 35 { 36 } 37 38 CellBorderUpdater::~CellBorderUpdater() 39 { 40 } 41 42 void CellBorderUpdater::UpdateCellBorder(bool bTop, bool bBot, bool bLeft, bool bRight, Image aImg, bool bVer, bool bHor) 43 { 44 BitmapEx aBmpEx( aImg.GetBitmapEx() ); 45 Bitmap aBmp( aBmpEx.GetBitmap() ); 46 BitmapWriteAccess* pBmpAcc = aBmp.AcquireWriteAccess(); 47 const Size maBmpSize = aBmp.GetSizePixel(); 48 49 if( pBmpAcc ) 50 { 51 Bitmap aMsk; 52 BitmapWriteAccess* pMskAcc; 53 54 if( aBmpEx.IsAlpha() ) 55 pMskAcc = ( aMsk = aBmpEx.GetAlpha().GetBitmap() ).AcquireWriteAccess(); 56 else if( aBmpEx.IsTransparent() ) 57 pMskAcc = ( aMsk = aBmpEx.GetMask() ).AcquireWriteAccess(); 58 else 59 pMskAcc = NULL; 60 61 pBmpAcc->SetLineColor( ::Application::GetSettings().GetStyleSettings().GetFieldTextColor() ) ; 62 pBmpAcc->SetFillColor( COL_BLACK); 63 64 if(maBmpSize.Width() == 43 && maBmpSize.Height() == 43) 65 { 66 Point aTL(2, 1), aTR(42,1), aBL(2, 41), aBR(42, 41), aHL(2,21), aHR(42, 21), aVT(22,1), aVB(22, 41); 67 if( pMskAcc ) 68 { 69 pMskAcc->SetLineColor( COL_BLACK ); 70 pMskAcc->SetFillColor( COL_BLACK ); 71 } 72 if(bLeft) 73 { 74 pBmpAcc->DrawLine( aTL,aBL ); 75 if( pMskAcc ) 76 pMskAcc->DrawLine( aTL,aBL ); 77 } 78 if(bRight) 79 { 80 pBmpAcc->DrawLine( aTR,aBR ); 81 if( pMskAcc ) 82 pMskAcc->DrawLine( aTR,aBR ); 83 } 84 if(bTop) 85 { 86 pBmpAcc->DrawLine( aTL,aTR ); 87 if( pMskAcc ) 88 pMskAcc->DrawLine( aTL,aTR ); 89 } 90 if(bBot) 91 { 92 pBmpAcc->DrawLine( aBL,aBR ); 93 if( pMskAcc ) 94 pMskAcc->DrawLine( aBL,aBR ); 95 } 96 if(bVer) 97 { 98 pBmpAcc->DrawLine( aVT,aVB ); 99 if( pMskAcc ) 100 pMskAcc->DrawLine( aVT,aVB ); 101 } 102 if(bHor) 103 { 104 pBmpAcc->DrawLine( aHL,aHR ); 105 if( pMskAcc ) 106 pMskAcc->DrawLine( aHL,aHR ); 107 } 108 } 109 110 aBmp.ReleaseAccess( pBmpAcc ); 111 if( pMskAcc ) 112 aMsk.ReleaseAccess( pMskAcc ); 113 114 if( aBmpEx.IsAlpha() ) 115 aBmpEx = BitmapEx( aBmp, AlphaMask( aMsk ) ); 116 else if( aBmpEx.IsTransparent() ) 117 aBmpEx = BitmapEx( aBmp, aMsk ); 118 else 119 aBmpEx = aBmp; 120 121 mrTbx.SetItemImage( mnBtnId, Image( aBmpEx ) ); 122 } 123 } 124 125 } } // end of namespace svx::sidebar 126 127 // eof 128