blob: 5c73a0692682c34bda201c041528d4de243c11b3 [file] [log] [blame]
/**************************************************************
*
* 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