libemf 1.0.9
Public Member Functions | Data Fields
EMF::METAFILEDEVICECONTEXT Class Reference

Graphics Device Context. More...

#include <libemf.h>

Inheritance diagram for EMF::METAFILEDEVICECONTEXT:
EMF::OBJECT

Public Member Functions

 METAFILEDEVICECONTEXT (FILE *fp_, const RECT *size, LPCWSTR description_w)
 
virtual ~METAFILEDEVICECONTEXT ()
 
OBJECTTYPE getType (void) const
 
DWORD nextHandle (void)
 
void clearHandle (DWORD handle)
 
void appendRecord (METARECORD *record)
 
void appendHandle (METARECORD *record)
 
void deleteMetafile (void)
 
void mergePoint (const LONG &x, const LONG &y)
 
void mergePoint (const POINT &p)
 
- Public Member Functions inherited from EMF::OBJECT
virtual ~OBJECT ()
 OBJECTs have a virtual destructor.
 
 OBJECT (void)
 
virtual OBJECTTYPE getType (void) const =0
 

Data Fields

::FILE * fp
 
DATASTREAM ds
 
ENHMETAHEADERheader
 
std::vector< EMF::METARECORD * > records
 
SIZEL resolution
 The resolution in DPI of the reference DC.
 
SIZEL viewport_ext
 The extent of the viewport.
 
POINT viewport_org
 The origin of the viewport.
 
SIZEL window_ext
 The extent of the window.
 
POINT window_org
 The origin of the window.
 
bool update_frame
 Update the frame automatically?
 
POINT min_device_point
 The lft/top-most painted point in device units.
 
POINT max_device_point
 The rgt/btm-most painted point in device units.
 
POINT point
 The current point.
 
PENpen
 The current pen.
 
BRUSHbrush
 The current brush.
 
FONTfont
 The current font.
 
PALETTEpalette
 The current palette.
 
UINT text_alignment
 The current text alignment.
 
COLORREF text_color
 The current text foreground color.
 
COLORREF bk_color
 The current background color.
 
INT bk_mode
 The current background mode.
 
INT polyfill_mode
 The current polygon fill mode.
 
INT map_mode
 The current mapping mode.
 
FLOAT miter_limit
 The current miter length limit.
 
std::vector< bool > handles
 
std::map< HGDIOBJ, HGDIOBJ > emf_handles
 
- Data Fields inherited from EMF::OBJECT
HGDIOBJ handle
 

Detailed Description

Graphics Device Context.

Almost all GDI graphics calls require a device context (except those which create graphics objects such as pens and fonts). This is a specific context which renders to a metafile. There is a one-to-one correspondence between the device context and the metafile.

Constructor & Destructor Documentation

◆ METAFILEDEVICECONTEXT()

EMF::METAFILEDEVICECONTEXT::METAFILEDEVICECONTEXT ( FILE *  fp_,
const RECT *  size,
LPCWSTR  description_w 
)
inline

Most graphics programs seem to want to handle the opening and closing of files themselves, so this is an extension to the w32 interface.

Parameters
fp_stdio pointer to an open file. May be null.
sizethe rectangle describing the position and size of the metafile on the "page". May be null.
description_wa UNICODE string describing the metafile. The format must be "some text\0some more text\0\0". May be null.

◆ ~METAFILEDEVICECONTEXT()

virtual EMF::METAFILEDEVICECONTEXT::~METAFILEDEVICECONTEXT ( )
inlinevirtual

Destructor frees all the graphics objects which may have been allocated. Now, it also frees any metarecords which it might hold, too.

References deleteMetafile(), and records.

Member Function Documentation

◆ appendHandle()

void EMF::METAFILEDEVICECONTEXT::appendHandle ( METARECORD record)
inline

Add this record to the metafile.

Parameters
recordthis record is an object so it increments the handle count as well.

References header, records, and EMF::METARECORD::size().

◆ appendRecord()

void EMF::METAFILEDEVICECONTEXT::appendRecord ( METARECORD record)
inline

Add this record to the metafile.

Parameters
recordstandard graphics record

References header, records, and EMF::METARECORD::size().

◆ clearHandle()

void EMF::METAFILEDEVICECONTEXT::clearHandle ( DWORD  handle)
inline

Clear the usage of this handle

References EMF::OBJECT::handle, and handles.

◆ deleteMetafile()

void EMF::METAFILEDEVICECONTEXT::deleteMetafile ( void  )
inline

Delete all the records from the metafile. This would seem to include deleting the header record as well.

References records.

Referenced by ~METAFILEDEVICECONTEXT().

◆ getType()

OBJECTTYPE EMF::METAFILEDEVICECONTEXT::getType ( void  ) const
inlinevirtual

Return the type of this object (could probably do better with RTTI()).

Implements EMF::OBJECT.

◆ mergePoint() [1/2]

void EMF::METAFILEDEVICECONTEXT::mergePoint ( const LONG &  x,
const LONG &  y 
)
inline

Somewhat superfluous, except checker doesn't understand the initialization of automatic structures in the declaration.

References mergePoint().

Referenced by mergePoint().

◆ mergePoint() [2/2]

void EMF::METAFILEDEVICECONTEXT::mergePoint ( const POINT &  p)
inline

Take the given point and determine if it enlarges the "painted" area of the device.

References header, max_device_point, min_device_point, update_frame, viewport_ext, viewport_org, window_ext, and window_org.

◆ nextHandle()

DWORD EMF::METAFILEDEVICECONTEXT::nextHandle ( void  )
inline

Scan the bit vector of used handles and return the index of the first free bit as this objects metafile handle.

References handles, and header.

Field Documentation

◆ ds

DATASTREAM EMF::METAFILEDEVICECONTEXT::ds

All i/o to the metafile is wrapped by this class so that byte swapping on big-endian machines is transparent.

◆ emf_handles

std::map< HGDIOBJ, HGDIOBJ > EMF::METAFILEDEVICECONTEXT::emf_handles

This map holds the current mapping between EMF handles and global object handles as a metafile is played back (with PlayEnhMetaFile).

Referenced by EMF::EMRSELECTOBJECT::execute(), EMF::EMRDELETEOBJECT::execute(), EMF::EMRCREATEPEN::execute(), EMF::EMREXTCREATEPEN::execute(), EMF::EMRCREATEBRUSHINDIRECT::execute(), and EMF::EMREXTCREATEFONTINDIRECTW::execute().

◆ fp

::FILE* EMF::METAFILEDEVICECONTEXT::fp

If it is a file-based metafile, then this pointer is not null.

◆ handles

std::vector< bool > EMF::METAFILEDEVICECONTEXT::handles

For compatibility, it appears that metafile handles are reused as objects are deleted. Attempt to emulate that behavior with a bit vector of used metafile handles.

Referenced by clearHandle(), and nextHandle().

◆ header

ENHMETAHEADER* EMF::METAFILEDEVICECONTEXT::header

Serves double duty as the physical device description.

Referenced by appendHandle(), appendRecord(), mergePoint(), and nextHandle().

◆ records

std::vector< EMF::METARECORD* > EMF::METAFILEDEVICECONTEXT::records

All of the metafile records are stored in memory.

Referenced by appendHandle(), appendRecord(), deleteMetafile(), and ~METAFILEDEVICECONTEXT().


The documentation for this class was generated from the following file: