blob: 6d19a4ce5c2137a5364de4d9d23fff05623e0d51 [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.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
#include <tools/poly.hxx>
#include <vcl/metric.hxx>
#include <vcl/svapp.hxx>
#include <svtools/colorcfg.hxx>
#include <svx/swframeexample.hxx>
#include <com/sun/star/text/TextContentAnchorType.hpp>
#include <com/sun/star/text/HoriOrientation.hpp>
#include <com/sun/star/text/VertOrientation.hpp>
#include <com/sun/star/text/RelOrientation.hpp>
#include <com/sun/star/text/WrapTextMode.hpp>
using namespace ::com::sun::star::text;
#define FLYINFLY_BORDER 3
#define DEMOTEXT "Ij"
#define C2S(cChar) UniString::CreateFromAscii(cChar)
SvxSwFrameExample::SvxSwFrameExample( Window *pParent, const ResId& rResID ) :
Window(pParent, rResID),
nHAlign (HoriOrientation::CENTER),
nHRel (RelOrientation::FRAME),
nVAlign (VertOrientation::TOP),
nVRel (RelOrientation::PRINT_AREA),
nWrap (WrapTextMode_NONE),
nAnchor (TextContentAnchorType_AT_PAGE),
bTrans (sal_False),
aRelPos (Point(0,0))
{
InitColors_Impl();
SetMapMode(MAP_PIXEL);
}
SvxSwFrameExample::~SvxSwFrameExample()
{
}
void SvxSwFrameExample::InitColors_Impl( void )
{
const StyleSettings& rSettings = GetSettings().GetStyleSettings();
m_aBgCol = Color( rSettings.GetWindowColor() ); // old: COL_WHITE
sal_Bool bHC = rSettings.GetHighContrastMode();
m_aFrameColor = Color( COL_LIGHTGREEN );
m_aAlignColor = Color( COL_LIGHTRED );
m_aTransColor = Color( COL_TRANSPARENT );
m_aTxtCol = bHC?
svtools::ColorConfig().GetColorValue(svtools::FONTCOLOR).nColor :
Color( COL_GRAY ); // old: COL_GRAY
m_aPrintAreaCol = bHC? m_aTxtCol : Color( COL_GRAY );
m_aBorderCol = m_aTxtCol; // old: COL_BLACK;
m_aBlankCol = bHC? m_aTxtCol : Color( COL_LIGHTGRAY );
m_aBlankFrameCol = bHC? m_aTxtCol : Color( COL_GRAY );
}
void SvxSwFrameExample::DataChanged( const DataChangedEvent& rDCEvt )
{
Window::DataChanged( rDCEvt );
if( rDCEvt.GetType() == DATACHANGED_SETTINGS && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
InitColors_Impl();
}
void SvxSwFrameExample::InitAllRects_Impl()
{
// const Size aSz(GetOutputSizePixel());
// Seite
// aPage.SetSize(Size(aSz.Width() - 3, aSz.Height() - 3));
aPage.SetSize( GetOutputSizePixel() );
sal_uIntPtr nOutWPix = aPage.GetWidth();
sal_uIntPtr nOutHPix = aPage.GetHeight();
// PrintArea
sal_uIntPtr nLBorder;
sal_uIntPtr nRBorder;
sal_uIntPtr nTBorder;
sal_uIntPtr nBBorder;
sal_uIntPtr nLTxtBorder;
sal_uIntPtr nRTxtBorder;
sal_uIntPtr nTTxtBorder;
sal_uIntPtr nBTxtBorder;
if (nAnchor != TextContentAnchorType_AS_CHARACTER)
{
nLBorder = 14;
nRBorder = 10;
nTBorder = 10;
nBBorder = 15;
nLTxtBorder = 8;
nRTxtBorder = 4;
nTTxtBorder = 2;
nBTxtBorder = 2;
}
else
{
nLBorder = 2;
nRBorder = 2;
nTBorder = 2;
nBBorder = 2;
nLTxtBorder = 2;
nRTxtBorder = 2;
nTTxtBorder = 2;
nBTxtBorder = 2;
}
aPagePrtArea = Rectangle(Point(nLBorder, nTBorder), Point((nOutWPix - 1) - nRBorder, (nOutHPix - 1) - nBBorder));
// Beispiel-Text: Vorbereiten fuer die Textausgabe
// Eine Textzeile
aTextLine = aPagePrtArea;
aTextLine.SetSize(Size(aTextLine.GetWidth(), 2));
aTextLine.Left() += nLTxtBorder;
aTextLine.Right() -= nRTxtBorder;
aTextLine.Move(0, nTTxtBorder);
// Rechteck um Absatz incl. Raender
sal_uInt16 nLines = (sal_uInt16)((aPagePrtArea.GetHeight() / 2 - nTTxtBorder - nBTxtBorder)
/ (aTextLine.GetHeight() + 2));
aPara = aPagePrtArea;
aPara.SetSize(Size(aPara.GetWidth(),
(aTextLine.GetHeight() + 2) * nLines + nTTxtBorder + nBTxtBorder));
// Rechteck um Absatz ohne Raender
aParaPrtArea = aPara;
aParaPrtArea.Left() += nLTxtBorder;
aParaPrtArea.Right() -= nRTxtBorder;
aParaPrtArea.Top() += nTTxtBorder;
aParaPrtArea.Bottom() -= nBTxtBorder;
if (nAnchor == TextContentAnchorType_AS_CHARACTER || nAnchor == TextContentAnchorType_AT_CHARACTER)
{
Font aFont = OutputDevice::GetDefaultFont(
DEFAULTFONT_LATIN_TEXT, Application::GetSettings().GetLanguage(),
DEFAULTFONT_FLAGS_ONLYONE, this );
aFont.SetColor( m_aTxtCol );
aFont.SetFillColor( m_aBgCol );
aFont.SetWeight(WEIGHT_NORMAL);
if (nAnchor == TextContentAnchorType_AS_CHARACTER)
{
aFont.SetSize(Size(0, aParaPrtArea.GetHeight() - 2));
SetFont(aFont);
aParaPrtArea.SetSize(Size(GetTextWidth(C2S(DEMOTEXT)), GetTextHeight()));
}
else
{
aFont.SetSize(Size(0, aParaPrtArea.GetHeight() / 2));
SetFont(aFont);
aAutoCharFrame.SetSize(Size(GetTextWidth('A'), GetTextHeight()));
aAutoCharFrame.SetPos(Point(aParaPrtArea.Left() + (aParaPrtArea.GetWidth() - aAutoCharFrame.GetWidth()) / 2,
aParaPrtArea.Top() + (aParaPrtArea.GetHeight() - aAutoCharFrame.GetHeight()) / 2));
}
}
// Innerer Frame fuer am Frame verankerte Rahmen
aFrameAtFrame = aPara;
aFrameAtFrame.Left() += 9;
aFrameAtFrame.Right() -= 5;
aFrameAtFrame.Bottom() += 5;
aFrameAtFrame.SetPos(Point(aFrameAtFrame.Left() + 2, (aPagePrtArea.Bottom() - aFrameAtFrame.GetHeight()) / 2 + 5));
// Groesse des zu positionierenden Rahmens
if (nAnchor != TextContentAnchorType_AS_CHARACTER)
{
sal_uIntPtr nLFBorder = nAnchor == TextContentAnchorType_AT_PAGE ? nLBorder : nLTxtBorder;
sal_uIntPtr nRFBorder = nAnchor == TextContentAnchorType_AT_PAGE ? nRBorder : nRTxtBorder;
switch (nHRel)
{
case RelOrientation::PAGE_LEFT:
case RelOrientation::FRAME_LEFT:
aFrmSize = Size(nLFBorder - 4, (aTextLine.GetHeight() + 2) * 3);
break;
case RelOrientation::PAGE_RIGHT:
case RelOrientation::FRAME_RIGHT:
aFrmSize = Size(nRFBorder - 4, (aTextLine.GetHeight() + 2) * 3);
break;
default:
aFrmSize = Size(nLBorder - 3, (aTextLine.GetHeight() + 2) * 3);
break;
}
aFrmSize.Width() = Max(5L, aFrmSize.Width());
aFrmSize.Height() = Max(5L, aFrmSize.Height());
}
else
{
sal_uIntPtr nFreeWidth = aPagePrtArea.GetWidth() - GetTextWidth(C2S(DEMOTEXT));
aFrmSize = Size(nFreeWidth / 2, (aTextLine.GetHeight() + 2) * 3);
aDrawObj.SetSize(Size(Max(5L, (long)nFreeWidth / 3L), Max(5L, aFrmSize.Height() * 3L)));
aDrawObj.SetPos(Point(aParaPrtArea.Right() + 1, aParaPrtArea.Bottom() / 2));
aParaPrtArea.Right() = aDrawObj.Right();
}
}
void SvxSwFrameExample::CalcBoundRect_Impl(Rectangle &rRect)
{
switch (nAnchor)
{
case TextContentAnchorType_AT_PAGE:
{
switch (nHRel)
{
case RelOrientation::FRAME:
case RelOrientation::PAGE_FRAME:
rRect.Left() = aPage.Left();
rRect.Right() = aPage.Right();
break;
case RelOrientation::PRINT_AREA:
case RelOrientation::PAGE_PRINT_AREA:
rRect.Left() = aPagePrtArea.Left();
rRect.Right() = aPagePrtArea.Right();
break;
case RelOrientation::PAGE_LEFT:
rRect.Left() = aPage.Left();
rRect.Right() = aPagePrtArea.Left();
break;
case RelOrientation::PAGE_RIGHT:
rRect.Left() = aPagePrtArea.Right();
rRect.Right() = aPage.Right();
break;
}
switch (nVRel)
{
case RelOrientation::PRINT_AREA:
case RelOrientation::PAGE_PRINT_AREA:
rRect.Top() = aPagePrtArea.Top();
rRect.Bottom() = aPagePrtArea.Bottom();
break;
case RelOrientation::FRAME:
case RelOrientation::PAGE_FRAME:
rRect.Top() = aPage.Top();
rRect.Bottom() = aPage.Bottom();
break;
}
}
break;
case TextContentAnchorType_AT_FRAME:
{
switch (nHRel)
{
case RelOrientation::FRAME:
case RelOrientation::PAGE_FRAME:
rRect.Left() = aFrameAtFrame.Left();
rRect.Right() = aFrameAtFrame.Right();
break;
case RelOrientation::PRINT_AREA:
case RelOrientation::PAGE_PRINT_AREA:
rRect.Left() = aFrameAtFrame.Left() + FLYINFLY_BORDER;
rRect.Right() = aFrameAtFrame.Right() - FLYINFLY_BORDER;
break;
case RelOrientation::PAGE_RIGHT:
rRect.Left() = aFrameAtFrame.Left();
rRect.Right() = aFrameAtFrame.Left() + FLYINFLY_BORDER;
break;
case RelOrientation::PAGE_LEFT:
rRect.Left() = aFrameAtFrame.Right();
rRect.Right() = aFrameAtFrame.Right() - FLYINFLY_BORDER;
break;
}
switch (nVRel)
{
case RelOrientation::FRAME:
case RelOrientation::PAGE_FRAME:
rRect.Top() = aFrameAtFrame.Top();
rRect.Bottom() = aFrameAtFrame.Bottom();
break;
case RelOrientation::PRINT_AREA:
case RelOrientation::PAGE_PRINT_AREA:
rRect.Top() = aFrameAtFrame.Top() + FLYINFLY_BORDER;
rRect.Bottom() = aFrameAtFrame.Bottom() - FLYINFLY_BORDER;
break;
}
}
break;
case TextContentAnchorType_AT_PARAGRAPH:
case TextContentAnchorType_AT_CHARACTER:
{
switch (nHRel)
{
case RelOrientation::FRAME:
rRect.Left() = aPara.Left();
rRect.Right() = aPara.Right();
break;
case RelOrientation::PRINT_AREA:
rRect.Left() = aParaPrtArea.Left();
rRect.Right() = aParaPrtArea.Right();
break;
case RelOrientation::PAGE_LEFT:
rRect.Left() = aPage.Left();
rRect.Right() = aPagePrtArea.Left();
break;
case RelOrientation::PAGE_RIGHT:
rRect.Left() = aPagePrtArea.Right();
rRect.Right() = aPage.Right();
break;
case RelOrientation::PAGE_FRAME:
rRect.Left() = aPage.Left();
rRect.Right() = aPage.Right();
break;
case RelOrientation::PAGE_PRINT_AREA:
rRect.Left() = aPagePrtArea.Left();
rRect.Right() = aPagePrtArea.Right();
break;
case RelOrientation::FRAME_LEFT:
rRect.Left() = aPara.Left();
rRect.Right() = aParaPrtArea.Left();
break;
case RelOrientation::FRAME_RIGHT:
rRect.Left() = aParaPrtArea.Right();
rRect.Right() = aPara.Right();
break;
case RelOrientation::CHAR:
rRect.Left() = aAutoCharFrame.Left();
rRect.Right() = aAutoCharFrame.Left();
break;
}
switch (nVRel)
{
case RelOrientation::FRAME:
rRect.Top() = aPara.Top();
rRect.Bottom() = aPara.Bottom();
break;
case RelOrientation::PRINT_AREA:
rRect.Top() = aParaPrtArea.Top();
rRect.Bottom() = aParaPrtArea.Bottom();
break;
case RelOrientation::CHAR:
if (nVAlign != VertOrientation::NONE &&
nVAlign != VertOrientation::CHAR_BOTTOM)
rRect.Top() = aAutoCharFrame.Top();
else
rRect.Top() = aAutoCharFrame.Bottom();
rRect.Bottom() = aAutoCharFrame.Bottom();
break;
// OD 12.11.2003 #i22341#
case RelOrientation::TEXT_LINE:
rRect.Top() = aAutoCharFrame.Top();
rRect.Bottom() = aAutoCharFrame.Top();
break;
}
}
break;
case TextContentAnchorType_AS_CHARACTER:
rRect.Left() = aParaPrtArea.Left();
rRect.Right() = aParaPrtArea.Right();
switch (nVAlign)
{
case VertOrientation::NONE:
case VertOrientation::TOP:
case VertOrientation::CENTER:
case VertOrientation::BOTTOM:
{
FontMetric aMetric(GetFontMetric());
rRect.Top() = aParaPrtArea.Bottom() - aMetric.GetDescent();
rRect.Bottom() = rRect.Top();
}
break;
default:
case VertOrientation::LINE_TOP:
case VertOrientation::LINE_CENTER:
case VertOrientation::LINE_BOTTOM:
rRect.Top() = aParaPrtArea.Top();
rRect.Bottom() = aDrawObj.Bottom();
break;
case VertOrientation::CHAR_TOP:
case VertOrientation::CHAR_CENTER:
case VertOrientation::CHAR_BOTTOM:
rRect.Top() = aParaPrtArea.Top();
rRect.Bottom() = aParaPrtArea.Bottom();
break;
}
break;
default:
break;
}
}
Rectangle SvxSwFrameExample::DrawInnerFrame_Impl(const Rectangle &rRect, const Color &rFillColor, const Color &rBorderColor)
{
DrawRect_Impl(rRect, rFillColor, rBorderColor);
// Bereich, zu dem relativ positioniert wird, bestimmen
Rectangle aRect(rRect); // aPagePrtArea = Default
CalcBoundRect_Impl(aRect);
if (nAnchor == TextContentAnchorType_AT_FRAME && &rRect == &aPagePrtArea)
{
// Testabsatz zeichnen
Rectangle aTxt(aTextLine);
sal_Int32 nStep = aTxt.GetHeight() + 2;
sal_uInt16 nLines = (sal_uInt16)(aParaPrtArea.GetHeight() / (aTextLine.GetHeight() + 2));
for (sal_uInt16 i = 0; i < nLines; i++)
{
if (i == nLines - 1)
aTxt.SetSize(Size(aTxt.GetWidth() / 2, aTxt.GetHeight()));
DrawRect_Impl(aTxt, m_aTxtCol, m_aTransColor);
aTxt.Move(0, nStep);
}
}
return aRect;
}
void SvxSwFrameExample::Paint(const Rectangle&)
{
InitAllRects_Impl();
// Schatten zeichnen
// Rectangle aShadow(aPage);
// aShadow += Point(3, 3);
// DrawRect_Impl(aShadow, Color(COL_GRAY), aTransColor);
// Seite zeichnen
DrawRect_Impl( aPage, m_aBgCol, m_aBorderCol );
// PrintArea zeichnen
Rectangle aRect = DrawInnerFrame_Impl( aPagePrtArea, m_aTransColor, m_aPrintAreaCol );
if (nAnchor == TextContentAnchorType_AT_FRAME)
aRect = DrawInnerFrame_Impl( aFrameAtFrame, m_aBgCol, m_aBorderCol );
long lXPos = 0;
long lYPos = 0;
// Horizontale Ausrichtung
//
if (nAnchor != TextContentAnchorType_AS_CHARACTER)
{
switch (nHAlign)
{
case HoriOrientation::RIGHT:
{
lXPos = aRect.Right() - aFrmSize.Width() + 1;
break;
}
case HoriOrientation::CENTER:
{
lXPos = aRect.Left() + (aRect.GetWidth() - aFrmSize.Width()) / 2;
break;
}
case HoriOrientation::NONE:
{
lXPos = aRect.Left() + aRelPos.X();
break;
}
default: // HoriOrientation::LEFT
lXPos = aRect.Left();
break;
}
}
else
lXPos = aRect.Right() + 2;
// Vertikale Ausrichtung
//
if (nAnchor != TextContentAnchorType_AS_CHARACTER)
{
switch (nVAlign)
{
case VertOrientation::BOTTOM:
case VertOrientation::LINE_BOTTOM:
{
// OD 12.11.2003 #i22341#
if ( nVRel != RelOrientation::TEXT_LINE )
{
lYPos = aRect.Bottom() - aFrmSize.Height() + 1;
}
else
{
lYPos = aRect.Top();
}
break;
}
case VertOrientation::CENTER:
case VertOrientation::LINE_CENTER:
{
lYPos = aRect.Top() + (aRect.GetHeight() - aFrmSize.Height()) / 2;
break;
}
case VertOrientation::NONE:
{
// OD 12.11.2003 #i22341#
if ( nVRel != RelOrientation::CHAR && nVRel != RelOrientation::TEXT_LINE )
lYPos = aRect.Top() + aRelPos.Y();
else
lYPos = aRect.Top() - aRelPos.Y();
break;
}
default:
// OD 12.11.2003 #i22341#
if ( nVRel != RelOrientation::TEXT_LINE )
{
lYPos = aRect.Top();
}
else
{
lYPos = aRect.Bottom() - aFrmSize.Height() + 1;
}
break;
}
}
else
{
switch(nVAlign)
{
case VertOrientation::CENTER:
case VertOrientation::CHAR_CENTER:
case VertOrientation::LINE_CENTER:
lYPos = aRect.Top() + (aRect.GetHeight() - aFrmSize.Height()) / 2;
break;
case VertOrientation::TOP:
case VertOrientation::CHAR_BOTTOM:
case VertOrientation::LINE_BOTTOM:
lYPos = aRect.Bottom() - aFrmSize.Height() + 1;
break;
/* case VertOrientation::NONE:
case VertOrientation::BOTTOM:
case VertOrientation::CHAR_TOP:
case VertOrientation::LINE_TOP:*/
default:
lYPos = aRect.Top() - aRelPos.Y();
break;
}
}
Rectangle aFrmRect(Point(lXPos, lYPos), aFrmSize);
Rectangle *pOuterFrame = &aPage;
if (nAnchor == TextContentAnchorType_AT_FRAME)
pOuterFrame = &aFrameAtFrame;
if (aFrmRect.Left() < pOuterFrame->Left())
aFrmRect.Move(pOuterFrame->Left() - aFrmRect.Left(), 0);
if (aFrmRect.Right() > pOuterFrame->Right())
aFrmRect.Move(pOuterFrame->Right() - aFrmRect.Right(), 0);
if (aFrmRect.Top() < pOuterFrame->Top())
aFrmRect.Move(0, pOuterFrame->Top() - aFrmRect.Top());
if (aFrmRect.Bottom() > pOuterFrame->Bottom())
aFrmRect.Move(0, pOuterFrame->Bottom() - aFrmRect.Bottom());
// Testabsatz zeichnen
const long nTxtLineHeight = aTextLine.GetHeight();
Rectangle aTxt(aTextLine);
sal_Int32 nStep;
sal_uInt16 nLines;
if (nAnchor == TextContentAnchorType_AT_FRAME)
{
aTxt.Left() = aFrameAtFrame.Left() + FLYINFLY_BORDER;
aTxt.Right() = aFrameAtFrame.Right() - FLYINFLY_BORDER;
aTxt.Top() = aFrameAtFrame.Top() + FLYINFLY_BORDER;
aTxt.Bottom() = aTxt.Top() + aTextLine.GetHeight() - 1;
nStep = aTxt.GetHeight() + 2;
nLines = (sal_uInt16)(((aFrameAtFrame.GetHeight() - 2 * FLYINFLY_BORDER) * 2 / 3)
/ (aTxt.GetHeight() + 2));
}
else
{
nStep = aTxt.GetHeight() + 2;
nLines = (sal_uInt16)(aParaPrtArea.GetHeight() / (aTextLine.GetHeight() + 2));
}
if (nAnchor != TextContentAnchorType_AS_CHARACTER)
{
// Text simulieren
//
const long nOldR = aTxt.Right();
const long nOldL = aTxt.Left();
// OD 12.11.2003 #i22341#
const bool bIgnoreWrap = nAnchor == TextContentAnchorType_AT_CHARACTER &&
( nHRel == RelOrientation::CHAR || nVRel == RelOrientation::CHAR ||
nVRel == RelOrientation::TEXT_LINE );
for (sal_uInt16 i = 0; i < nLines; ++i)
{
if (i == (nLines - 1))
aTxt.SetSize(Size(aTxt.GetWidth() / 2, aTxt.GetHeight()));
if (aTxt.IsOver(aFrmRect) && nAnchor != TextContentAnchorType_AS_CHARACTER && !bIgnoreWrap)
{
switch(nWrap)
{
case WrapTextMode_NONE:
aTxt.Top() = aFrmRect.Bottom() + nTxtLineHeight;
aTxt.Bottom() = aTxt.Top() + nTxtLineHeight - 1;
break;
case WrapTextMode_LEFT:
aTxt.Right() = aFrmRect.Left();
break;
case WrapTextMode_RIGHT:
aTxt.Left() = aFrmRect.Right();
break;
}
}
if (pOuterFrame->IsInside(aTxt))
DrawRect_Impl( aTxt, m_aTxtCol, m_aTransColor );
aTxt.Move(0, nStep);
aTxt.Right() = nOldR;
aTxt.Left() = nOldL;
}
aTxt.Move(0, -nStep);
if (nAnchor != TextContentAnchorType_AT_FRAME && aTxt.Bottom() > aParaPrtArea.Bottom())
{
// Text wurde durch Rahmen verdraengt, daher Para-Hoehe anpassen
sal_uIntPtr nDiff = aTxt.Bottom() - aParaPrtArea.Bottom();
aParaPrtArea.Bottom() += nDiff;
aPara.Bottom() += nDiff;
CalcBoundRect_Impl(aRect);
aParaPrtArea.Bottom() -= nDiff;
aPara.Bottom() -= nDiff;
}
if (nAnchor == TextContentAnchorType_AT_CHARACTER && bIgnoreWrap)
DrawText(aAutoCharFrame, 'A');
}
else
{
DrawText(aParaPrtArea, C2S(DEMOTEXT));
DrawRect_Impl(aDrawObj, m_aBlankCol, m_aBlankFrameCol );
}
// Rechteck zeichnen, zu dem der Rahmen ausgerichtet wird:
DrawRect_Impl(aRect, m_aTransColor, m_aAlignColor);
// Frame anzeigen
sal_Bool bDontFill = (nAnchor == TextContentAnchorType_AT_CHARACTER && aFrmRect.IsOver(aAutoCharFrame)) ? sal_True : bTrans;
DrawRect_Impl( aFrmRect, bDontFill? m_aTransColor : m_aBgCol, m_aFrameColor );
}
void SvxSwFrameExample::SetRelPos(const Point& rP)
{
aRelPos = rP;
if (aRelPos.X() > 0)
aRelPos.X() = 5;
if (aRelPos.X() < 0)
aRelPos.X() = -5;
if (aRelPos.Y() > 0)
aRelPos.Y() = 5;
if (aRelPos.Y() < 0)
aRelPos.Y() = -5;
}
void SvxSwFrameExample::DrawRect_Impl(const Rectangle &rRect, const Color &rFillColor, const Color &rLineColor)
{
SetFillColor(rFillColor);
SetLineColor(rLineColor);
Window::DrawRect(rRect);
}