| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| #include "precompiled_sfx2.hxx" |
| |
| #include "DrawHelper.hxx" |
| #include "Paint.hxx" |
| |
| #include <vcl/lineinfo.hxx> |
| |
| |
| namespace sfx2 { namespace sidebar { |
| |
| void DrawHelper::DrawBorder ( |
| OutputDevice& rDevice, |
| const Rectangle rBox, |
| const SvBorder aBorderSize, |
| const Paint& rHorizontalPaint, |
| const Paint& rVerticalPaint) |
| { |
| // Draw top line. |
| DrawHorizontalLine( |
| rDevice, |
| rBox.Left(), |
| rBox.Right(), |
| rBox.Top(), |
| aBorderSize.Top(), |
| rHorizontalPaint); |
| // Draw bottom line. |
| DrawHorizontalLine( |
| rDevice, |
| rBox.Left()+aBorderSize.Left(), |
| rBox.Right(), |
| rBox.Bottom()-aBorderSize.Bottom()+1, |
| aBorderSize.Bottom(), |
| rHorizontalPaint); |
| // Draw left line. |
| DrawVerticalLine( |
| rDevice, |
| rBox.Top()+aBorderSize.Top(), |
| rBox.Bottom(), |
| rBox.Left(), |
| aBorderSize.Left(), |
| rVerticalPaint); |
| // Draw right line. |
| DrawVerticalLine( |
| rDevice, |
| rBox.Top()+aBorderSize.Top(), |
| rBox.Bottom()-aBorderSize.Bottom(), |
| rBox.Right()-aBorderSize.Right()+1, |
| aBorderSize.Right(), |
| rVerticalPaint); |
| } |
| |
| |
| |
| |
| void DrawHelper::DrawBevelBorder ( |
| OutputDevice& rDevice, |
| const Rectangle rBox, |
| const SvBorder aBorderSize, |
| const Paint& rTopLeftPaint, |
| const Paint& rCenterPaint, |
| const Paint& rBottomRightPaint) |
| { |
| // Draw top line. |
| DrawHorizontalLine( |
| rDevice, |
| rBox.Left(), |
| rBox.Right() - aBorderSize.Right(), |
| rBox.Top(), |
| aBorderSize.Top(), |
| rTopLeftPaint); |
| // Draw bottom line. |
| DrawHorizontalLine( |
| rDevice, |
| rBox.Left()+aBorderSize.Left(), |
| rBox.Right(), |
| rBox.Bottom()-aBorderSize.Bottom()+1, |
| aBorderSize.Bottom(), |
| rBottomRightPaint); |
| // Draw left line. |
| DrawVerticalLine( |
| rDevice, |
| rBox.Top()+aBorderSize.Top(), |
| rBox.Bottom() - aBorderSize.Bottom(), |
| rBox.Left(), |
| aBorderSize.Left(), |
| rTopLeftPaint); |
| // Draw right line. |
| DrawVerticalLine( |
| rDevice, |
| rBox.Top()+aBorderSize.Top(), |
| rBox.Bottom()-aBorderSize.Bottom(), |
| rBox.Right()-aBorderSize.Right()+1, |
| aBorderSize.Right(), |
| rBottomRightPaint); |
| // Draw top right corner. |
| DrawVerticalLine( |
| rDevice, |
| rBox.Top(), |
| rBox.Top()+aBorderSize.Top()-1, |
| rBox.Right()-aBorderSize.Right()+1, |
| aBorderSize.Right(), |
| rCenterPaint); |
| // Draw bottom right corner. |
| DrawVerticalLine( |
| rDevice, |
| rBox.Bottom() - aBorderSize.Bottom()+1, |
| rBox.Bottom(), |
| rBox.Left(), |
| aBorderSize.Left(), |
| rCenterPaint); |
| } |
| |
| |
| |
| |
| void DrawHelper::DrawHorizontalLine( |
| OutputDevice& rDevice, |
| const sal_Int32 nLeft, |
| const sal_Int32 nRight, |
| const sal_Int32 nY, |
| const sal_Int32 nHeight, |
| const Paint& rPaint) |
| { |
| switch (rPaint.GetType()) |
| { |
| case Paint::NoPaint: |
| default: |
| break; |
| |
| case Paint::ColorPaint: |
| { |
| const Color aColor (rPaint.GetColor()); |
| rDevice.SetLineColor(aColor); |
| for (sal_Int32 nYOffset=0; nYOffset<nHeight; ++nYOffset) |
| rDevice.DrawLine( |
| Point(nLeft,nY+nYOffset), |
| Point(nRight,nY+nYOffset)); |
| break; |
| } |
| case Paint::GradientPaint: |
| rDevice.DrawGradient( |
| Rectangle( |
| nLeft, |
| nY, |
| nRight, |
| nY+nHeight-1), |
| rPaint.GetGradient()); |
| break; |
| } |
| } |
| |
| |
| |
| |
| void DrawHelper::DrawVerticalLine( |
| OutputDevice& rDevice, |
| const sal_Int32 nTop, |
| const sal_Int32 nBottom, |
| const sal_Int32 nX, |
| const sal_Int32 nWidth, |
| const Paint& rPaint) |
| { |
| switch (rPaint.GetType()) |
| { |
| case Paint::NoPaint: |
| default: |
| break; |
| |
| case Paint::ColorPaint: |
| { |
| const Color aColor (rPaint.GetColor()); |
| rDevice.SetLineColor(aColor); |
| for (sal_Int32 nXOffset=0; nXOffset<nWidth; ++nXOffset) |
| rDevice.DrawLine( |
| Point(nX+nXOffset, nTop), |
| Point(nX+nXOffset, nBottom)); |
| break; |
| } |
| case Paint::GradientPaint: |
| rDevice.DrawGradient( |
| Rectangle( |
| nX, |
| nTop, |
| nX+nWidth-1, |
| nBottom), |
| rPaint.GetGradient()); |
| break; |
| } |
| } |
| |
| |
| |
| |
| void DrawHelper::DrawRoundedRectangle ( |
| OutputDevice& rDevice, |
| const Rectangle& rBox, |
| const sal_Int32 nCornerRadius, |
| const Color& rBorderColor, |
| const Paint& rFillPaint) |
| { |
| rDevice.SetLineColor(rBorderColor); |
| switch(rFillPaint.GetType()) |
| { |
| case Paint::NoPaint: |
| default: |
| rDevice.SetFillColor(); |
| rDevice.DrawRect(rBox, nCornerRadius, nCornerRadius); |
| break; |
| |
| case Paint::ColorPaint: |
| rDevice.SetFillColor(rFillPaint.GetColor()); |
| rDevice.DrawRect(rBox, nCornerRadius, nCornerRadius); |
| break; |
| |
| case Paint::GradientPaint: |
| rDevice.DrawGradient( |
| rBox, |
| rFillPaint.GetGradient()); |
| rDevice.SetFillColor(); |
| rDevice.DrawRect(rBox, nCornerRadius, nCornerRadius); |
| break; |
| } |
| } |
| |
| |
| |
| |
| } } // end of namespace sfx2::sidebar |