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 #include "precompiled_reportdesign.hxx" 24 #include "EndMarker.hxx" 25 #include "ColorChanger.hxx" 26 #include "SectionWindow.hxx" 27 #include "helpids.hrc" 28 #include <vcl/svapp.hxx> 29 #include <vcl/gradient.hxx> 30 #include <vcl/lineinfo.hxx> 31 32 33 #define CORNER_SPACE 5 34 //===================================================================== 35 namespace rptui 36 { 37 //===================================================================== 38 DBG_NAME( rpt_OEndMarker ) 39 OEndMarker::OEndMarker(Window* _pParent ,const ::rtl::OUString& _sColorEntry) 40 : OColorListener(_pParent,_sColorEntry) 41 { 42 DBG_CTOR( rpt_OEndMarker,NULL); 43 SetUniqueId(HID_RPT_ENDMARKER); 44 ImplInitSettings(); 45 } 46 // ----------------------------------------------------------------------------- 47 OEndMarker::~OEndMarker() 48 { 49 DBG_DTOR( rpt_OEndMarker,NULL); 50 } 51 // ----------------------------------------------------------------------------- 52 void OEndMarker::Paint( const Rectangle& /*rRect*/ ) 53 { 54 Fraction aCornerSpace(long(CORNER_SPACE)); 55 aCornerSpace *= GetMapMode().GetScaleX(); 56 const long nCornerSpace = aCornerSpace; 57 58 Size aSize = GetSizePixel(); 59 aSize.Width() += nCornerSpace; 60 Rectangle aWholeRect(Point(-nCornerSpace,0),aSize); 61 PolyPolygon aPoly; 62 aPoly.Insert(Polygon(aWholeRect,nCornerSpace,nCornerSpace)); 63 64 Color aStartColor(m_nColor); 65 aStartColor.IncreaseLuminance(10); 66 sal_uInt16 nHue = 0; 67 sal_uInt16 nSat = 0; 68 sal_uInt16 nBri = 0; 69 aStartColor.RGBtoHSB(nHue, nSat, nBri); 70 nSat += 40; 71 Color aEndColor(Color::HSBtoRGB(nHue, nSat, nBri)); 72 Gradient aGradient(GRADIENT_LINEAR,aStartColor,aEndColor); 73 aGradient.SetSteps(static_cast<sal_uInt16>(aSize.Height())); 74 75 DrawGradient(PixelToLogic(aPoly) ,aGradient); 76 if ( m_bMarked ) 77 { 78 Rectangle aRect( Point(-nCornerSpace,nCornerSpace), 79 Size(aSize.Width()- nCornerSpace,aSize.Height() - nCornerSpace- nCornerSpace)); 80 ColorChanger aColors( this, COL_WHITE, COL_WHITE ); 81 DrawPolyLine(Polygon(PixelToLogic(aRect)),LineInfo(LINE_SOLID,2)); 82 } 83 } 84 // ----------------------------------------------------------------------- 85 void OEndMarker::ImplInitSettings() 86 { 87 EnableChildTransparentMode( sal_True ); 88 SetParentClipMode( PARENTCLIPMODE_NOCLIP ); 89 SetPaintTransparent( sal_True ); 90 91 SetBackground( Wallpaper( svtools::ColorConfig().GetColorValue(::svtools::APPBACKGROUND).nColor) ); 92 SetFillColor( Application::GetSettings().GetStyleSettings().GetShadowColor() ); 93 } 94 // ----------------------------------------------------------------------- 95 void OEndMarker::MouseButtonDown( const MouseEvent& rMEvt ) 96 { 97 if ( !rMEvt.IsLeft() && !rMEvt.IsRight()) 98 return; 99 static_cast<OSectionWindow*>(GetParent())->showProperties(); 100 } 101 // ======================================================================= 102 } 103 // ======================================================================= 104