162 lines
4.7 KiB
C++
162 lines
4.7 KiB
C++
|
/**************************************************************************\
|
||
|
*
|
||
|
* Copyright (c) 1998-2000 Microsoft Corporation
|
||
|
*
|
||
|
* Abstract:
|
||
|
*
|
||
|
* Contains the definiton of the DpPen structure which stores all of the
|
||
|
* state needed by drivers to render with a pen.
|
||
|
*
|
||
|
* Notes:
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
* Created:
|
||
|
*
|
||
|
* 12/01/1998 andrewgo
|
||
|
* Created it.
|
||
|
* 03/24/1999 agodfrey
|
||
|
* Moved into separate file.
|
||
|
* 12/8/99 bhouse
|
||
|
* Major overhaul of DpPen. No longer used as base class of GpPen.
|
||
|
* Moved all driver required state into DpPen. Changed to struct.
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
|
||
|
#ifndef _DPPEN_HPP
|
||
|
#define _DPPEN_HPP
|
||
|
|
||
|
//--------------------------------------------------------------------------
|
||
|
// Represent pen information
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
struct DpPen
|
||
|
{
|
||
|
BOOL IsEqual(const DpPen * pen) const
|
||
|
{
|
||
|
//!!! what to do about DeviceBrush and DashArray?
|
||
|
|
||
|
BOOL isEqual =
|
||
|
Type == pen->Type &&
|
||
|
Width == pen->Width &&
|
||
|
Unit == pen->Unit &&
|
||
|
StartCap == pen->StartCap &&
|
||
|
EndCap == pen->EndCap &&
|
||
|
Join == pen->Join &&
|
||
|
MiterLimit == pen->MiterLimit &&
|
||
|
PenAlignment == pen->PenAlignment &&
|
||
|
DashStyle == pen->DashStyle &&
|
||
|
DashCap == pen->DashCap &&
|
||
|
DashCount == pen->DashCount &&
|
||
|
DashOffset == pen->DashOffset;
|
||
|
|
||
|
if(isEqual)
|
||
|
{
|
||
|
if(CustomStartCap || pen->CustomStartCap)
|
||
|
{
|
||
|
if(CustomStartCap && pen->CustomStartCap)
|
||
|
isEqual = CustomStartCap->IsEqual(pen->CustomStartCap);
|
||
|
else
|
||
|
isEqual = FALSE; // One of them doesn't have
|
||
|
// a custom cap.
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(isEqual)
|
||
|
{
|
||
|
if(CustomEndCap || pen->CustomEndCap)
|
||
|
{
|
||
|
if(CustomEndCap && pen->CustomEndCap)
|
||
|
isEqual = CustomEndCap->IsEqual(pen->CustomEndCap);
|
||
|
else
|
||
|
isEqual = FALSE; // One of them doesn't have
|
||
|
// a custom cap.
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return isEqual;
|
||
|
}
|
||
|
|
||
|
// Can the path be rendered using our nominal width pen code?
|
||
|
|
||
|
BOOL IsOnePixelWideSolid(const GpMatrix *worldToDevice, REAL dpiX) const;
|
||
|
BOOL IsOnePixelWide(const GpMatrix *worldToDevice, REAL dpiX) const;
|
||
|
|
||
|
// See if the pen has a non-identity transform.
|
||
|
|
||
|
BOOL HasTransform() const
|
||
|
{
|
||
|
return !Xform.IsIdentity();
|
||
|
}
|
||
|
|
||
|
BOOL IsSimple() const
|
||
|
{
|
||
|
return (!((DashStyle != DashStyleSolid) ||
|
||
|
(StartCap & LineCapAnchorMask) ||
|
||
|
(EndCap & LineCapAnchorMask) ||
|
||
|
(DashCap & LineCapAnchorMask)
|
||
|
));
|
||
|
}
|
||
|
|
||
|
BOOL IsCompound() const
|
||
|
{
|
||
|
return ((CompoundCount > 0) && (CompoundArray != NULL));
|
||
|
}
|
||
|
|
||
|
BOOL IsCenterNoAnchor() const
|
||
|
{
|
||
|
return (!((StartCap & LineCapAnchorMask) ||
|
||
|
(EndCap & LineCapAnchorMask) ||
|
||
|
(DashCap & LineCapAnchorMask)
|
||
|
));
|
||
|
}
|
||
|
|
||
|
VOID InitDefaults()
|
||
|
{
|
||
|
Type = PenTypeSolidColor;
|
||
|
Width = 1;
|
||
|
Unit = UnitWorld;
|
||
|
StartCap = LineCapFlat;
|
||
|
EndCap = LineCapFlat;
|
||
|
Join = LineJoinMiter;
|
||
|
MiterLimit = 10; // PS's default miter limit.
|
||
|
PenAlignment = PenAlignmentCenter;
|
||
|
Brush = NULL;
|
||
|
DashStyle = DashStyleSolid;
|
||
|
DashCap = LineCapFlat;
|
||
|
DashCount = 0;
|
||
|
DashOffset = 0;
|
||
|
DashArray = NULL;
|
||
|
CompoundCount = 0;
|
||
|
CompoundArray = NULL;
|
||
|
CustomStartCap = NULL;
|
||
|
CustomEndCap = NULL;
|
||
|
}
|
||
|
|
||
|
GpPenType Type;
|
||
|
|
||
|
REAL Width;
|
||
|
GpUnit Unit;
|
||
|
GpLineCap StartCap;
|
||
|
GpLineCap EndCap;
|
||
|
GpLineJoin Join;
|
||
|
REAL MiterLimit;
|
||
|
GpPenAlignment PenAlignment;
|
||
|
|
||
|
const DpBrush * Brush;
|
||
|
GpMatrix Xform;
|
||
|
|
||
|
GpDashStyle DashStyle;
|
||
|
GpLineCap DashCap; // In v2, we should use GpDashCap for this
|
||
|
INT DashCount;
|
||
|
REAL DashOffset;
|
||
|
REAL* DashArray;
|
||
|
|
||
|
INT CompoundCount;
|
||
|
REAL* CompoundArray;
|
||
|
DpCustomLineCap* CustomStartCap;
|
||
|
DpCustomLineCap* CustomEndCap;
|
||
|
};
|
||
|
|
||
|
#endif
|