blob: b77362715d9ea4de8f64c802d45102ee58f09fb5 [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.
*
*************************************************************/
#ifndef SVX_FRAMELINK_HXX
#define SVX_FRAMELINK_HXX
#include <algorithm>
#include <sal/types.h>
#include <tools/gen.hxx>
#include <tools/color.hxx>
#include "svx/svxdllapi.h"
class OutputDevice;
class SvxBorderLine;
namespace svx {
namespace frame {
// ============================================================================
// Enums
// ============================================================================
/** Specifies how the reference points for frame borders are used.
*/
enum RefMode
{
/** Frame borders are drawn centered to the reference points. */
REFMODE_CENTERED,
/** The reference points specify the begin of the frame border width.
The result is that horizontal lines are drawn below, and vertical lines
are drawn right of the reference points.
*/
REFMODE_BEGIN,
/** The reference points specify the end of the frame border width.
The result is that horizontal lines are drawn above, and vertical lines
are drawn left of the reference points.
*/
REFMODE_END
};
// ============================================================================
// Classes
// ============================================================================
/** Contains the widths of primary and secondary line of a frame style.
In the following, "frame style" is a complete style of one frame border,
i.e. the double line at the left side of the frame. A "line" is always a
trivial single line, i.e. the first line of a double frame style.
The following states of the members of this struct are valid:
mnPrim mnDist mnSecn frame style
-------------------------------------------------
0 0 0 invisible
>0 0 0 single
>0 >0 >0 double
The behaviour of the member functions for other states is not defined.
Per definition the primary line in double frame styles is:
- The top line for horizontal frame borders.
- The left line for vertical frame borders.
- The bottom-left line for top-left to bottom-right diagonal frame borders.
- The top-left line for bottom-left to top-right diagonal frame borders.
The following picture shows the upper end of a vertical double frame
border.
|<---------------- GetWidth() ----------------->|
| |
|<----- mnPrim ----->||<- mnDist ->||<- mnSecn >|
| || || |
###################### #############
###################### #############
###################### #############
###################### #############
###################### | #############
###################### | #############
|
|<- middle of the frame border
*/
class SVX_DLLPUBLIC Style
{
public:
/** Constructs an invisible frame style. */
inline explicit Style() : meRefMode( REFMODE_CENTERED ), mnPrim( 0 ), mnDist( 0 ), mnSecn( 0 ), mbDotted( false ) {}
/** Constructs a frame style with passed line widths. */
inline explicit Style( sal_uInt16 nP, sal_uInt16 nD, sal_uInt16 nS ) :
meRefMode( REFMODE_CENTERED ), mbDotted( false )
{ Set( nP, nD, nS ); }
/** Constructs a frame style with passed color and line widths. */
inline explicit Style( const Color& rColor, sal_uInt16 nP, sal_uInt16 nD, sal_uInt16 nS ) :
meRefMode( REFMODE_CENTERED ), mbDotted( false )
{ Set( rColor, nP, nD, nS ); }
/** Constructs a frame style from the passed SvxBorderLine struct. */
inline explicit Style( const SvxBorderLine& rBorder, double fScale = 1.0, sal_uInt16 nMaxWidth = SAL_MAX_UINT16, bool /*bUseDots*/ = false ) :
meRefMode( REFMODE_CENTERED ) { Set( rBorder, fScale, nMaxWidth ); }
/** Constructs a frame style from the passed SvxBorderLine struct. Clears the style, if pBorder is 0. */
inline explicit Style( const SvxBorderLine* pBorder, double fScale = 1.0, sal_uInt16 nMaxWidth = SAL_MAX_UINT16, bool /*bUseDots*/ = false ) :
meRefMode( REFMODE_CENTERED ) { Set( pBorder, fScale, nMaxWidth ); }
inline RefMode GetRefMode() const { return meRefMode; }
inline const Color& GetColor() const { return maColor; }
inline sal_uInt16 Prim() const { return mnPrim; }
inline sal_uInt16 Dist() const { return mnDist; }
inline sal_uInt16 Secn() const { return mnSecn; }
inline bool Dotted() const { return mbDotted; }
/** Returns the total width of this frame style. */
inline sal_uInt16 GetWidth() const { return mnPrim + mnDist + mnSecn; }
/** Sets the frame style to invisible state. */
void Clear();
/** Sets the frame style to the passed line widths. */
void Set( sal_uInt16 nP, sal_uInt16 nD, sal_uInt16 nS );
/** Sets the frame style to the passed line widths. */
void Set( const Color& rColor, sal_uInt16 nP, sal_uInt16 nD, sal_uInt16 nS );
/** Sets the frame style to the passed SvxBorderLine struct. */
void Set( const SvxBorderLine& rBorder, double fScale = 1.0, sal_uInt16 nMaxWidth = SAL_MAX_UINT16, bool /*bUseDots*/ = false );
/** Sets the frame style to the passed SvxBorderLine struct. Clears the style, if pBorder is 0. */
void Set( const SvxBorderLine* pBorder, double fScale = 1.0, sal_uInt16 nMaxWidth = SAL_MAX_UINT16, bool /*bUseDots*/ = false );
/** Sets a new reference point handling mode, does not modify other settings. */
inline void SetRefMode( RefMode eRefMode ) { meRefMode = eRefMode; }
/** Sets a new color, does not modify other settings. */
inline void SetColor( const Color& rColor ) { maColor = rColor; }
/** Sets whether to use dotted style for single hair lines. */
inline void SetDotted( bool bDotted ) { mbDotted = bDotted; }
/** Scales the style by the specified scaling factor. Ensures that visible lines keep visible. */
Style& ScaleSelf( double fScale, sal_uInt16 nMaxWidth = SAL_MAX_UINT16 );
/** Returns this style scaled by the specified scaling factor. Ensures that visible lines keep visible. */
Style Scale( double fScale, sal_uInt16 nMaxWidth = SAL_MAX_UINT16 ) const;
/** Mirrors this style (exchanges primary and secondary), if it is a double frame style. */
Style& MirrorSelf();
/** Returns this style mirrored, if it is a double frame style, otherwise a simple copy. */
Style Mirror() const;
private:
Color maColor; /// The color of the line(s) of this frame border.
RefMode meRefMode; /// Reference point handling for this frame border.
sal_uInt16 mnPrim; /// Width of primary (single, left, or top) line.
sal_uInt16 mnDist; /// Distance between primary and secondary line.
sal_uInt16 mnSecn; /// Width of secondary (right or bottom) line.
bool mbDotted; /// true = Draw dotted lines; false = Draw solid lines.
};
bool operator==( const Style& rL, const Style& rR );
SVX_DLLPUBLIC bool operator<( const Style& rL, const Style& rR );
inline bool operator!=( const Style& rL, const Style& rR ) { return !(rL == rR); }
inline bool operator>( const Style& rL, const Style& rR ) { return rR < rL; }
inline bool operator<=( const Style& rL, const Style& rR ) { return !(rR < rL); }
inline bool operator>=( const Style& rL, const Style& rR ) { return !(rL < rR); }
// ----------------------------------------------------------------------------
/** Extends the Style struct with an angle for diagonal frame borders.
The angle is specified in radian (a full circle is equivalent to 2*PI).
It is dependent on the context, how the value is interpreted, i.e. it may
specify the angle to a horizontal or vertical frame border.
*/
class DiagStyle : public Style
{
public:
/** Constructs an invisible diagonal frame style. */
inline explicit DiagStyle() : mfAngle( 0.0 ) {}
/** Constructs a diagonal frame style passed style and angle. */
inline explicit DiagStyle( const Style& rStyle, double fAngle ) :
Style( rStyle ), mfAngle( fAngle ) {}
inline double GetAngle() const { return mfAngle; }
/** Returns this style mirrored, if it is a double frame style, otherwise a simple copy. */
inline DiagStyle Mirror() const { return DiagStyle( Style::Mirror(), mfAngle ); }
private:
double mfAngle; /// Angle between this and hor. or vert. border.
};
// ============================================================================
// Various helper functions
// ============================================================================
/** Returns the angle between horizontal border of a rectangle and its diagonal.
The returned values represents the inner angle between the diagonals and
horizontal borders, and is therefore in the range [0,PI/2] (inclusive). The
passed sizes may be negative, calculation is done with absolute values.
*/
SVX_DLLPUBLIC double GetHorDiagAngle( long nWidth, long nHeight );
/** Returns the angle between horizontal border of a rectangle and its diagonal.
The returned values represents the inner angle between the diagonals and
horizontal borders, and is therefore in the range [0,PI/2] (inclusive). The
passed rectangle positions may be unordered, they are adjusted internally.
*/
inline double GetHorDiagAngle( long nX1, long nX2, long nY1, long nY2 )
{ return GetHorDiagAngle( nX2 - nX1, nY2 - nY1 ); }
/** Returns the angle between horizontal border of a rectangle and its diagonal.
The returned values represents the inner angle between the diagonals and
horizontal borders, and is therefore in the range [0,PI/2] (inclusive). The
passed rectangle edges may be unordered, they are adjusted internally.
*/
inline double GetHorDiagAngle( const Point& rP1, const Point& rP2 )
{ return GetHorDiagAngle( rP2.X() - rP1.X(), rP2.Y() - rP1.Y() ); }
/** Returns the angle between horizontal border of a rectangle and its diagonal.
The returned values represents the inner angle between the diagonals and
horizontal borders, and is therefore in the range [0,PI/2] (inclusive).
*/
inline double GetHorDiagAngle( const Rectangle& rRect )
{ return GetHorDiagAngle( rRect.GetWidth(), rRect.GetHeight() ); }
// ----------------------------------------------------------------------------
/** Returns the angle between vertical border of a rectangle and its diagonal.
The returned values represents the inner angle between the diagonals and
vertical borders, and is therefore in the range [0,PI/2] (inclusive). The
passed sizes may be negative, calculation is done with absolute values.
*/
inline double GetVerDiagAngle( long nWidth, long nHeight )
{ return GetHorDiagAngle( nHeight, nWidth ); }
/** Returns the angle between vertical border of a rectangle and its diagonal.
The returned values represents the inner angle between the diagonals and
vertical borders, and is therefore in the range [0,PI/2] (inclusive). The
passed rectangle positions may be unordered, they are adjusted internally.
*/
inline double GetVerDiagAngle( long nX1, long nX2, long nY1, long nY2 )
{ return GetVerDiagAngle( nX2 - nX1, nY2 - nY1 ); }
/** Returns the angle between vertical border of a rectangle and its diagonal.
The returned values represents the inner angle between the diagonals and
vertical borders, and is therefore in the range [0,PI/2] (inclusive). The
passed rectangle edges may be unordered, they are adjusted internally.
*/
inline double GetVerDiagAngle( const Point& rP1, const Point& rP2 )
{ return GetVerDiagAngle( rP2.X() - rP1.X(), rP2.Y() - rP1.Y() ); }
/** Returns the angle between vertical border of a rectangle and its diagonal.
The returned values represents the inner angle between the diagonals and
vertical borders, and is therefore in the range [0,PI/2] (inclusive).
*/
inline double GetVerDiagAngle( const Rectangle& rRect )
{ return GetVerDiagAngle( rRect.GetWidth(), rRect.GetHeight() ); }
// ============================================================================
/** Returns an X coordinate for a diagonal frame border in the specified height.
This function is for usage with the top-left end of a top-left to
bottom-right diagonal frame border, connected to the left end of a
horizontal frame border.
The function returns the relative X position (i.e. for a polygon) of the
diagonal frame border according to the specified relative Y position. The
mentioned positions are relative to the reference point of both frame
borders.
+----------------------------------------------------------
| The horizontal frame border.
| |
- - - - - - | --+-- <---- Reference point for horizontal and diagonal frame borders.
^ | \ | \
nVerOffs | \ \ <--- The diagonal frame border.
v +---\ \------------------------------------------------
- - - - - - - - -\- - -X <----- The function calculates the X position of i.e.
\ \ this point (relative from X of reference point).
\ \
Primary -->\ \<-- Secondary
@param nVerOffs
The vertical position of the point to be calculated, relative to the Y
coordinate of the reference point.
@param nDiagOffs
The width offset across the diagonal frame border (0 = middle),
regardless of the gradient of the diagonal frame border (always
vertical to the direction of the diagonal frame border). This value is
not related in any way to the reference point. For details about
relative width offsets, see description of class Style.
@param fAngle
Inner (right) angle between diagonal and horizontal frame border.
*/
SVX_DLLPUBLIC long GetTLDiagOffset( long nVerOffs, long nDiagOffs, double fAngle );
/** Returns an X coordinate for a diagonal frame border in the specified height.
This function is for usage with the bottom-left end of a bottom-left to
top-right diagonal frame border, connected to the left end of a horizontal
frame border.
The function returns the relative X position (i.e. for a polygon) of the
diagonal frame border according to the specified relative Y position. The
mentioned positions are relative to the reference point of both frame
borders.
Primary -->/ /<--- Secondary
/ /
/ / The function calculates the X position of i.e.
- - - - - - - - -/- - -X <----- this point (relative from X of reference point).
^ +---/ /------------------------------------------------
nVerOffs | / / <--- The diagonal frame border.
v | / | /
- - - - - - | --+-- <---- Reference point for horizontal and diagonal frame borders.
| |
| The horizontal frame border.
+----------------------------------------------------------
@param nVerOffs
The vertical position of the point to be calculated, relative to the Y
coordinate of the reference point.
@param nDiagOffs
The width offset across the diagonal frame border (0 = middle),
regardless of the gradient of the diagonal frame border (always
vertical to the direction of the diagonal frame border). This value is
not related in any way to the reference point. For details about
relative width offsets, see description of class Style.
@param fAngle
Inner (right) angle between diagonal and horizontal frame border.
*/
long GetBLDiagOffset( long nVerOffs, long nDiagOffs, double fAngle );
/** Returns an X coordinate for a diagonal frame border in the specified height.
This function is for usage with the bottom-right end of a top-left to
bottom-right diagonal frame border, connected to the right end of a
horizontal frame border.
@param nVerOffs
The vertical position of the point to be calculated, relative to the Y
coordinate of the reference point.
@param nDiagOffs
The width offset across the diagonal frame border (0 = middle),
regardless of the gradient of the diagonal frame border (always
vertical to the direction of the diagonal frame border). This value is
not related in any way to the reference point. For details about
relative width offsets, see description of class Style.
@param fAngle
Inner (left) angle between diagonal and horizontal frame border.
*/
long GetBRDiagOffset( long nVerOffs, long nDiagOffs, double fAngle );
/** Returns an X coordinate for a diagonal frame border in the specified height.
This function is for usage with the top-right end of a bottom-left to
top-right diagonal frame border, connected to the right end of a horizontal
frame border.
@param nVerOffs
The vertical position of the point to be calculated, relative to the Y
coordinate of the reference point.
@param nDiagOffs
The width offset across the diagonal frame border (0 = middle),
regardless of the gradient of the diagonal frame border (always
vertical to the direction of the diagonal frame border). This value is
not related in any way to the reference point. For details about
relative width offsets, see description of class Style.
@param fAngle
Inner (left) angle between diagonal and horizontal frame border.
*/
long GetTRDiagOffset( long nVerOffs, long nDiagOffs, double fAngle );
// ============================================================================
/** Checks whether two horizontal frame borders are "connectable".
Two borders are "connectable" in terms of this function, if both can be
drawn with only one call of a border drawing function. This means, the two
frame borders must have equal style and color, and none of the other
vertical and diagonal frame borders break the lines of the two borders in
any way (i.e. two vertical double frame borders would break the horizonal
frame borders). Of course this function can be used for vertical frame
borders as well.
The follong picture shows the meaning of all passed parameters:
\ rTFromT /
\ | /
rTFromTL | rTFromTR
\ | /
\ | /
======== rLBorder ========= ========== rRBorder =======
/ | \
/ | \
rBFromBL | rBFromBR
/ | \
/ rBFromB \
@return
True, if rLBorder and rRBorder can be drawn in one step without
interruption at their connection point.
*/
SVX_DLLPUBLIC bool CheckFrameBorderConnectable(
const Style& rLBorder, /// Style of the left frame border to connect.
const Style& rRBorder, /// Style of the right frame border to connect.
const Style& rTFromTL, /// Diagonal frame border from top-left to connection point.
const Style& rTFromT, /// Vertical frame border from top to connection point.
const Style& rTFromTR, /// Horizontal frame border from top-right to connection point.
const Style& rBFromBL, /// Diagonal frame border from bottom-left to connection point.
const Style& rBFromB, /// Vertical frame border from bottom to connection point.
const Style& rBFromBR /// Horizontal frame border from bottom-right to connection point.
);
// ============================================================================
// Drawing functions
// ============================================================================
/** Draws a horizontal frame border, regards all connected frame styles.
The frame style to draw is passed as parameter rBorder. The function
calculates the adjustment in X direction for left and right end of primary
and secondary line of the frame border (the style may present a double
line). The line ends may differ according to the connected frame styles
coming from top, bottom, left, right, and/or diagonal.
Thick frame styles are always drawn centered (in width) to the passed
reference points. The Y coordinates of both reference points must be equal
(the line cannot be drawn slanted).
The function preserves all settings of the passed output device.
All parameters starting with "rL" refer to the left end of the processed
frame border, all parameters starting with "rR" refer to the right end.
The following part of the parameter name starting with "From" specifies
where the frame border comes from. Example: "rLFromTR" means the frame
border coming from top-right, connected to the left end of rBorder (and
therefore a diagonal frame border).
The follong picture shows the meaning of all passed parameters:
rLFromT / \ rRFromT
| / \ |
| rLFromTR rRFromTL |
| / \ |
| / \ |
--- rLFromL --- ============== rBorder ============== --- rRFromR ---
| \ / |
| \ / |
| rLFromBR rRFromBL |
| \ / |
rLFromB \ / rRFromB
*/
SVX_DLLPUBLIC void DrawHorFrameBorder(
OutputDevice& rDev, /// The output device used to draw the frame border.
const Point& rLPos, /// Reference point for left end of the processed frame border.
const Point& rRPos, /// Reference point for right end of the processed frame border.
const Style& rBorder, /// Style of the processed frame border.
const DiagStyle& rLFromTR, /// Diagonal frame border from top-right to left end of rBorder.
const Style& rLFromT, /// Vertical frame border from top to left end of rBorder.
const Style& rLFromL, /// Horizontal frame border from left to left end of rBorder.
const Style& rLFromB, /// Vertical frame border from bottom to left end of rBorder.
const DiagStyle& rLFromBR, /// Diagonal frame border from bottom-right to left end of rBorder.
const DiagStyle& rRFromTL, /// Diagonal frame border from top-left to right end of rBorder.
const Style& rRFromT, /// Vertical frame border from top to right end of rBorder.
const Style& rRFromR, /// Horizontal frame border from right to right end of rBorder.
const Style& rRFromB, /// Vertical frame border from bottom to right end of rBorder.
const DiagStyle& rRFromBL, /// Diagonal frame border from bottom-left to right end of rBorder.
const Color* pForceColor = 0 /// If specified, overrides frame border color.
);
// ----------------------------------------------------------------------------
/** Draws a horizontal frame border, regards all connected frame styles.
This is a simplified version of the DrawHorFrameBorder() function described
above. It does not support diagonal connected frame borders. See description
above for additional details about the parameters.
The function preserves all settings of the passed output device.
*/
void SVX_DLLPUBLIC DrawHorFrameBorder(
OutputDevice& rDev, /// The output device used to draw the frame border.
const Point& rLPos, /// Reference point for left end of the processed frame border.
const Point& rRPos, /// Reference point for right end of the processed frame border.
const Style& rBorder, /// Style of the processed frame border.
const Style& rLFromT, /// Vertical frame border from top to left end of rBorder.
const Style& rLFromL, /// Horizontal frame border from left to left end of rBorder.
const Style& rLFromB, /// Vertical frame border from bottom to left end of rBorder.
const Style& rRFromT, /// Vertical frame border from top to right end of rBorder.
const Style& rRFromR, /// Horizontal frame border from right to right end of rBorder.
const Style& rRFromB, /// Vertical frame border from bottom to right end of rBorder.
const Color* pForceColor = 0 /// If specified, overrides frame border color.
);
// ----------------------------------------------------------------------------
/** Draws a horizontal frame border without connected frame styles.
This is the most simplified version of the DrawHorFrameBorder() function
described above. See description above for additional details about the
parameters.
The function preserves all settings of the passed output device.
*/
void SVX_DLLPUBLIC DrawHorFrameBorder(
OutputDevice& rDev, /// The output device used to draw the frame border.
const Point& rLPos, /// Reference point for left end of the processed frame border.
const Point& rRPos, /// Reference point for right end of the processed frame border.
const Style& rBorder, /// Style of the frame border to draw.
const Color* pForceColor = 0 /// If specified, overrides frame border color.
);
// ============================================================================
/** Draws a vertical frame border, regards all connected frame styles.
The frame style to draw is passed as parameter rBorder. The function
calculates the adjustment in Y direction for top and bottom end of primary
and secondary line of the frame border (the style may present a double
line). The line ends may differ according to the connected frame styles
coming from left, right, top, bottom, and/or diagonal.
Thick frame styles are always drawn centered (in width) to the passed
reference points. The X coordinates of both reference points must be equal
(the line cannot be drawn slanted).
The function preserves all settings of the passed output device.
All parameters starting with "rT" refer to the top end of the processed
frame border, all parameters starting with "rB" refer to the bottom end.
The following part of the parameter name starting with "From" specifies
where the frame border comes from. Example: "rTFromBL" means the frame
border coming from bottom-left, connected to the top end of rBorder (and
therefore a diagonal frame border).
The follong picture shows the meaning of all passed parameters:
|
rTFromT
|
|
--- rTFromL --- --- rTFromR ---
/ # \
/ # \
rTFromBL # rTFromBR
/ # \
/ # \
#
rBorder
#
\ # /
\ # /
rBFromTL # rBFromTR
\ # /
\ # /
--- rBFromL --- --- rBFromR ---
|
|
rBFromB
|
*/
SVX_DLLPUBLIC void DrawVerFrameBorder(
OutputDevice& rDev, /// The output device used to draw the frame border.
const Point& rTPos, /// Reference point for top end of the processed frame border.
const Point& rBPos, /// Reference point for bottom end of the processed frame border.
const Style& rBorder, /// Style of the processed frame border.
const DiagStyle& rTFromBL, /// Diagonal frame border from bottom-right to top end of rBorder.
const Style& rTFromL, /// Horizontal frame border from left to top end of rBorder.
const Style& rTFromT, /// Vertical frame border from top to top end of rBorder.
const Style& rTFromR, /// Horizontal frame border from right to top end of rBorder.
const DiagStyle& rTFromBR, /// Diagonal frame border from bottom-right to top end of rBorder.
const DiagStyle& rBFromTL, /// Diagonal frame border from top-left to bottom end of rBorder.
const Style& rBFromL, /// Horizontal frame border from left to bottom end of rBorder.
const Style& rBFromB, /// Vertical frame border from bottom to bottom end of rBorder.
const Style& rBFromR, /// Horizontal frame border from right to bottom end of rBorder.
const DiagStyle& rBFromTR, /// Diagonal frame border from top-right to bottom end of rBorder.
const Color* pForceColor = 0 /// If specified, overrides frame border color.
);
// ----------------------------------------------------------------------------
/** Draws a vertical frame border, regards all connected frame styles.
This is a simplified version of the DrawVerFrameBorder() function described
above. It does not support diagonal connected frame borders. See description
above for additional details about the parameters.
The function preserves all settings of the passed output device.
*/
void SVX_DLLPUBLIC DrawVerFrameBorder(
OutputDevice& rDev, /// The output device used to draw the frame border.
const Point& rTPos, /// Reference point for top end of the processed frame border.
const Point& rBPos, /// Reference point for bottom end of the processed frame border.
const Style& rBorder, /// Style of the processed frame border.
const Style& rTFromL, /// Horizontal frame border from left to top end of rBorder.
const Style& rTFromT, /// Vertical frame border from top to top end of rBorder.
const Style& rTFromR, /// Horizontal frame border from right to top end of rBorder.
const Style& rBFromL, /// Horizontal frame border from left to bottom end of rBorder.
const Style& rBFromB, /// Vertical frame border from bottom to bottom end of rBorder.
const Style& rBFromR, /// Horizontal frame border from right to bottom end of rBorder.
const Color* pForceColor = 0 /// If specified, overrides frame border color.
);
// ----------------------------------------------------------------------------
/** Draws a vertical frame border without connected frame styles.
This is the most simplified version of the DrawVerFrameBorder() function
described above. See description above for additional details about the
parameters.
The function preserves all settings of the passed output device.
*/
void SVX_DLLPUBLIC DrawVerFrameBorder(
OutputDevice& rDev, /// The output device used to draw the frame border.
const Point& rTPos, /// Reference point for top end of the processed frame border.
const Point& rBPos, /// Reference point for bottom end of the processed frame border.
const Style& rBorder, /// Style of the frame border to draw.
const Color* pForceColor = 0 /// If specified, overrides frame border color.
);
// ----------------------------------------------------------------------------
/** Draws a vertical slanted frame border without connected frame styles.
This is an extended version of the simple DrawVerFrameBorder() function
described above. It accepts start and end reference points with different
X coordinates. See description above for additional details about the
parameters (except the restriction on the reference points).
The function preserves all settings of the passed output device.
*/
void SVX_DLLPUBLIC DrawVerFrameBorderSlanted(
OutputDevice& rDev, /// The output device used to draw the frame border.
const Point& rTPos, /// Reference point for top end of the processed frame border.
const Point& rBPos, /// Reference point for bottom end of the processed frame border.
const Style& rBorder, /// Style of the frame border to draw.
const Color* pForceColor = 0 /// If specified, overrides frame border color.
);
// ============================================================================
/** Draws both diagonal frame borders, regards all connected frame styles.
One or both passed diagonal frame styles may be invisible.
The function preserves all settings of the passed output device.
*/
SVX_DLLPUBLIC void DrawDiagFrameBorders(
OutputDevice& rDev, /// The output device used to draw the frame border.
const Rectangle& rRect, /// Rectangle for both diagonal frame borders.
const Style& rTLBR, /// Style of the processed top-left to bottom-right diagonal frame border.
const Style& rBLTR, /// Style of the processed bottom-left to top-right diagonal frame border.
const Style& rTLFromB, /// Vertical frame border from bottom to top-left end of rTLBR.
const Style& rTLFromR, /// Horizontal frame border from right to top-left end of rTLBR.
const Style& rBRFromT, /// Vertical frame border from top to bottom-right end of rTLBR.
const Style& rBRFromL, /// Horizontal frame border from left to bottom-right end of rTLBR.
const Style& rBLFromT, /// Vertical frame border from top to bottom-left end of rBLTR.
const Style& rBLFromR, /// Horizontal frame border from right to bottom-left end of rBLTR.
const Style& rTRFromB, /// Vertical frame border from bottom to top-right end of rBLTR.
const Style& rTRFromL, /// Horizontal frame border from left to top-right end of rBLTR.
const Color* pForceColor = 0, /// If specified, overrides frame border color.
bool bDiagDblClip = false /// true = Use clipping for crossing double frame borders.
);
// ============================================================================
} // namespace frame
} // namespace svx
/* Yes, I love ASCII art. :-) -DR- */
#endif