7364 lines
228 KiB
Plaintext
7364 lines
228 KiB
Plaintext
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
|
||
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
*< FOXBIN2PRG: Version="1.21" SourceFile="_gdiplus.vcx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
|
||
*
|
||
*
|
||
DEFINE CLASS gpbase AS custom && The abstract base class for all other _GDIPLUS classes. Provides some basic utility methods.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: allowmodalmessages_assign
|
||
*m: appname_assign
|
||
*m: clearerrors && Resets the object's error status
|
||
*m: clone && Create a new object as an exact copy of an existing object
|
||
*m: geterrorstatus && Has an error occurred?
|
||
*m: getlasterrormessage && Get information about the last error to occur
|
||
*m: guidtostring && Convert GUID value from binary form to string representation
|
||
*m: ignoreerrors_assign
|
||
*m: makegdiparrayf && Convert VFP array to a binary string (array of floats)
|
||
*m: makegdiparrayffromcursor && Convert VFP cursor to a binary string (array of floats)
|
||
*m: makegdippointf && Create GDI+ PointF structure as string, from separate x,y parameters
|
||
*m: makegdiprectf && Create GDI+ RectF structure as string, from separate x,y,w,h parameters
|
||
*m: makegdipsizef && Create GDI+ SizeF structure as string, from separate width,height parameters
|
||
*m: objfactory && Object factory function for creating _GDIPLUS objects. Override this or ObjFactoryHook to change the classes used
|
||
*m: objfactoryhook && Modify behaviour of object factory for _GDIPLUS objects. Override this or ObjFactory to change the classes used
|
||
*m: quietonerror_assign
|
||
*m: stringtoguid && Convert string representation of a GUID or CLSID to binary form (16 bytes)
|
||
*p: allowmodalmessages && Allow error handler to put up Messagebox on error
|
||
*p: appname && Application name for use in user feedback
|
||
*p: haderror && Flag indicating whether an error has occured - you can also check return value from most functions.
|
||
*p: ignoreerrors && If .T., errors are ignored: test return values from all functions!
|
||
*p: lasterrormessage && Last error message (formatted)
|
||
*p: quietonerror && If .T., error messages are suppressed
|
||
*p: _memberdata && XML Metadata for customizable properties
|
||
*</DefinedPropArrayMethod>
|
||
|
||
PROTECTED haderror,lasterrormessage
|
||
*<PropValue>
|
||
allowmodalmessages = (inlist(_VFP.StartMode,0,4))
|
||
appname = GDI+ FFC Library
|
||
lasterrormessage = ('')
|
||
Name = "gpbase"
|
||
quietonerror = (not inlist(_VFP.StartMode,0,4))
|
||
_memberdata = <VFPData>
|
||
<memberdata name="allowmodalmessages" type="property" display="AllowModalMessages"/>
|
||
<memberdata name="appname" type="property" display="AppName"/>
|
||
<memberdata name="clearerrors" type="method" display="ClearErrors"/>
|
||
<memberdata name="clone" type="method" display="Clone" favorites="True"/>
|
||
<memberdata name="geterrorstatus" type="method" display="GetErrorStatus"/>
|
||
<memberdata name="getlasterrormessage" type="method" display="GetLastErrorMessage"/>
|
||
<memberdata name="guidtostring" type="method" display="GUIDToString" favorites="True"/>
|
||
<memberdata name="haderror" type="property" display="hadError"/>
|
||
<memberdata name="ignoreerrors" type="property" display="IgnoreErrors" favorites="True"/>
|
||
<memberdata name="lasterrormessage" type="property" display="lastErrorMessage"/>
|
||
<memberdata name="makegdiparrayf" type="method" display="MakeGdipArrayF" favorites="True"/>
|
||
<memberdata name="makegdiparrayffromcursor" type="method" display="MakeGdipArrayFFromCursor" favorites="True"/>
|
||
<memberdata name="makegdippointf" type="method" display="MakeGdipPointF" favorites="True"/>
|
||
<memberdata name="makegdiprectf" type="method" display="MakeGdipRectF" favorites="True"/>
|
||
<memberdata name="makegdipsizef" type="method" display="MakeGdipSizeF" favorites="True"/>
|
||
<memberdata name="quietonerror" type="property" display="QuietOnError"/>
|
||
<memberdata name="stringtoguid" type="method" display="StringToGUID" favorites="True"/>
|
||
<memberdata name="objfactory" type="method" display="ObjFactory"/>
|
||
<memberdata name="objfactoryhook" type="method" display="ObjFactoryHook"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE allowmodalmessages_assign
|
||
lparameters vNewVal
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if vartype(m.vNewVal)='L'
|
||
#endif
|
||
This.AllowModalMessages = m.vNewVal
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
else
|
||
error 11 && func arg
|
||
endif
|
||
#endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE appname_assign
|
||
lparameters vNewVal
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if vartype(m.vNewVal)='C'
|
||
#endif
|
||
This.AppName = m.vNewVal
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
else
|
||
error 11 && func arg
|
||
endif
|
||
#endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE clearerrors && Resets the object's error status
|
||
This.hadError = .F.
|
||
This.LastErrorMessage = ''
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE clone && Create a new object as an exact copy of an existing object
|
||
lparameters toOtherObject
|
||
* Not implemented in this class, see derived classes
|
||
ENDPROC
|
||
|
||
PROCEDURE Error
|
||
LPARAMETERS nError as integer, cMethod as string, nLine as Integer
|
||
local lcMessage, lcCodeLine
|
||
lcMessage = message()
|
||
lcCodeLine = message(1)
|
||
This.HadError = .T.
|
||
if This.IgnoreErrors or _vfp.StartMode>0
|
||
return .F.
|
||
endif
|
||
local lcOnError, lcErrorMsg
|
||
lcOnError = alltrim(on("error"))
|
||
if not empty(m.lcOnError)
|
||
lcOnError= ;
|
||
strtran( ;
|
||
strtran( ;
|
||
strtran( ;
|
||
strtran( ;
|
||
strtran( ;
|
||
m.lcOnError,'error()',"m.nError",1,-1,1) ;
|
||
,'program()',"m.cMethod",1,-1,1) ;
|
||
,'lineno()',"m.nLine",1,-1,1) ;
|
||
,'message()',"m.lcMessage",1,-1,1) ;
|
||
,'message(1)',"m.lcCodeLine",1,-1,1)
|
||
|
||
&lcOnError
|
||
return
|
||
endif
|
||
lcErrorMsg = ;
|
||
m.lcMessage ;
|
||
+chr(13)+chr(13) ;
|
||
+ This.Name ;
|
||
+ chr(13) + _GDIPLUS_ERRNOLABEL_LOC + ltrim(str(m.nError)) ;
|
||
+ chr(13) + _GDIPLUS_ERRPROCLABEL_LOC + m.cMethod ;
|
||
+ chr(13) + _GDIPLUS_ERRLINELABEL_LOC + ltrim(str(m.nLine)) ;
|
||
+ chr(13) + m.lcCodeLine
|
||
This.LastErrorMessage = m.lcErrorMsg
|
||
do case
|
||
case This.QuietOnError
|
||
* Do nothing
|
||
case This.AllowModalMessages
|
||
messagebox( m.lcErrorMsg,16, This.AppName )
|
||
otherwise
|
||
wait window (m.lcErrorMsg) nowait
|
||
endcase
|
||
|
||
#if GDIPLUS_ERRHANDLER_RETHROW
|
||
if m.nError = 1098
|
||
error m.lcMessage
|
||
else
|
||
* Note, this loses the additional parameter
|
||
error m.nError
|
||
endif
|
||
#endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE geterrorstatus && Has an error occurred?
|
||
return This.hadError
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE getlasterrormessage && Get information about the last error to occur
|
||
return This.LastErrorMessage
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE guidtostring && Convert GUID value from binary form to string representation
|
||
lparameters tqGUID
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
* Require 16-byte string or varbinary
|
||
if !(vartype(m.tqGUID)$'CQ' and len(m.tqGUID)=16)
|
||
error 11 && function argument
|
||
return cast(null as C)
|
||
endif
|
||
#endif
|
||
|
||
local lcUnicodeString, lnResult
|
||
lcUnicodeString = replicate(chr(0),80) && Should be big enough for anything
|
||
|
||
* Note - this is Unicode
|
||
declare integer StringFromGUID2 in ole32.dll ;
|
||
string @cCLSID, string @cUnicodeString, integer nLen
|
||
|
||
lnResult = StringFromGUID2( m.tqGUID, @lcUnicodeString, 40 )
|
||
|
||
if m.lnResult == 0
|
||
error _GDIPLUS_INTERNALBUFTOOSMALL_LOC
|
||
return cast(null as C)
|
||
else
|
||
return strconv(left(m.lcUnicodeString,(m.lnResult-1)*2),6)
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE ignoreerrors_assign
|
||
lparameters vNewVal
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if vartype(m.vNewVal)='L'
|
||
#endif
|
||
This.IgnoreErrors = m.vNewVal
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
else
|
||
error 11 && func arg
|
||
endif
|
||
#endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
#ifdef GDIPLUS_ERRHANDLER_ALLOWMODAL
|
||
This.AllowModalMessages = GDIPLUS_ERRHANDLER_ALLOWMODAL
|
||
#endif
|
||
#ifdef GDIPLUS_ERRHANDLER_QUIET
|
||
This.QuietOnError = GDIPLUS_ERRHANDLER_QUIET
|
||
#endif
|
||
#ifdef GDIPLUS_ERRHANDLER_IGNOREERRORS
|
||
This.IgnoreErrors = GDIPLUS_ERRHANDLER_IGNOREERRORS
|
||
#endif
|
||
#ifdef GDIPLUS_ERRHANDLER_APPNAME
|
||
This.AppName = GDIPLUS_ERRHANDLER_APPNAME
|
||
#endif
|
||
|
||
return dodefault()
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE makegdiparrayf && Convert VFP array to a binary string (array of floats)
|
||
lparameters taArray as array, tnCols as integer, tnFirstCol as integer
|
||
external array taArray
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(type('m.taArray[1,2]')='N') && Must be 2-D array
|
||
error 11 && function argument
|
||
return cast(null as C)
|
||
endif
|
||
#endif
|
||
|
||
local lcStruct, lnRows, lnRow, lnCol, lnFirstCol, lnColsMinusOne
|
||
lnRows = alen(taArray,1)
|
||
lnFirstCol = evl(m.tnFirstCol,1)
|
||
lnColsMinusOne= iif(empty(m.tnCols), alen(taArray,2)-m.lnFirstCol, m.tnCols-1 )
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(between(m.lnFirstCol,1,alen(taArray,2)) and between(m.lnColsMinusOne,0,alen(taArray,2)-m.lnFirstCol))
|
||
error 11 && function argument
|
||
return cast(null as C)
|
||
endif
|
||
#endif
|
||
|
||
lcStruct = ''
|
||
for lnRow = 1 to m.lnRows
|
||
for lnCol = m.lnFirstCol to m.lnFirstCol+m.lnColsMinusOne
|
||
lcStruct = m.lcStruct + bintoc(taArray[m.lnRow,m.lnCol],'F')
|
||
endfor
|
||
endfor
|
||
|
||
assert len(m.lcStruct) == m.lnRows*4*(m.lnColsMinusOne+1)
|
||
return m.lcStruct
|
||
* Determine length from the result
|
||
ENDPROC
|
||
|
||
PROCEDURE makegdiparrayffromcursor && Convert VFP cursor to a binary string (array of floats)
|
||
lparameters tcAlias as string, tnCols as Integer ;
|
||
, tcExpr1 as string, tcExpr2 as string, tcExpr3 as string, tcExpr4 as String ;
|
||
, tcExpr5 as string, tcExpr6 as string, tcExpr7 as string, tcExpr8 as string
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcAlias)='C' and vartype(m.tnCols)='N' and between(m.tnCols,1,8))
|
||
error 11 && function argument
|
||
return cast(null as C)
|
||
endif
|
||
if !used(m.tcAlias)
|
||
error 13, m.tcAlias && Alias not found
|
||
return cast(null as C)
|
||
endif
|
||
#endif
|
||
|
||
local lcStruct, lnCol, lnSaveArea, lnSaveRecno, laExpr[m.tnCols]
|
||
lnSaveArea = select()
|
||
select (m.tcAlias)
|
||
lnSaveRecno = recno()
|
||
|
||
* Check expressions
|
||
for lnCol = 1 to m.tnCols
|
||
laExpr[m.lnCol] = evaluate("m.tcExpr"+ltrim(str(m.lnCol)))
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if vartype(laExpr[m.lnCol])!='C'
|
||
error 11 && function argument
|
||
return cast(null as C)
|
||
endif
|
||
#endif
|
||
endfor
|
||
|
||
lcStruct = ''
|
||
scan
|
||
for lnCol = 1 to m.tnCols
|
||
lcStruct = m.lcStruct + bintoc(evaluate(laExpr[m.lnCol]),'F')
|
||
endfor
|
||
endscan
|
||
if m.lnSaveRecno<=reccount()
|
||
go (m.lnSaveRecno)
|
||
endif
|
||
select (m.lnSaveArea)
|
||
|
||
return m.lcStruct
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE makegdippointf && Create GDI+ PointF structure as string, from separate x,y parameters
|
||
lparameters tx as number,ty as number
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if ! vartype(m.tx)+vartype(m.ty)=='NN'
|
||
error 11 && function argument
|
||
return cast(null as C)
|
||
endif
|
||
#endif
|
||
|
||
return ;
|
||
bintoc(m.tX,'F') + bintoc(m.tY,'F')
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE makegdiprectf && Create GDI+ RectF structure as string, from separate x,y,w,h parameters
|
||
lparameters tx as number,ty as number,tw as number,th as number
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if ! vartype(m.tx)+vartype(m.ty)+vartype(m.tw)+vartype(m.th)=='NNNN'
|
||
error 11 && function argument
|
||
return cast(null as C)
|
||
endif
|
||
#endif
|
||
|
||
return ;
|
||
bintoc(m.tX,'F') + bintoc(m.tY,'F') ;
|
||
+ bintoc(m.tW,'F') + bintoc(m.tH,'F')
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE makegdipsizef && Create GDI+ SizeF structure as string, from separate width,height parameters
|
||
lparameters tw as number,th as number
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tw)+vartype(m.th)=='NN')
|
||
error 11 && function argument
|
||
return cast(null as C)
|
||
endif
|
||
#endif
|
||
|
||
return ;
|
||
bintoc(m.tW,'F') + bintoc(m.tH,'F')
|
||
ENDPROC
|
||
|
||
PROCEDURE objfactory && Object factory function for creating _GDIPLUS objects. Override this or ObjFactoryHook to change the classes used
|
||
lparameters tcContext, tcClassName ;
|
||
, p1,p2,p3,p4,p5,p6,p7,p8,p9,p10
|
||
|
||
* Class name is one of _gdiplus.vcx base classes, or you could extend it yourself
|
||
* context is where it is called from, in the form 'class.method'
|
||
*
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcContext)+vartype(m.tcClassName )=='CC')
|
||
error 11 && function argument
|
||
return cast(null as O) && Function argument
|
||
endif
|
||
#endif
|
||
|
||
* Base implementation - always use same class library as header file
|
||
local lcClassLibrary,lcModule
|
||
lcClassLibrary = GDIPLUS_CLASS_LIBRARY
|
||
lcModule = ''
|
||
|
||
* Allow modifications to class chosen. Note arguments cannot be changed
|
||
This.ObjFactoryHook( tcContext, @tcClassName, @lcClassLibrary, @lcModule )
|
||
|
||
* Most common cases in _GDIPLUS.VCX are 1 and 2 args so do those pcounts() first
|
||
do case
|
||
case pcount()==3
|
||
return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1)
|
||
case pcount()==4
|
||
return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2)
|
||
case pcount()==2
|
||
return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule)
|
||
case pcount()==5
|
||
return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3)
|
||
case pcount()==6
|
||
return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4)
|
||
case pcount()==7
|
||
return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5)
|
||
case pcount()==8
|
||
return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p,@p3,@p4,@p5,@p6)
|
||
case pcount()==9
|
||
return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5,@p6,@p7)
|
||
case pcount()==10
|
||
return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8)
|
||
case pcount()==11
|
||
return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9)
|
||
case pcount()==12
|
||
return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10)
|
||
endcase
|
||
error 11 && Function argument
|
||
return cast(null as O)
|
||
|
||
|
||
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE objfactoryhook && Modify behaviour of object factory for _GDIPLUS objects. Override this or ObjFactory to change the classes used
|
||
lparameters tcContext, rcClassName, rcClassLibrary, rcModule
|
||
* No special behaviour in base class
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE quietonerror_assign
|
||
lparameters vNewVal
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if vartype(m.vNewVal)='L'
|
||
#endif
|
||
This.QuietOnError = m.vNewVal
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
else
|
||
error 11 && func arg
|
||
endif
|
||
#endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE stringtoguid && Convert string representation of a GUID or CLSID to binary form (16 bytes)
|
||
lparameters lcString as String
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.lcString)='C')
|
||
error 11 && function argument
|
||
return cast(null as Q) && Function argument
|
||
endif
|
||
#endif
|
||
|
||
|
||
local lcCLSID, lnResult
|
||
lcCLSID = replicate(chr(0),16)
|
||
|
||
declare integer CLSIDFromString in ole32.dll ;
|
||
string cString, string @cCLSID
|
||
|
||
lnResult = CLSIDFromString( strconv(m.lcString,5), @lcCLSID )
|
||
if m.lnResult == 0
|
||
return cast(m.lcCLSID as Q(16))
|
||
else
|
||
error _GDIPLUS_STRINGTOGUID_LOC
|
||
return cast(null as Q)
|
||
endif
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gpbitmap AS gpimage OF "_gdiplus.vcx" && Encapsulates a GDI+ bitmap, which consists of the pixel data for a graphics image and its attributes. A Bitmap object is an object used to work with images defined by pixel data.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: create && Create bitmap with specified properties
|
||
*m: createfromgraphics && Create from a GpGraphics object
|
||
*m: getpixel && Get the colour value of an individual pixel
|
||
*m: setpixel && Set an individual pixel in this image to a specific colour value
|
||
*m: setresolution && Set the resolution of the bitmap, specified in dots-per-inch
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
Name = "gpbitmap"
|
||
_memberdata = <VFPData>
|
||
<memberdata name="create" type="method" display="Create" favorites="True"/>
|
||
<memberdata name="createfromgraphics" type="method" display="CreateFromGraphics" favorites="True"/>
|
||
<memberdata name="getpixel" type="method" display="GetPixel" favorites="True"/>
|
||
<memberdata name="setpixel" type="method" display="SetPixel" favorites="True"/>
|
||
<memberdata name="setresolution" type="method" display="SetResolution" favorites="True"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE create && Create bitmap with specified properties
|
||
LPARAMETERS tnWidth as Integer, tnHeight as Integer, tnPixelFormat as Integer
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(tnWidth)='N' AND vartype(tnHeight)='N' AND vartype(tnPixelFormat )$'LN')
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
declare integer GdipCreateBitmapFromScan0 in gdiplus.dll ;
|
||
integer nWidth, integer nHeight, integer nStride;
|
||
, integer nPixelFormat ;
|
||
, string @ cScan0, integer @ nImage
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
This.gdipStatus = GdipCreateBitmapFromScan0( ;
|
||
m.tnWidth, m.tnHeight, 0 ;
|
||
, iif(vartype(m.tnPixelFormat)='N',m.tnPixelFormat,GDIPLUS_PIXELFORMAT_32bppARGB) ;
|
||
, 0 ;
|
||
, @nHandle)
|
||
this.SetHandle(m.nHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE createfromfile
|
||
lparameters tcFilename as String, tlUseEmbeddedColorMgmt as Logical
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcFilename)='C' and !empty(m.tcFilename) and vartype(m.tlUseEmbeddedColorMgmt)='L')
|
||
error 11
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
if m.tlUseEmbeddedColorMgmt
|
||
declare integer GdipCreateBitmapFromFileICM in gdiplus.dll ;
|
||
string wFilename, integer @ nImage
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
This.gdipStatus = GdipCreateBitmapFromFileICM( ;
|
||
strconv(m.tcFilename+chr(0),5) ;
|
||
, @nHandle)
|
||
this.SetHandle(m.nHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
else
|
||
declare integer GdipCreateBitmapFromFile in gdiplus.dll ;
|
||
string wFilename, integer @ nImage
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
This.gdipStatus = GdipCreateBitmapFromFile( ;
|
||
strconv(m.tcFilename+chr(0),5) ;
|
||
, @nHandle)
|
||
this.SetHandle(m.nHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE createfromgraphics && Create from a GpGraphics object
|
||
lparameters toGraphics as GpGraphics, nWidth as integer, nHeight as integer
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toGraphics)$'ON' and vartype(m.nWidth)='N' and vartype(m.nHeight)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
declare integer GdipCreateBitmapFromGraphics in gdiplus.dll ;
|
||
integer nWidth, integer nHeight, integer nGraphics, integer @ nImage
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
This.gdipStatus = GdipCreateBitmapFromGraphics( ;
|
||
m.nWidth, m.nHeight ;
|
||
, iif(vartype(m.toGraphics)='O',m.toGraphics.GetHandle(),m.toGraphics) ;
|
||
, @nHandle)
|
||
this.SetHandle(m.nHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE getpixel && Get the colour value of an individual pixel
|
||
lparameters tX as integer, tY as integer
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tx)='N' and vartype(m.ty)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipBitmapGetPixel in gdiplus.dll ;
|
||
integer nBitmap, integer x, integer y, integer @ nARGB
|
||
local nARGB
|
||
nARGB = 0
|
||
This.gdipStatus = GdipBitmapGetPixel( ;
|
||
This.gdipHandle, m.tx, m.ty, @nARGB )
|
||
return iif(GDIPLUS_STATUS_OK == This.gdipStatus,m.nARGB,cast(null as I))
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
lparameters tvParam1, tvParam2, tvParam3
|
||
|
||
if vartype(m.tvParam1)+vartype(m.tvParam2)='NN'
|
||
* Width and height
|
||
if not dodefault() && Bypasses
|
||
return .F.
|
||
endif
|
||
return This.Create( m.tvParam1, m.tvParam2, m.tvParam3 )
|
||
else
|
||
return dodefault(m.tvParam1,m.tvParam2)
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE setpixel && Set an individual pixel in this image to a specific colour value
|
||
lparameters tX as integer, tY as integer, tvColor
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tx)='N' and vartype(m.ty)='N' and ;
|
||
(vartype(m.tvColor)='N' or (vartype(m.tvColor)='O' and pemstatus(m.tvColor,'argb',5))))
|
||
error 11
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipBitmapSetPixel in gdiplus.dll ;
|
||
integer nBitmap, integer x, integer y, integer nARGB
|
||
This.gdipStatus = GdipBitmapSetPixel( ;
|
||
This.gdipHandle, m.tx, m.ty ;
|
||
, iif(vartype(m.tvColor)='N',m.tvColor,m.tvColor.argb) ;
|
||
)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE setresolution && Set the resolution of the bitmap, specified in dots-per-inch
|
||
lparameters tnDPIX as number, tnDPIY as number
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnDPIX )='N' and vartype(m.tnDPIY )='N')
|
||
error 11
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipBitmapSetResolution in gdiplus.dll ;
|
||
integer nBitmap, single dpix, single dpiy
|
||
This.gdipStatus = GdipBitmapSetResolution ( ;
|
||
This.gdipHandle, m.tnDPIX , m.tnDPIY ;
|
||
)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gpbrush AS gpobject OF "_gdiplus.vcx" && The abstract base class for all Brush classes (for example, the gpSolidBrush and gpHatchBrush classes).
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<PropValue>
|
||
Name = "gpbrush"
|
||
_memberdata = <VFPData>
|
||
<memberdata name="gdiphandle" type="property" display="gdipHandle"/>
|
||
<memberdata name="gdipownsthishandle" type="property" display="gdipOwnsThisHandle"/>
|
||
<memberdata name="gdipstatus" type="property" display="gdipStatus"/>
|
||
<memberdata name="gethandle" type="method" display="GetHandle" favorites="True"/>
|
||
<memberdata name="getstatus" type="method" display="GetStatus" favorites="True"/>
|
||
<memberdata name="sethandle" type="method" display="SetHandle" favorites="True"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE clone
|
||
lparameters toBrush as GpBrush
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toBrush)='O' and m.toBrush.gdipHandle<>0)
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
|
||
Declare Integer GdipCloneBrush In GDIPlus.Dll ;
|
||
integer nBrush, integer @nCloneBrush
|
||
This.gdipStatus = GdipCloneBrush( ;
|
||
m.toBrush.gdipHandle ;
|
||
, @nHandle)
|
||
this.gdipHandle= m.nHandle
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Destroy
|
||
if This.gdipHandle!=0 and This.gdipOwnsThisHandle
|
||
declare integer GdipDeleteBrush in gdiplus.dll ;
|
||
integer nBrush
|
||
GdipDeleteBrush( This.gdipHandle )
|
||
This.gdipHandle = 0
|
||
This.gdipOwnsThisHandle = .F.
|
||
endif
|
||
return dodefault()
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gpcolor AS gpbase OF "_gdiplus.vcx" && Encapsulates a GDI+ color, consisting of 4 positive integers (0..255) for red, green, blue and alpha components.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: alpha_access
|
||
*m: alpha_assign
|
||
*m: blue_access
|
||
*m: blue_assign
|
||
*m: foxrgb_access
|
||
*m: foxrgb_assign
|
||
*m: green_access
|
||
*m: green_assign
|
||
*m: red_access
|
||
*m: red_assign
|
||
*m: set && Set colour value using separate R,G,B,Alpha components
|
||
*p: alpha && Alpha (transparency) component, value 0-255 (255=completely opaque)
|
||
*p: argb && Color in ARGB form (GDI+ native format), bits 24-31=alpha, 16-23=red, 8-15=green, 0-7=blue
|
||
*p: blue && Blue component, value 0-255
|
||
*p: foxrgb && Color in Foxpro RGB form (bits 0-7=red, 8-15=green, 16-23=blue, no transparency)
|
||
*p: green && Green component, value 0-255
|
||
*p: red && Red component, value 0-255
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
argb = -16777216
|
||
Name = "gpcolor"
|
||
_memberdata = <VFPData>
|
||
<memberdata name="alpha" type="property" display="Alpha" favorites="True"/>
|
||
<memberdata name="argb" type="property" display="ARGB" favorites="True"/>
|
||
<memberdata name="blue" type="property" display="Blue" favorites="True"/>
|
||
<memberdata name="foxrgb" type="property" display="FoxRGB" favorites="True"/>
|
||
<memberdata name="green" type="property" display="Green" favorites="True"/>
|
||
<memberdata name="red" type="property" display="Red" favorites="True"/>
|
||
<memberdata name="set" type="method" display="Set" favorites="True"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE alpha_access
|
||
RETURN bitand(bitrshift(This.ARGB,24),0xFF)
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE alpha_assign
|
||
LPARAMETERS tnNewVal
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnNewVal)='N' and between(m.tnNewVal,0,255))
|
||
error 11 && Function argument
|
||
endif
|
||
#endif
|
||
|
||
|
||
This.ARGB = bitor( bitand(This.ARGB,0xFF00FFFF), bitlshift(m.tnNewVal,24))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE blue_access
|
||
RETURN bitand(This.ARGB,0xFF)
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE blue_assign
|
||
LPARAMETERS tnNewVal
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnNewVal)='N' and between(m.tnNewVal,0,255))
|
||
error 11 && Function argument
|
||
endif
|
||
#endif
|
||
|
||
|
||
This.ARGB = bitor( bitand(This.ARGB,0xFFFFFF00), m.tnNewVal)
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE clone
|
||
lparameters toOtherColor as GpColor
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toOtherColor)='O' and pemstatus(toOtherColor,'argb',5))
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.ARGB = m.toOtherColor.ARGB
|
||
ENDPROC
|
||
|
||
PROCEDURE foxrgb_access
|
||
return rgb(This.Red,This.Green,This.Blue)
|
||
ENDPROC
|
||
|
||
PROCEDURE foxrgb_assign
|
||
LPARAMETERS tnRGB
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnRGB)=='N')
|
||
error 11 && Function argument
|
||
endif
|
||
#endif
|
||
|
||
This.ARGB = bitor( 0xFF000000 ;
|
||
, bitlshift(bitand(m.tnRGB,0xFF),16) ;
|
||
, bitand(m.tnRGB,0x0000FF00) ;
|
||
, bitrshift(bitand(m.tnRGB,0x00FF0000),16) )
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE green_access
|
||
RETURN bitand(bitrshift(This.ARGB,8),0xFF)
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE green_assign
|
||
LPARAMETERS tnNewVal
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnNewVal)='N' and between(m.tnNewVal,0,255))
|
||
error 11 && Function argument
|
||
endif
|
||
#endif
|
||
|
||
|
||
This.ARGB = bitor( bitand(This.ARGB,0xFF00FFFF), bitlshift(m.tnNewVal,8))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
lparameters tnRedOrARGB as Integer, tnGreen as Integer, tnBlue as Integer, tnAlpha as integer
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(inlist(pcount(),0,1,3,4))
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
if not dodefault()
|
||
return .F.
|
||
endif
|
||
|
||
do case
|
||
case pcount()=1
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnRedOrARGB)='N')
|
||
error 11 && Function argument
|
||
endif
|
||
#endif
|
||
|
||
This.ARGB = int(m.tnRedOrARGB)
|
||
|
||
case pcount()>=3
|
||
This.Set(tnRedOrARGB, tnGreen, tnBlue, m.tnAlpha )
|
||
endcase
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE red_access
|
||
RETURN bitand(bitrshift(This.ARGB,16),0xFF)
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE red_assign
|
||
LPARAMETERS tnNewVal
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnNewVal)='N' and between(m.tnNewVal,0,255))
|
||
error 11 && Function argument
|
||
endif
|
||
#endif
|
||
|
||
|
||
This.ARGB = bitor( bitand(This.ARGB,0xFF00FFFF), bitlshift(m.tnNewVal,16))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE set && Set colour value using separate R,G,B,Alpha components
|
||
lparameters tnRed, tnGreen, tnBlue, tnAlpha
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnRed)='N' and between(m.tnRed,0,255) ;
|
||
and vartype(m.tnGreen)='N' and between(m.tnGreen,0,255) ;
|
||
and vartype(m.tnBlue)='N' and between(m.tnBlue,0,255) ;
|
||
and vartype(m.tnAlpha)='L' or (vartype(m.tnAlpha)='N' and between(m.tnAlpha,0,255)))
|
||
error 11 && Function argument
|
||
endif
|
||
#endif
|
||
|
||
|
||
This.ARGB = ;
|
||
iif(vartype(m.tnAlpha)='N',0x1000000*m.tnAlpha,0xFF000000) ;
|
||
+ 0x10000*m.tnRed ;
|
||
+ 0x100 * m.tnGreen ;
|
||
+ m.tnBlue
|
||
|
||
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gpfont AS gpobject OF "_gdiplus.vcx" && Defines a particular format for text, including font face, size, and style attributes.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: create && Create font using specified font family, size and style
|
||
*m: fontname_access
|
||
*m: fontname_assign
|
||
*m: getheight && Get line spacing for a given Graphics object (in the units of that graphics object)
|
||
*m: getheightgivendpi && Get line spacing of this font, for specified DPI
|
||
*m: size_access
|
||
*m: size_assign
|
||
*m: style_access
|
||
*m: style_assign
|
||
*m: unit_access
|
||
*m: unit_assign
|
||
*p: fontname && Font name eg "Arial"
|
||
*p: size && Get the em size in the unit of this Font object
|
||
*p: style && Get style information for this font
|
||
*p: unit && The unit of measure used by this font
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
Name = "gpfont"
|
||
_memberdata = <VFPData>
|
||
<memberdata name="fontname" type="property" display="FontName" favorites="True"/>
|
||
<memberdata name="getheight" type="method" display="GetHeight" favorites="True"/>
|
||
<memberdata name="getheightgivendpi" type="method" display="GetHeightGivenDPI" favorites="True"/>
|
||
<memberdata name="create" type="method" display="Create" favorites="True"/>
|
||
<memberdata name="size" type="property" display="Size" favorites="True"/>
|
||
<memberdata name="style" type="property" display="Style" favorites="True"/>
|
||
<memberdata name="sizeinpoints" type="property" display="SizeInPoints" favorites="True"/>
|
||
<memberdata name="unit" type="property" display="Unit" favorites="True"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE clone
|
||
lparameters toFont as GpFont
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toFont)='O' and m.toFont.gdipHandle<>0)
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
Declare Integer GdipCloneFont In GDIPlus.Dll ;
|
||
integer nOriginal, integer @nClone
|
||
This.GdipStatus = GdipCloneFont( ;
|
||
m.toFont.gdipHandle ;
|
||
, @nHandle)
|
||
this.gdipHandle= m.nHandle
|
||
This.gdipOwnsThisHandle = .T.
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE create && Create font using specified font family, size and style
|
||
lparameters ;
|
||
tvFontNameOrFamily ; && Font name or Fontfamily (created separately)
|
||
, tnSize as Number ; && size in units (default points)
|
||
, tnStyle as integer ; && see GDIPLUS_FontStyle_xxx values (default Normal)
|
||
, tnUnit as integer && see GDIPLUS_Unit_xxx values (default points)
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !((vartype(m.tvFontNameOrFamily )='C' ;
|
||
or (vartype(m.tvFontNameOrFamily )='O' and m.tvFontNameOrFamily.GetHandle()<>0)) ;
|
||
and vartype(m.tnSize)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
local lnStyle as Integer, lnUnit as integer, lnHandle as integer ;
|
||
, loFamily as GpFontFamily, lnFamily as integer
|
||
lnStyle = evl(m.tnStyle,GDIPLUS_FontStyle_Regular)
|
||
lnUnit = evl(m.tnUnit,GDIPLUS_Unit_World)
|
||
lnHandle = 0
|
||
|
||
if vartype(m.tvFontnameOrFamily)='O'
|
||
lnFamily = m.tvFontNameOrFamily.GetHandle()
|
||
else
|
||
* Must create ourselves
|
||
loFamily = This.ObjFactory('gpfont.create', GDIPLUS_CLASS_FONTFAMILY, @tvFontNameOrFamily)
|
||
lnFamily =iif(vartype(m.loFamily)='O',m.loFamily.GetHandle(),0)
|
||
endif
|
||
|
||
this.Destroy()
|
||
|
||
Declare Integer GdipCreateFont In GDIPlus.Dll ;
|
||
integer nFontFamily, single fSize, integer nStyle, integer nUnit, integer @nHandle
|
||
|
||
if 0!=m.lnFamily
|
||
* Try creating font
|
||
This.gdipStatus = GdipCreateFont( m.lnFamily, m.tnSize,m.lnStyle,m.lnUnit,@lnHandle)
|
||
if GDIPLUS_STATUS_OK==This.gdipStatus
|
||
* That worked
|
||
This.SetHandle(m.lnHandle,.T.)
|
||
return .T.
|
||
endif
|
||
endif
|
||
* If here, either font family is invalid or font creation failed
|
||
* Try from Generic family
|
||
lnFamily = 0
|
||
declare integer GdipGetGenericFontFamilySansSerif in gdiplus.dll integer @
|
||
GdipGetGenericFontFamilySansSerif( @lnFamily )
|
||
This.gdipStatus = GdipCreateFont( m.lnFamily, m.tnSize,m.lnStyle,m.lnUnit,@lnHandle)
|
||
This.SetHandle(m.lnHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
ENDPROC
|
||
|
||
PROCEDURE Destroy
|
||
if This.GdipHandle!=0 and This.gdipOwnsThisHandle
|
||
Declare Integer GdipDeleteFont In GDIPlus.Dll ;
|
||
integer nFont
|
||
GdipDeleteFont(This.GdipHandle)
|
||
This.GdipHandle=0
|
||
This.gdipOwnsThisHandle=.F.
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fontname_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as C)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetFamily in gdiplus.dll ;
|
||
integer nFont, integer @ nFamily
|
||
declare integer GdipGetFamilyName in gdiplus.dll ;
|
||
integer nFamily, string @ cUnicodeName, integer nLangID
|
||
declare integer lstrlenW in kernel32.dll as __win32_lstrlenW string
|
||
|
||
local nFamily as Number, cUnicodeName as String
|
||
nFamily = 0
|
||
cUnicodeName= replicate(chr(0), 64 ) && 64=LF_FACESIZE*2
|
||
|
||
This.gdipStatus = GdipGetFamily( This.gdipHandle, @nFamily ) && LANG_NEUTRAL
|
||
if (GDIPLUS_STATUS_OK!=This.gdipStatus)
|
||
return cast(null as C)
|
||
endif
|
||
|
||
This.gdipStatus = GdipGetFamilyName( m.nFamily, @cUnicodeName, 0x00 ) && LANG_NEUTRAL
|
||
return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
|
||
, strconv( left(m.cUnicodeName,__win32_lstrlenW(m.cUnicodeName)*2),6) ;
|
||
, cast(null as C) )
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fontname_assign
|
||
LPARAMETERS vNewVal
|
||
error 1743,'FontName'
|
||
ENDPROC
|
||
|
||
PROCEDURE getheight && Get line spacing for a given Graphics object (in the units of that graphics object)
|
||
lparameters tvGraphics
|
||
|
||
local lnGraphics
|
||
do case
|
||
case vartype(m.tvGraphics)='N'
|
||
lnGraphics = m.tvGraphics
|
||
case vartype(m.tvGraphics)='O'
|
||
lnGraphics = m.tvGraphics.GetHandle()
|
||
otherwise
|
||
error 11
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return cast(null as B)
|
||
endcase
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if 0==m.lnGraphics
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return cast(null as B)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetFontHeight in gdiplus.dll ;
|
||
integer nFont, integer nGraphics, single @ fHeight
|
||
|
||
local nHeight
|
||
nHeight = 0.0
|
||
This.gdipStatus = GdipGetFontHeight(This.gdipHandle,m.lnGraphics,@nHeight)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nHeight,cast(null as B))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE getheightgivendpi && Get line spacing of this font, for specified DPI
|
||
lparameters tnDPI as Number
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as B)
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if vartype(m.tnDPI)!='N'
|
||
error 11 && Function argument
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetFontHeightGivenDPI in gdiplus.dll ;
|
||
integer nFont, single nDPI, single @ fHeight
|
||
|
||
local nHeight
|
||
nHeight = 0.0
|
||
This.gdipStatus = GdipGetFontHeight(This.gdipHandle,m.tnDPI,@nHeight)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nHeight,cast(null as B))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
lparameters ;
|
||
tvFontNameOrFamily ; && Font name, or Fontfamily (created separately)
|
||
, tnSize as Number ; && size in units (default points)
|
||
, tnStyle as integer ; && see GDIPLUS_FontStyle_xxx values (default Normal)
|
||
, tnUnit as integer && see GDIPLUS_Unit_xxx values (default points)
|
||
|
||
if not dodefault()
|
||
return .F.
|
||
endif
|
||
|
||
if pcount()>0
|
||
return This.Create(m.tvFontNameOrFamily,m.tnSize,m.tnStyle,m.tnUnit)
|
||
endif
|
||
return .T.
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE size_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as B)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetFontSize in gdiplus.dll ;
|
||
integer nFont, single @
|
||
local nSize
|
||
nSize= 0.0
|
||
This.gdipStatus = GdipGetFontSize( This.gdipHandle, @nSize)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nSize,cast(null as B))
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE size_assign
|
||
LPARAMETERS vNewVal
|
||
error 1743, 'Size'
|
||
ENDPROC
|
||
|
||
PROCEDURE style_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetFontStyle in gdiplus.dll ;
|
||
integer nFont, integer @
|
||
local nStyle
|
||
nStyle= 0
|
||
This.gdipStatus = GdipGetFontStyle( This.gdipHandle, @nStyle)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nStyle,cast(null as I))
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE style_assign
|
||
LPARAMETERS vNewVal
|
||
error 1743, 'Style'
|
||
ENDPROC
|
||
|
||
PROCEDURE unit_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetFontUnit in gdiplus.dll ;
|
||
integer nFont, integer @
|
||
local nUnit
|
||
nUnit = 0
|
||
This.gdipStatus = GdipGetFontUnit( This.gdipHandle, @nUnit)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nUnit,cast(null as I))
|
||
ENDPROC
|
||
|
||
PROCEDURE unit_assign
|
||
LPARAMETERS vNewVal
|
||
error 1743, 'Unit'
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gpfontfamily AS gpobject OF "_gdiplus.vcx" && Designates attributes shared by a group of related fonts.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: create && Create font family with specified name
|
||
*m: fontname_access
|
||
*m: fontname_assign
|
||
*m: getcellascent && Get cell ascent in design units, of this font family in the specified style
|
||
*m: getcelldescent && Get cell descent in design units, of this font family in the specified style
|
||
*m: getemheight && Get the height in design units, of this font family in the specified style
|
||
*m: getgenericmonospace && Gets a generic monospace FontFamily
|
||
*m: getgenericsansserif && Gets a generic sans serif FontFamily
|
||
*m: getgenericserif && Gets a generic serif FontFamily
|
||
*m: getlinespacing && Get line spacing in design units, of this font family in the specified style
|
||
*m: getname && Get name of this font family, in the specified language
|
||
*m: isstyleavailable && Indicates whether the specified Font Style enumeration is available
|
||
*p: fontname && Font name eg "Arial"
|
||
*p: gdipfontcollectionhandle && Handle to GDI+ FontCollection object. This class does not manage this handle at all, it merely uses it. Normally it will refer to the collection of installed fonts.
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
gdipfontcollectionhandle = 0
|
||
Name = "gpfontfamily"
|
||
_memberdata = <VFPData>
|
||
<memberdata name="create" type="method" display="Create" favorites="True"/>
|
||
<memberdata name="fontname" type="property" display="FontName" favorites="True"/>
|
||
<memberdata name="gdipfontcollectionhandle" type="property" display="gdipFontCollectionHandle"/>
|
||
<memberdata name="getcellascent" type="method" display="GetCellAscent" favorites="True"/>
|
||
<memberdata name="getcelldescent" type="method" display="GetCellDescent" favorites="True"/>
|
||
<memberdata name="getemheight" type="method" display="GetEmHeight" favorites="True"/>
|
||
<memberdata name="getgenericmonospace" type="method" display="GetGenericMonospace" favorites="True"/>
|
||
<memberdata name="getgenericsansserif" type="method" display="GetGenericSansSerif" favorites="True"/>
|
||
<memberdata name="getgenericserif" type="method" display="GetGenericSerif" favorites="True"/>
|
||
<memberdata name="getlinespacing" type="method" display="GetLineSpacing" favorites="True"/>
|
||
<memberdata name="getname" type="method" display="GetName" favorites="True"/>
|
||
<memberdata name="isstyleavailable" type="method" display="IsStyleAvailable" favorites="True"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE clone
|
||
lparameters toFontFamily as GpFontFamily
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toFontFamily)='O' and m.toFontFamily.gdipHandle<>0)
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
Declare Integer GdipCloneFontFamily In GDIPlus.Dll ;
|
||
integer nOriginal, integer @nClone
|
||
This.GdipStatus = GdipCloneFontFamily( ;
|
||
m.toFontFamily.gdipHandle ;
|
||
, @nHandle)
|
||
this.gdipHandle= m.nHandle
|
||
This.gdipOwnsThisHandle = .T.
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE create && Create font family with specified name
|
||
lparameters tcName as String
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
Declare Integer GdipCreateFontFamilyFromName In GDIPlus.Dll ;
|
||
string cUnicodeName, integer nFontCollection ,integer @nHandle
|
||
|
||
This.gdipStatus = GdipCreateFontFamilyFromName ( ;
|
||
strconv(m.tcName,5)+chr(0) ;
|
||
, This.gdipFontCollectionHandle ;
|
||
, @nHandle )
|
||
This.SetHandle(m.nHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
ENDPROC
|
||
|
||
PROCEDURE Destroy
|
||
if This.GdipHandle!=0 and This.gdipOwnsThisHandle
|
||
Declare Integer GdipDeleteFontFamily In GDIPlus.Dll ;
|
||
integer nFontFamily
|
||
GdipDeleteFontFamily(This.GdipHandle)
|
||
This.GdipHandle=0
|
||
This.gdipOwnsThisHandle=.F.
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fontname_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as C)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetFamilyName in gdiplus.dll ;
|
||
integer nFamily, string @ cUnicodeName, integer nLangID
|
||
declare integer lstrlenW in kernel32.dll as __win32_lstrlenW string
|
||
|
||
local cUnicodeName as String
|
||
cUnicodeName= replicate(chr(0), 64 ) && 64=LF_FACESIZE*2
|
||
|
||
This.gdipStatus = GdipGetFamilyName( This.gdipHandle, @cUnicodeName, 0x00 ) && 0x00=LANG_NEUTRAL
|
||
return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
|
||
, strconv( left(m.cUnicodeName,__win32_lstrlenW(m.cUnicodeName)*2),6) ;
|
||
, cast(null as C) )
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fontname_assign
|
||
LPARAMETERS vNewVal
|
||
error 1743, 'FontName'
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE getcellascent && Get cell ascent in design units, of this font family in the specified style
|
||
lparameters tnStyle as integer
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnStyle)$'LN')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetCellAscent in gdiplus.dll ;
|
||
integer nFamily, integer nStyle, integer @ nValue
|
||
|
||
local nValue as Number
|
||
nValue = 0
|
||
|
||
This.gdipStatus = GdipGetCellAscent( This.gdipHandle, evl(m.tnStyle,0), @nValue)
|
||
return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
|
||
, m.nValue ;
|
||
, cast(null as I) )
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE getcelldescent && Get cell descent in design units, of this font family in the specified style
|
||
lparameters tnStyle as integer
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnStyle)$'LN')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetCellDescent in gdiplus.dll ;
|
||
integer nFamily, integer nStyle, integer @ nValue
|
||
|
||
local nValue as Number
|
||
nValue = 0
|
||
|
||
This.gdipStatus = GdipGetCellDescent( This.gdipHandle, evl(m.tnStyle,0), @nValue)
|
||
return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
|
||
, m.nValue ;
|
||
, cast(null as I) )
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE getemheight && Get the height in design units, of this font family in the specified style
|
||
lparameters tnStyle as integer
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnStyle)$'LN')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetEmHeight in gdiplus.dll ;
|
||
integer nFamily, integer nStyle, integer @ nValue
|
||
|
||
local nValue as Number
|
||
nValue = 0
|
||
|
||
This.gdipStatus = GdipGetEmHeight( This.gdipHandle, evl(m.tnStyle,0), @nValue)
|
||
return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
|
||
, m.nValue ;
|
||
, cast(null as I) )
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE getgenericmonospace && Gets a generic monospace FontFamily
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
Declare Integer GdipGetGenericFontFamilyMonospace In GDIPlus.Dll ;
|
||
integer @nHandle
|
||
This.gdipStatus = GdipGetGenericFontFamilyMonospace(@nHandle )
|
||
This.SetHandle(m.nHandle,.F.)
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
ENDPROC
|
||
|
||
PROCEDURE getgenericsansserif && Gets a generic sans serif FontFamily
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
Declare Integer GdipGetGenericFontFamilySansSerif In GDIPlus.Dll ;
|
||
integer @nHandle
|
||
This.gdipStatus = GdipGetGenericFontFamilySansSerif(@nHandle )
|
||
This.SetHandle(m.nHandle,.F.)
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
ENDPROC
|
||
|
||
PROCEDURE getgenericserif && Gets a generic serif FontFamily
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
Declare Integer GdipGetGenericFontFamilySerif In GDIPlus.Dll ;
|
||
integer @nHandle
|
||
This.gdipStatus = GdipGetGenericFontFamilySerif(@nHandle )
|
||
This.SetHandle(m.nHandle,.F.)
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
ENDPROC
|
||
|
||
PROCEDURE getlinespacing && Get line spacing in design units, of this font family in the specified style
|
||
lparameters tnStyle as integer
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnStyle)$'LN')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetLineSpacing in gdiplus.dll ;
|
||
integer nFamily, integer nStyle, integer @ nValue
|
||
|
||
local nValue as Number
|
||
nValue = 0
|
||
|
||
This.gdipStatus = GdipGetLineSpacing( This.gdipHandle, evl(m.tnStyle,0), @nValue)
|
||
return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
|
||
, m.nValue ;
|
||
, cast(null as I) )
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE getname && Get name of this font family, in the specified language
|
||
lparameters tnLangID
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnLangID)$'LN')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return cast(null as C)
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as C)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetFamilyName in gdiplus.dll ;
|
||
integer nFamily, string @ cUnicodeName, integer nLangID
|
||
declare integer lstrlenW in kernel32.dll as __win32_lstrlenW string
|
||
|
||
local cUnicodeName as String
|
||
cUnicodeName= replicate(chr(0), 64 ) && 64=LF_FACESIZE*2
|
||
|
||
This.gdipStatus = GdipGetFamilyName( This.gdipHandle, @cUnicodeName, evl(m.tnLangID,0x00) ) && LANG_NEUTRAL
|
||
return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
|
||
, strconv( left(m.cUnicodeName,__win32_lstrlenW(m.cUnicodeName)*2),6) ;
|
||
, cast(null as C) )
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
lparameters tcName
|
||
* Get the Installed Font collection
|
||
|
||
if not dodefault()
|
||
return .F.
|
||
endif
|
||
|
||
* This class cannot handle Private Font collections on its own: if you want
|
||
* that, you will need to extend it (and manage the lifetime of the
|
||
* PrivateFontCollection object
|
||
* Is this necessary?
|
||
* declare integer GdipNewInstalledFontCollection in gdiplus.dll integer @
|
||
*
|
||
* For now, this seems to work:
|
||
This.gdipFontCollectionHandle = 0
|
||
|
||
if pcount()>=1
|
||
return This.Create( m.tcName )
|
||
endif
|
||
return .T.
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE isstyleavailable && Indicates whether the specified Font Style enumeration is available
|
||
lparameters tnFontStyle as integer
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnFontStyle)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipIsStyleAvailable in gdiplus.dll ;
|
||
integer nFontFamily, integer nStyle, integer @bIsAvailable
|
||
local nAvailable
|
||
nAvailable = 0 && default to FALSE
|
||
This.gdipStatus = GdipIsStyleAvailable( This.gdipHandle, m.tnFontStyle, @nAvailable )
|
||
* Convert integer to .T./.F.
|
||
return (m.nAvailable<>0)
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gpgraphics AS gpobject OF "_gdiplus.vcx" && Encapsulates a GDI+ drawing surface. Provides methods for drawing on a window or other canvas.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: clear && Clear entire drawing surface and fill with specified background color
|
||
*m: clipbounds_access
|
||
*m: clipbounds_assign
|
||
*m: compositingmode_access
|
||
*m: compositingmode_assign
|
||
*m: compositingquality_access
|
||
*m: compositingquality_assign
|
||
*m: createfromhdc && Create Graphics object for a given device context (HDC)
|
||
*m: createfromhwnd && Create GDI+ Graphics object for a given window (HWND)
|
||
*m: createfromimage && Create graphics object from the specified GpImage object (to draw on that image's surface)
|
||
*m: dpix_access
|
||
*m: dpix_assign
|
||
*m: dpiy_access
|
||
*m: dpiy_assign
|
||
*m: drawarc && Draws an arc representing a portion of an ellipse, given bounding rectangle of elllipse, start and sweep angles.
|
||
*m: drawbezier && Draw a B<>zier spline from 4 control points
|
||
*m: drawbeziers && Draw a B<>zier spline given a 2-column array of coordinates
|
||
*m: drawbeziersfromcursor && Draw a B<>zier spline given a cursor containing coordinates
|
||
*m: drawclosedcurve && Draw a closed curve given a 2-column array of coordinates
|
||
*m: drawclosedcurvefromcursor && Draw a closed curve given a cursor containing coordinates
|
||
*m: drawcurve && Draw a smooth curve given a 2-column array of coordinates
|
||
*m: drawcurvefromcursor && Draw a smooth curve given a cursor containing coordinates
|
||
*m: drawellipse && Draw outlined ellipse specified by its bounding rectangle
|
||
*m: drawimageat && Draw image at the specified location, using its original physical size
|
||
*m: drawimageportionat && Draw portion of an image at the specified location, using its original size
|
||
*m: drawimageportionscaled && Draw portion of an image at the specified location and with the specified size
|
||
*m: drawimagescaled && Draw image at the specified location with the specified size.
|
||
*m: drawline && Draw a line that connects two points, in the specified pen.
|
||
*m: drawlines && Draw sequence of connected lines, given array of coordinates
|
||
*m: drawlinesfromcursor && Draw sequence of connected lines, given cursor containing coordinates
|
||
*m: drawpie && Draw outlined pie slice in specified pen and start/stop anagles
|
||
*m: drawpolygon && Draw a polygon given a 2-column array of coordinates
|
||
*m: drawpolygonfromcursor && Draw a polygon given a cursor containing coordinates
|
||
*m: drawrectangle && Draw a rectangle
|
||
*m: drawrectangles && Draw a series of rectangles given a 4-column array (each row x,y,w,h)
|
||
*m: drawrectanglesfromcursor && Draw a series of rectangles given a cursor containing x,y,w,h values
|
||
*m: drawstringa && Draw a string in specified font and position (ANSI Version)
|
||
*m: drawstringw && Draw a string in specified font and position (Unicode Version)
|
||
*m: fillclosedcurve && Fill a closed curve defined by a 2-column array of coordinates
|
||
*m: fillclosedcurvefromcursor && Fill a closed curve from a cursor defining coordinates
|
||
*m: fillellipse && Draw filled ellipse specified by its bounding rectangle
|
||
*m: fillpie && Draw filled pie slice in specified pen and start/stop angles
|
||
*m: fillpolygon && Filll a polygon defined by a 2-column array of coordinates
|
||
*m: fillpolygonfromcursor && Fill a polygon from a cursor defining coordinates
|
||
*m: fillrectangle && Fill a rectangle
|
||
*m: fillrectangles && Fill a series of rectangles defined by a 4-column array of coordinates
|
||
*m: fillrectanglesfromcursor && Fill a series of rectangles defined by a cursor containing x,y,w,h values
|
||
*m: flush && Force execution of all pending graphics operations
|
||
*m: gethdc && Get handle to device context associated with this Graphics object.
|
||
*m: interpolationmode_access
|
||
*m: interpolationmode_assign
|
||
*m: measurestringa && Measures ANSI text string when drawn with the specified Font and formatting
|
||
*m: measurestringw && Measures Unicode text string when drawn with the specified Font and formatting
|
||
*m: pagescale_access
|
||
*m: pagescale_assign
|
||
*m: pageunit_access
|
||
*m: pageunit_assign
|
||
*m: pixeloffsetmode_access
|
||
*m: pixeloffsetmode_assign
|
||
*m: releasehdc && Release device context previously obtained with GetHdc()
|
||
*m: renderingorigin_access
|
||
*m: renderingorigin_assign
|
||
*m: resettransform && Reset the world transform matrix (to no transformation)
|
||
*m: restore && Restore previously saved state
|
||
*m: rotatetransform && Prepend rotation by specified angle to this object's transformation matrix
|
||
*m: save && Save current state and return token (for later restore)
|
||
*m: scaletransform && Apply scaling to transformation matrix for this graphics object
|
||
*m: smoothingmode_access
|
||
*m: smoothingmode_assign
|
||
*m: textcontrast_access
|
||
*m: textcontrast_assign
|
||
*m: textrenderinghint_access
|
||
*m: textrenderinghint_assign
|
||
*m: translatetransform && Add translate by (x,y) to this graphics object's transformation matrix
|
||
*m: visibleclipbounds_access
|
||
*m: visibleclipbounds_assign
|
||
*p: clipbounds && Returns GpRectangle object that bounds the clipping region of this graphics object . Note: if the clipping region is infinite, this returns a meaningless large rectangle
|
||
*p: compositingmode && how composited images are drawn to this Graphics object
|
||
*p: compositingquality && rendering quality of composited images drawn to this Graphics object
|
||
*p: dpix && Horizontal resolution of drawing surface
|
||
*p: dpiy && Vertical resolution of drawing surface
|
||
*p: interpolationmode && interpolation mode associated with this Graphics object.
|
||
*p: pagescale && The scaling between world units and page units
|
||
*p: pageunit && The unit of measure used for page coordinates
|
||
*p: pixeloffsetmode && Value specifying how pixels are offset during rendering of this Graphics object
|
||
*p: renderingorigin && The rendering origin for dithering and for hatch brushes
|
||
*p: smoothingmode && Rendering quality
|
||
*p: textcontrast && Gamma corrrection value for rendering text
|
||
*p: textrenderinghint && Rendering mode for text associated with this Graphics object
|
||
*p: visibleclipbounds && Returns a GpRectange Object of the visible clipping region
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
Name = "gpgraphics"
|
||
pageunit =
|
||
pixeloffsetmode = 0
|
||
_memberdata = <VFPData>
|
||
<memberdata name="clear" type="method" display="Clear" favorites="True"/>
|
||
<memberdata name="clipbounds" type="property" display="ClipBounds" favorites="True"/>
|
||
<memberdata name="compositingmode" type="property" display="CompositingMode" favorites="True"/>
|
||
<memberdata name="compositingquality" type="property" display="CompositingQuality" favorites="True"/>
|
||
<memberdata name="createfromhdc" type="method" display="CreateFromHDC" favorites="True"/>
|
||
<memberdata name="createfromhwnd" type="method" display="CreateFromHWND" favorites="True" override="True"/>
|
||
<memberdata name="createfromimage" type="method" display="CreateFromImage" favorites="True"/>
|
||
<memberdata name="dpix" type="property" display="DpiX" favorites="True"/>
|
||
<memberdata name="dpiy" type="property" display="DpiY" favorites="True"/>
|
||
<memberdata name="drawarc" type="method" display="DrawArc" favorites="True"/>
|
||
<memberdata name="drawbezier" type="method" display="DrawBezier" favorites="True"/>
|
||
<memberdata name="drawbeziers" type="method" display="DrawBeziers" favorites="True"/>
|
||
<memberdata name="drawbeziersfromcursor" type="method" display="DrawBeziersFromCursor" favorites="True"/>
|
||
<memberdata name="drawcachedbitmap" type="method" display="DrawCachedBitmap" favorites="True"/>
|
||
<memberdata name="drawclosedcurve" type="method" display="DrawClosedCurve" favorites="True"/>
|
||
<memberdata name="drawclosedcurvefromcursor" type="method" display="DrawClosedCurveFromCursor" favorites="True"/>
|
||
<memberdata name="drawcurve" type="method" display="DrawCurve" favorites="True"/>
|
||
<memberdata name="drawcurvefromcursor" type="method" display="DrawCurveFromCursor" favorites="True"/>
|
||
<memberdata name="drawellipse" type="method" display="DrawEllipse" favorites="True"/>
|
||
<memberdata name="drawellipser" type="method" display="DrawEllipseR" favorites="True"/>
|
||
<memberdata name="drawimageat" type="method" display="DrawImageAt" favorites="True"/>
|
||
<memberdata name="drawimageportionat" type="method" display="DrawImagePortionAt" favorites="True"/>
|
||
<memberdata name="drawimageportionscaled" type="method" display="DrawImagePortionScaled" favorites="True"/>
|
||
<memberdata name="drawimagescaled" type="method" display="DrawImageScaled" favorites="True"/>
|
||
<memberdata name="drawline" type="method" display="DrawLine" favorites="True"/>
|
||
<memberdata name="drawlines" type="method" display="DrawLines" favorites="True"/>
|
||
<memberdata name="drawlinesfromcursor" type="method" display="DrawLinesFromCursor" favorites="True"/>
|
||
<memberdata name="drawpie" type="method" display="DrawPie" favorites="True"/>
|
||
<memberdata name="drawpier" type="method" display="DrawPieR" favorites="True"/>
|
||
<memberdata name="drawpolygon" type="method" display="DrawPolygon" favorites="True"/>
|
||
<memberdata name="drawpolygonfromcursor" type="method" display="DrawPolygonFromCursor" favorites="True"/>
|
||
<memberdata name="drawrectangle" type="method" display="DrawRectangle" favorites="True" override="True"/>
|
||
<memberdata name="drawrectangler" type="method" display="DrawRectangleR" favorites="True"/>
|
||
<memberdata name="drawrectangles" type="method" display="DrawRectangles" favorites="True"/>
|
||
<memberdata name="drawrectanglesfromcursor" type="method" display="DrawRectanglesFromCursor" favorites="True"/>
|
||
<memberdata name="drawstringa" type="method" display="DrawStringA" favorites="True"/>
|
||
<memberdata name="drawstringw" type="method" display="DrawStringW" favorites="True"/>
|
||
<memberdata name="fillclosedcurve" type="method" display="FillClosedCurve" favorites="True"/>
|
||
<memberdata name="fillclosedcurvefromcursor" type="method" display="FillClosedCurveFromCursor" favorites="True"/>
|
||
<memberdata name="fillellipse" type="method" display="FillEllipse" favorites="True"/>
|
||
<memberdata name="fillellipser" type="method" display="FillEllipseR" favorites="True"/>
|
||
<memberdata name="fillpie" type="method" display="FillPie" favorites="True"/>
|
||
<memberdata name="fillpier" type="method" display="FillPieR" favorites="True"/>
|
||
<memberdata name="fillpolygon" type="method" display="FillPolygon" favorites="True"/>
|
||
<memberdata name="fillpolygonfromcursor" type="method" display="FillPolygonFromCursor" favorites="True"/>
|
||
<memberdata name="fillrectangle" type="method" display="FillRectangle" favorites="True"/>
|
||
<memberdata name="fillrectangler" type="method" display="FillRectangleR" favorites="True"/>
|
||
<memberdata name="fillrectangles" type="method" display="FillRectangles" favorites="True"/>
|
||
<memberdata name="fillrectanglesfromcursor" type="method" display="FillRectanglesFromCursor" favorites="True"/>
|
||
<memberdata name="flush" type="method" display="Flush" favorites="True"/>
|
||
<memberdata name="interpolationmode" type="property" display="InterpolationMode" favorites="True"/>
|
||
<memberdata name="interpolationmode_access" type="method" display="InterpolationMode_access"/>
|
||
<memberdata name="interpolationmode_assign" type="method" display="InterpolationMode_assign"/>
|
||
<memberdata name="measurestringa" type="method" display="MeasureStringA" favorites="True"/>
|
||
<memberdata name="measurestringw" type="method" display="MeasureStringW" favorites="True"/>
|
||
<memberdata name="pagescale" type="property" display="PageScale" favorites="True"/>
|
||
<memberdata name="pagescale_access" type="method" display="PageScale_access"/>
|
||
<memberdata name="pagescale_assign" type="method" display="PageScale_assign"/>
|
||
<memberdata name="pageunit" type="property" display="PageUnit" favorites="True"/>
|
||
<memberdata name="pageunit_access" type="method" display="PageUnit_access"/>
|
||
<memberdata name="pageunit_assign" type="method" display="PageUnit_assign"/>
|
||
<memberdata name="pixeloffsetmode" type="property" display="PixelOffsetMode" favorites="True"/>
|
||
<memberdata name="pixeloffsetmode_access" type="method" display="PixelOffsetMode_access"/>
|
||
<memberdata name="pixeloffsetmode_assign" type="method" display="PixelOffsetMode_assign"/>
|
||
<memberdata name="renderingorigin" type="property" display="RenderingOrigin" favorites="True"/>
|
||
<memberdata name="resettransform" type="method" display="ResetTransform" favorites="True"/>
|
||
<memberdata name="restore" type="method" display="Restore" favorites="True"/>
|
||
<memberdata name="rotatetransform" type="method" display="RotateTransform" favorites="True"/>
|
||
<memberdata name="save" type="method" display="Save" favorites="True"/>
|
||
<memberdata name="scaletransform" type="method" display="ScaleTransform" favorites="True"/>
|
||
<memberdata name="smoothingmode" type="property" display="SmoothingMode" favorites="True"/>
|
||
<memberdata name="textcontrast" type="property" display="TextContrast" favorites="True"/>
|
||
<memberdata name="textrenderinghint" type="property" display="TextRenderingHint" favorites="True"/>
|
||
<memberdata name="translatetransform" type="method" display="TranslateTransform" favorites="True"/>
|
||
<memberdata name="visibleclipbounds" type="property" display="VisibleClipBounds" favorites="True"/>
|
||
<memberdata name="gethdc" type="method" display="GetHdc" favorites="True"/>
|
||
<memberdata name="releasehdc" type="method" display="ReleaseHdc" favorites="True"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE clear && Clear entire drawing surface and fill with specified background color
|
||
lparameters tvColor
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tvColor)$'NO')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
Declare Integer GdipGraphicsClear In GDIPlus.Dll ;
|
||
integer nGraphics, integer nColor
|
||
This.gdipStatus = GdipGraphicsClear( ;
|
||
This.gdipHandle ;
|
||
, iif(vartype(m.tvColor)='O',m.tvColor.ARGB,m.tvColor) )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE clipbounds_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return null
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetClipBounds in gdiplus.dll ;
|
||
integer nGraphics, string @ pRectF
|
||
local lcRectF, loRect
|
||
lcRectF = replicate(chr(0),16)
|
||
This.gdipStatus = GdipGetClipBounds ( This.gdipHandle, @lcRectF )
|
||
if This.gdipStatus==GDIPLUS_STATUS_OK and len(m.lcRectF)==16
|
||
return This.ObjFactory('gpgraphics.clipbounds_access',GDIPLUS_CLASS_RECT,@lcRectF)
|
||
else
|
||
return null
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE clipbounds_assign
|
||
LPARAMETERS vNewVal
|
||
error 1743, 'ClipBounds'
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE compositingmode_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetCompositingMode in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nMode
|
||
nMode = 0
|
||
This.gdipStatus = GdipGetCompositingMode( This.gdipHandle, @nMode)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nMode,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE compositingmode_assign
|
||
LPARAMETERS tnMode
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnMode)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetCompositingMode in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetCompositingMode( This.gdipHandle,m.tnMode)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE compositingquality_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetCompositingQuality in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nQuality
|
||
nQuality = 0
|
||
This.gdipStatus = GdipGetCompositingQuality( This.gdipHandle, @nQuality)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nQuality,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE compositingquality_assign
|
||
LPARAMETERS tnQuality
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnQuality)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetCompositingQuality in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetCompositingQuality( This.gdipHandle,m.tnQuality)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE createfromhdc && Create Graphics object for a given device context (HDC)
|
||
lparameters hDC
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(hDC)=='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.Destroy()
|
||
declare integer GdipCreateFromHDC in gdiplus.dll ;
|
||
integer hdc, integer @ nGraphics
|
||
|
||
local nHandle
|
||
nHandle = 0
|
||
This.gdipStatus = GdipCreateFromHDC ( m.hDC, @nHandle )
|
||
if GDIPLUS_STATUS_OK == This.gdipStatus
|
||
This.SetHandle( m.nHandle,.T.)
|
||
return .T.
|
||
else
|
||
return .F.
|
||
endif
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE createfromhwnd && Create GDI+ Graphics object for a given window (HWND)
|
||
lparameters hWND, tlICM as Logical
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(hWND)=='N' and vartype(m.tlICM)='L')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
if m.tlICM
|
||
declare integer GdipCreateFromHWNDICM in gdiplus.dll ;
|
||
integer hwnd, integer @ nGraphics
|
||
|
||
This.gdipStatus = GdipCreateFromHWNDICM( m.hWND, @nHandle )
|
||
else
|
||
declare integer GdipCreateFromHWND in gdiplus.dll ;
|
||
integer hwnd, integer @ nGraphics
|
||
|
||
This.gdipStatus = GdipCreateFromHWND( m.hWND, @nHandle )
|
||
endif
|
||
if GDIPLUS_STATUS_OK == This.gdipStatus
|
||
This.SetHandle(m.nHandle,.T.)
|
||
return .T.
|
||
else
|
||
return .F.
|
||
endif
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE createfromimage && Create graphics object from the specified GpImage object (to draw on that image's surface)
|
||
lparameters toImage
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toImage)=='O')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
This.Destroy()
|
||
declare integer GdipGetImageGraphicsContext in gdiplus.dll ;
|
||
integer nImage, integer @ nGraphics
|
||
|
||
local nHandle
|
||
nHandle = 0
|
||
This.gdipStatus = GdipGetImageGraphicsContext ( toImage.GetHandle(), @nHandle )
|
||
if GDIPLUS_STATUS_OK == This.gdipStatus
|
||
This.SetHandle(m.nHandle,.T.)
|
||
return .T.
|
||
else
|
||
return .F.
|
||
endif
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Destroy
|
||
if This.gdipHandle>0 and This.gdipOwnsThisHandle
|
||
declare integer GdipDeleteGraphics in gdiplus.dll integer
|
||
GdipDeleteGraphics( This.gdipHandle )
|
||
This.gdipHandle = 0
|
||
This.gdipOwnsThisHandle = .F.
|
||
endif
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE dpix_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as B)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetDpiX in gdiplus.dll ;
|
||
integer nGraphics, single @ fDPI
|
||
local nDPI
|
||
nDPI = 0.0
|
||
This.gdipStatus = GdipGetDpiX( This.gdipHandle, @nDPI)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nDPI,cast(null as B))
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE dpix_assign
|
||
LPARAMETERS vNewVal
|
||
error 1743, 'DpiX'
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE dpiy_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as B)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetDpiY in gdiplus.dll ;
|
||
integer nGraphics, single @ fDPI
|
||
local nDPI
|
||
nDPI = 0.0
|
||
This.gdipStatus = GdipGetDpiY( This.gdipHandle, @nDPI)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nDPI,cast(null as B))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE dpiy_assign
|
||
LPARAMETERS vNewVal
|
||
error 1743, 'DpiY'
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawarc && Draws an arc representing a portion of an ellipse, given bounding rectangle of elllipse, start and sweep angles.
|
||
lparameters toPen, x,y,nWidth,nHeight, nStartAngle, nSweepAngle
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)+vartype(x)+vartype(y)+vartype(nWidth)+vartype(nHeight)+vartype(nStartAngle)+vartype(nSweepAngle)=='ONNNNNN')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipDrawArc in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, single x, single y, single w,single h,single fStart, single fSweep
|
||
|
||
This.gdipStatus = GdipDrawArc( THis.gdipHandle, toPen.GetHandle(), m.x,m.y,m.nWidth,m.nHeight,m.nStartAngle,m.nSweepAngle)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawbezier && Draw a B<>zier spline from 4 control points
|
||
lparameters toPen, x1,y1, x2,y2, x3,y3, x4,y4
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)+vartype(x1)+vartype(y1)+vartype(x2)+vartype(y2)+vartype(x3)+vartype(y3)+vartype(x4)+vartype(y4)=='ONNNNNNNN')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipDrawBezier in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, single,single,single,single,single,single,single,single
|
||
|
||
This.gdipStatus = GdipDrawBezier( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.x1,m.y1, m.x2,m.y2, m.x3,m.y3, m.x4,m.y4 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawbeziers && Draw a B<>zier spline given a 2-column array of coordinates
|
||
lparameters toPen, taPoints, tnFirstCol
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
if vartype(taPoints)='C'
|
||
lcPoints = m.taPoints
|
||
else
|
||
lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
|
||
endif
|
||
|
||
declare integer GdipDrawBeziers in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cPoints, integer nCount
|
||
|
||
This.gdipStatus = GdipDrawBeziers( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawbeziersfromcursor && Draw a B<>zier spline given a cursor containing coordinates
|
||
lparameters toPen, tcAlias, tcExprX, tcExprY
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)='O')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
|
||
|
||
declare integer GdipDrawBeziers in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cPoints, integer nCount
|
||
|
||
This.gdipStatus = GdipDrawBeziers( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawclosedcurve && Draw a closed curve given a 2-column array of coordinates
|
||
lparameters toPen, taPoints, tnFirstCol
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
if vartype(taPoints)='C'
|
||
lcPoints = m.taPoints
|
||
else
|
||
lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
|
||
endif
|
||
|
||
declare integer GdipDrawClosedCurve in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cPoints, integer nCount
|
||
|
||
This.gdipStatus = GdipDrawClosedCurve( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawclosedcurvefromcursor && Draw a closed curve given a cursor containing coordinates
|
||
lparameters toPen, tcAlias, tcExprX, tcExprY
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)='O')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
|
||
|
||
declare integer GdipDrawClosedCurve in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cPoints, integer nCount
|
||
|
||
This.gdipStatus = GdipDrawClosedCurve( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawcurve && Draw a smooth curve given a 2-column array of coordinates
|
||
lparameters toPen, taPoints, tnFirstCol
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
if vartype(taPoints)='C'
|
||
lcPoints = m.taPoints
|
||
else
|
||
lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
|
||
endif
|
||
|
||
declare integer GdipDrawCurve in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cPoints, integer nCount
|
||
|
||
This.gdipStatus = GdipDrawCurve( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawcurvefromcursor && Draw a smooth curve given a cursor containing coordinates
|
||
lparameters toPen, tcAlias, tcExprX, tcExprY
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)='O')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
|
||
|
||
declare integer GdipDrawCurve in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cPoints, integer nCount
|
||
|
||
This.gdipStatus = GdipDrawCurve( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawellipse && Draw outlined ellipse specified by its bounding rectangle
|
||
lparameters toPen, tXOrRect,tnY,tnW,tnH
|
||
* Parameters either ( pen, x,y,w,h )
|
||
* or ( pen, rect )
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
do case
|
||
case vartype(m.toPen)!='O'
|
||
* Pen must be given (assume object is of correct type!)
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
|
||
case vartype(m.tXOrRect)='N' ;
|
||
and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='NNN'
|
||
* OK
|
||
case vartype(m.tXOrRect)='O' ;
|
||
and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='LLL' ;
|
||
and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
|
||
* OK
|
||
otherwise
|
||
* Parameters do not pass the test
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
#endif
|
||
|
||
declare Integer GdipDrawEllipse in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, single,single,single,single
|
||
|
||
if vartype(m.tXOrRect)='O'
|
||
This.gdipStatus = GdipDrawEllipse( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H )
|
||
else
|
||
This.gdipStatus = GdipDrawEllipse( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.tXOrRect,m.tnY, m.tnW,m.tnH )
|
||
endif
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawimageat && Draw image at the specified location, using its original physical size
|
||
lparameters toImage, destPtOrX,destY
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toImage)='O')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lnDestX, lnDestY as Number
|
||
|
||
do case
|
||
case vartype(m.destPtOrX)+vartype(m.destY)='NN'
|
||
* passed separate coordinates
|
||
lnDestX = m.destPtOrX
|
||
lnDestY = m.destY
|
||
case vartype(m.destPtOrX)+vartype(m.destY)='OL' and pemstatus(m.destPtOrX,'X',5)
|
||
* passed a point object (or a rect but we're ignoring width&height - this is unscaled)
|
||
lnDestX = m.destPtOrX.X
|
||
lnDestY = m.destPtOrX.Y
|
||
otherwise
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
|
||
|
||
declare Integer GdipDrawImage in gdiplus.dll ;
|
||
integer nGraphics, integer nImage, single,single
|
||
|
||
This.gdipStatus = GdipDrawImage( This.gdipHandle, toImage.GetHandle() ;
|
||
, m.lnDestX,m.lnDestY)
|
||
return GDIPLUS_STATUS_OK==This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawimageportionat && Draw portion of an image at the specified location, using its original size
|
||
lparameters toImage, destPoint,srcRect, srcUnit
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toImage)+vartype(m.destPoint)+vartype(m.srcRect)+vartype(m.srcUnit)=='OOON' ;
|
||
and pemstatus(m.destPoint,'X',5) ;
|
||
and pemstatus(m.srcRect,'X',5) and pemstatus(m.srcRect,'W',5))
|
||
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipDrawImagePointRect in gdiplus.dll ;
|
||
integer nGraphics, integer nImage ;
|
||
, single,single ;
|
||
, single,single,single,single ;
|
||
, integer
|
||
|
||
This.gdipStatus = GdipDrawImagePointRect( This.gdipHandle, toImage.GetHandle() ;
|
||
, m.destPoint.X,m.destPoint.Y ;
|
||
, m.srcRect.X,m.srcRect.Y,m.srcRect.W,m.srcRect.H ;
|
||
, m.srcUnit )
|
||
return GDIPLUS_STATUS_OK==This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawimageportionscaled && Draw portion of an image at the specified location and with the specified size
|
||
lparameters toImage, destRect,srcRect, srcUnit, imageAttribs
|
||
|
||
* This function allows an optional ImageAttributes object. Since this class
|
||
* isn't currently implemented in the FFC classes, allow an integer pointer
|
||
* to be passed in, so that the called can implement themselves
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toImage)+vartype(m.destRect)+vartype(m.srcRect)+vartype(m.srcUnit)=='OOON' ;
|
||
and vartype(m.imageAttribs)$'ONL' ;
|
||
and pemstatus(m.destRect,'X',5) and pemstatus(m.destRect,'W',5) ;
|
||
and pemstatus(m.srcRect,'X',5) and pemstatus(m.srcRect,'W',5))
|
||
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
declare Integer GdipDrawImageRectRect in gdiplus.dll ;
|
||
integer nGraphics, integer nImage ;
|
||
, single,single,single,single ;
|
||
, single,single,single,single ;
|
||
, integer nSrcUnit ;
|
||
, integer nImgAttribs ;
|
||
, integer nCallback, integer nCallbackData
|
||
|
||
This.gdipStatus = GdipDrawImageRectRect( This.gdipHandle, toImage.GetHandle() ;
|
||
, m.destRect.X,m.destRect.Y,m.destRect.W,m.destRect.H ;
|
||
, m.srcRect.X,m.srcRect.Y,m.srcRect.W,m.srcRect.H ;
|
||
, m.srcUnit ;
|
||
, icase( vartype(m.imageAttribs)='O',m.imageAttribs.GetHandle() ;
|
||
,vartype(m.imageAttribs)='N',m.imageAttributes ;
|
||
, 0 ) ;
|
||
, 0, 0 )
|
||
|
||
return GDIPLUS_STATUS_OK==This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawimagescaled && Draw image at the specified location with the specified size.
|
||
lparameters toImage as GpImage, destRectOrX,destY,destW,destH
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toImage)='O')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lnDestX, lnDestY, lnDestW, lnDestH as Number
|
||
|
||
do case
|
||
case vartype(m.destRectOrX)+vartype(m.destY)+vartype(m.destW)+vartype(m.destH)='NNNN'
|
||
* passed separate coordinates
|
||
lnDestX = m.destRectOrX
|
||
lnDestY = m.destY
|
||
lnDestW = m.destW
|
||
lnDestH = m.destH
|
||
case vartype(m.destRectOrX)+vartype(m.destY)+vartype(m.destW)+vartype(m.destH)='OLLL' ;
|
||
and pemstatus(m.destRectOrX,'X',5) and pemstatus(m.destRectOrX,'W',5)
|
||
* passed a Rect object
|
||
lnDestX = m.destRectOrX.X
|
||
lnDestY = m.destRectOrX.Y
|
||
lnDestW = m.destRectOrX.W
|
||
lnDestH = m.destRectOrX.H
|
||
otherwise
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
|
||
|
||
declare Integer GdipDrawImageRect in gdiplus.dll ;
|
||
integer nGraphics, integer nImage, single,single,single,single
|
||
|
||
This.gdipStatus = GdipDrawImageRect ( This.gdipHandle, toImage.GetHandle() ;
|
||
, m.lnDestX,m.lnDestY, m.lnDestW,m.lnDestH )
|
||
return GDIPLUS_STATUS_OK==This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawline && Draw a line that connects two points, in the specified pen.
|
||
lparameters toPen as GpPen, x1,y1,x2,y2
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)+vartype(m.x1)+vartype(m.y1)+vartype(m.x2)+vartype(m.y2)=='ONNNN')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipDrawLine in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, single,single,single,single
|
||
|
||
This.gdipStatus = GdipDrawLine( This.gdipHandle, toPen.GetHandle(), m.x1,m.y1, m.x2,m.y2 )
|
||
return This.gdipStatus = GDIPLUS_STATUS_OK
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawlines && Draw sequence of connected lines, given array of coordinates
|
||
lparameters toPen as GpPen, taPoints, tnFirstCol as integer
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
if vartype(taPoints)='C'
|
||
lcPoints = m.taPoints
|
||
else
|
||
lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
|
||
endif
|
||
|
||
declare integer GdipDrawLines in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cPoints, integer nCount
|
||
|
||
This.gdipStatus = GdipDrawLines( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawlinesfromcursor && Draw sequence of connected lines, given cursor containing coordinates
|
||
lparameters toPen as GpPen, tcAlias as String, tcExprX as String, tcExprY as String
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)='O')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
|
||
|
||
declare integer GdipDrawLines in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cPoints, integer nCount
|
||
|
||
This.gdipStatus = GdipDrawLines( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawpie && Draw outlined pie slice in specified pen and start/stop anagles
|
||
lparameters toPen, tXOrRect,tnYOrStart,tnWOrSweep,tnH, nStart, nSweep
|
||
* Parameters either ( pen, x,y,w,h, start, sweep )
|
||
* or ( pen, rect, start, sweep )
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
do case
|
||
case vartype(m.toPen)!='O'
|
||
* Pen must be given (assume object is of correct type!)
|
||
* Start and sweep angles are required
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
|
||
case vartype(m.tXOrRect)='N' ;
|
||
and vartype(m.tnYOrStart)+vartype(m.tnWOrSweep)+vartype(m.tnH)+vartype(nStart)+vartype(nSweep)=='NNNNN'
|
||
* OK
|
||
case vartype(m.tXOrRect)='O' ;
|
||
and vartype(m.tnYOrStart)+vartype(m.tnWOrSweep)+vartype(m.tnH)+vartype(nStart)+vartype(nSweep)=='NNLLL' ;
|
||
and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
|
||
* OK
|
||
otherwise
|
||
* Parameters do not pass the test
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
#endif
|
||
|
||
declare integer GdipDrawPie in gdiplus.dll ;
|
||
integer nGraphics, integer nPen ;
|
||
, single x, single y, single w,single h ;
|
||
,single fStart, single fSweep
|
||
|
||
if vartype(m.tXOrRect)='O'
|
||
This.gdipStatus = GdipDrawPie( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H ;
|
||
, m.tnYOrStart,m.tnWOrSweep )
|
||
else
|
||
This.gdipStatus = GdipDrawPie( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.tXOrRect,m.tnYOrStart, m.tnWOrSweep,m.tnH ;
|
||
, m.nStart,m.nSweep )
|
||
endif
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawpolygon && Draw a polygon given a 2-column array of coordinates
|
||
lparameters toPen, taPoints, tnFirstCol
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
if vartype(taPoints)='C'
|
||
lcPoints = m.taPoints
|
||
else
|
||
lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
|
||
endif
|
||
|
||
declare integer GdipDrawPolygon in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cPoints, integer nCount
|
||
|
||
This.gdipStatus = GdipDrawPolygon( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawpolygonfromcursor && Draw a polygon given a cursor containing coordinates
|
||
lparameters toPen, tcAlias, tcExprX, tcExprY
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)='O')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
|
||
|
||
declare integer GdipDrawPolygon in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cPoints, integer nCount
|
||
|
||
This.gdipStatus = GdipDrawPolygon( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawrectangle && Draw a rectangle
|
||
lparameters toPen, tXOrRect,tnY,tnW,tnH
|
||
* Parameters either ( pen, x,y,w,h )
|
||
* or ( pen, rect )
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
do case
|
||
case vartype(m.toPen)!='O'
|
||
* Pen must be given (assume object is of correct type!)
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
|
||
case vartype(m.tXOrRect)='N' ;
|
||
and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='NNN'
|
||
* OK
|
||
case vartype(m.tXOrRect)='O' ;
|
||
and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='LLL' ;
|
||
and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
|
||
* OK
|
||
otherwise
|
||
* Parameters do not pass the test
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
#endif
|
||
|
||
declare Integer GdipDrawRectangle in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, single,single,single,single
|
||
|
||
if vartype(m.tXOrRect)='O'
|
||
This.gdipStatus = GdipDrawRectangle( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H )
|
||
else
|
||
This.gdipStatus = GdipDrawRectangle( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.tXOrRect,m.tnY, m.tnW,m.tnH )
|
||
endif
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawrectangles && Draw a series of rectangles given a 4-column array (each row x,y,w,h)
|
||
lparameters toPen, taRects, tnFirstCol
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)='O' and (vartype(taRects)='C' or type("taRects[1,1]")='N'))
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcRects
|
||
if vartype(taRects)='C'
|
||
lcRects = m.taRects
|
||
else
|
||
lcRects = This.MakeGdipArrayF( @taRects, 4, m.tnFirstCol )
|
||
endif
|
||
|
||
declare integer GdipDrawRectangles in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cRects, integer nCount
|
||
|
||
This.gdipStatus = GdipDrawRectangles( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.lcRects, len(m.lcRects)/16 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawrectanglesfromcursor && Draw a series of rectangles given a cursor containing x,y,w,h values
|
||
lparameters toPen, tcAlias, tcExprX, tcExprY, tcExprW, tcExprH
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toPen)='O')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcRects
|
||
lcRects = This.MakeGdipArrayFFromCursor( m.tcAlias, 4, m.tcExprX, m.tcExprY, m.tcExprW, m.tcExprH )
|
||
|
||
declare integer GdipDrawRectangles in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cRects, integer nCount
|
||
|
||
This.gdipStatus = GdipDrawRectangles( This.gdipHandle, toPen.GetHandle() ;
|
||
, m.lcRects, len(m.lcRects)/16 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawstringa && Draw a string in specified font and position (ANSI Version)
|
||
lparameters tcAnsiString, toFont, tvRectPoint, toStringFormat, toBrush
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcAnsiString)='C' and vartype(m.toFont)$'OL' ;
|
||
and vartype(m.toStringFormat)$'OL' and vartype(m.toBrush)$'OL')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
local lcRect
|
||
do case
|
||
case vartype(tvRectPoint)$'CQ' && String or varbinary
|
||
do case
|
||
case len(m.tvRectPoint)==8 && point
|
||
lcRect = m.tvRectPoint + replicate(chr(0),8)
|
||
case len(m.tvRectPoint)==16 && rect
|
||
lcRect = m.tvRectPoint
|
||
otherwise
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
case vartype(m.tvRectPoint) == 'O'
|
||
do case
|
||
case pemstatus(m.tvRectPoint,'gdipRectF',5) && Rect
|
||
lcRect = tvRectPoint.GdipRectF
|
||
case pemstatus(m.tvRectPoint,'gdipPointF',5) && Point
|
||
lcRect = tvRectPoint.GdipPointF + replicate(chr(0),8)
|
||
otherwise
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
otherwise
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
|
||
declare integer GdipDrawString in gdiplus.dll ;
|
||
integer,string,integer,integer,string,integer,integer
|
||
|
||
|
||
This.gdipStatus = GdipDrawString( ;
|
||
This.gdipHandle ;
|
||
, strconv(m.tcAnsiString,5) ;
|
||
, len(m.tcAnsiString) ;
|
||
, iif(vartype(m.toFont)='O',toFont.GetHandle(),0) ;
|
||
, m.lcRect ;
|
||
, iif(vartype(m.toStringFormat)='O',toStringFormat.GetHandle(),0) ;
|
||
, iif(vartype(m.toBrush)='O',toBrush.GetHandle(),0) ;
|
||
)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE drawstringw && Draw a string in specified font and position (Unicode Version)
|
||
lparameters tcUnicodeString, toFont, tvRectPoint, toStringFormat, toBrush
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcUnicodeString)='C' and vartype(m.toFont)$'OL' ;
|
||
and vartype(m.toStringFormat)$'OL' and vartype(m.toBrush)$'OL')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
local lcRect
|
||
do case
|
||
case vartype(tvRectPoint)$'CQ' && String or varbinary
|
||
do case
|
||
case len(m.tvRectPoint)==8 && point
|
||
lcRect = m.tvRectPoint + replicate(chr(0),8)
|
||
case len(m.tvRectPoint)==16 && rect
|
||
lcRect = m.tvRectPoint
|
||
otherwise
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
case vartype(m.tvRectPoint) == 'O'
|
||
do case
|
||
case pemstatus(m.tvRectPoint,'gdipRectF',5) && Rect
|
||
lcRect = tvRectPoint.GdipRectF
|
||
case pemstatus(m.tvRectPoint,'gdipPointF',5) && Point
|
||
lcRect = tvRectPoint.GdipPointF + replicate(chr(0),8)
|
||
otherwise
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
otherwise
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
|
||
declare integer GdipDrawString in gdiplus.dll ;
|
||
integer,string,integer,integer,string,integer,integer
|
||
|
||
|
||
This.gdipStatus = GdipDrawString( ;
|
||
This.gdipHandle ;
|
||
, m.tcUnicodeString ;
|
||
, len(m.tcUnicodeString)/2 ;
|
||
, iif(vartype(m.toFont)='O',toFont.GetHandle(),0) ;
|
||
, m.lcRect ;
|
||
, iif(vartype(m.toStringFormat)='O',toStringFormat.GetHandle(),0) ;
|
||
, iif(vartype(m.toBrush)='O',toBrush.GetHandle(),0) ;
|
||
)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fillclosedcurve && Fill a closed curve defined by a 2-column array of coordinates
|
||
lparameters toBrush, taPoints, tnFirstCol, tnFillMode
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toBrush)='O' and vartype(m.tnFillMode)$'LN' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
if vartype(taPoints)='C'
|
||
lcPoints = m.taPoints
|
||
else
|
||
lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
|
||
endif
|
||
|
||
declare integer GdipFillClosedCurve in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cPoints, integer nCount, integer nFillMode
|
||
|
||
This.gdipStatus = GdipFillClosedCurve( This.gdipHandle, toBrush.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8,evl(m.tnFillMode,GDIPLUS_FillMode_Alternate) )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fillclosedcurvefromcursor && Fill a closed curve from a cursor defining coordinates
|
||
lparameters toBrush, tcAlias, tcExprX, tcExprY, tnFillMode
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toBrush)='O' and vartype(m.tnFillMode)$'LN' )
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
|
||
|
||
declare integer GdipFillClosedCurve in gdiplus.dll ;
|
||
integer nGraphics, integer nBrush, string cPoints, integer nCount, integer nFillMode
|
||
|
||
This.gdipStatus = GdipFillClosedCurve( This.gdipHandle, toBrush.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8,evl(m.tnFillMode,GDIPLUS_FillMode_Alternate) )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fillellipse && Draw filled ellipse specified by its bounding rectangle
|
||
lparameters toBrush, tXOrRect,tnY,tnW,tnH
|
||
* Parameters either ( brush, x,y,w,h )
|
||
* or ( brush, rect )
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
do case
|
||
case vartype(m.toBrush)!='O'
|
||
* Brush must be given (assume object is of correct type!)
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
|
||
case vartype(m.tXOrRect)='N' ;
|
||
and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='NNN'
|
||
* OK
|
||
case vartype(m.tXOrRect)='O' ;
|
||
and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='LLL' ;
|
||
and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
|
||
* OK
|
||
otherwise
|
||
* Parameters do not pass the test
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
#endif
|
||
|
||
declare Integer GdipFillEllipse in gdiplus.dll ;
|
||
integer nGraphics, integer nBrush, single,single,single,single
|
||
|
||
if vartype(m.tXOrRect)='O'
|
||
This.gdipStatus = GdipFillEllipse( This.gdipHandle, toBrush.GetHandle() ;
|
||
, m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H )
|
||
else
|
||
This.gdipStatus = GdipFillEllipse( This.gdipHandle, toBrush.GetHandle() ;
|
||
, m.tXOrRect,m.tnY, m.tnW,m.tnH )
|
||
endif
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fillpie && Draw filled pie slice in specified pen and start/stop angles
|
||
lparameters toBrush, tXOrRect,tnYOrStart,tnWOrSweep,tnH, nStart, nSweep
|
||
* Parameters either ( brush, x,y,w,h, start, sweep )
|
||
* or ( brush, rect, start, sweep )
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
do case
|
||
case vartype(m.toBrush)!='O'
|
||
* Brush must be given (assume object is of correct type!)
|
||
* Start and sweep angles are required
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
|
||
case vartype(m.tXOrRect)='N' ;
|
||
and vartype(m.tnYOrStart)+vartype(m.tnWOrSweep)+vartype(m.tnH)+vartype(nStart)+vartype(nSweep)=='NNNNN'
|
||
* OK
|
||
case vartype(m.tXOrRect)='O' ;
|
||
and vartype(m.tnYOrStart)+vartype(m.tnWOrSweep)+vartype(m.tnH)+vartype(nStart)+vartype(nSweep)=='NNLLL' ;
|
||
and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
|
||
* OK
|
||
otherwise
|
||
* Parameters do not pass the test
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
#endif
|
||
|
||
declare integer GdipFillPie in gdiplus.dll ;
|
||
integer nGraphics, integer nBrush ;
|
||
, single x, single y, single w,single h ;
|
||
,single fStart, single fSweep
|
||
|
||
if vartype(m.tXOrRect)='O'
|
||
This.gdipStatus = GdipFillPie( This.gdipHandle, toBrush.GetHandle() ;
|
||
, m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H ;
|
||
, m.tnYOrStart,m.tnWOrSweep )
|
||
else
|
||
This.gdipStatus = GdipFillPie( This.gdipHandle, toBrush.GetHandle() ;
|
||
, m.tXOrRect,m.tnYOrStart, m.tnWOrSweep,m.tnH ;
|
||
, m.nStart,m.nSweep )
|
||
endif
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fillpolygon && Filll a polygon defined by a 2-column array of coordinates
|
||
lparameters toBrush, taPoints, tnFirstCol, tnFillMode
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toBrush)='O' and vartype(m.tnFillMode)$'LN' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
if vartype(taPoints)='C'
|
||
lcPoints = m.taPoints
|
||
else
|
||
lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
|
||
endif
|
||
|
||
declare integer GdipFillPolygon in gdiplus.dll ;
|
||
integer nGraphics, integer nBrush, string cPoints, integer nCount, integer nFillMode
|
||
|
||
This.gdipStatus = GdipFillPolygon( This.gdipHandle, toBrush.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8,evl(m.tnFillMode,GDIPLUS_FillMode_Alternate) )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fillpolygonfromcursor && Fill a polygon from a cursor defining coordinates
|
||
lparameters toBrush, tcAlias, tcExprX, tcExprY, tnFillMode
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toBrush)='O' and vartype(m.tnFillMode)$'LN' )
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcPoints
|
||
lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
|
||
|
||
declare integer GdipFillPolygon in gdiplus.dll ;
|
||
integer nGraphics, integer nBrush, string cPoints, integer nCount, integer nFillMode
|
||
|
||
This.gdipStatus = GdipFillPolygon( This.gdipHandle, toBrush.GetHandle() ;
|
||
, m.lcPoints, len(m.lcPoints)/8,evl(m.tnFillMode,GDIPLUS_FillMode_Alternate) )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fillrectangle && Fill a rectangle
|
||
lparameters toBrush, tXOrRect,tnY,tnW,tnH
|
||
* Parameters either ( brush, x,y,w,h )
|
||
* or ( brush, rect )
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
do case
|
||
case vartype(m.toBrush)!='O'
|
||
* Brush must be given (assume object is of correct type!)
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
|
||
case vartype(m.tXOrRect)='N' ;
|
||
and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='NNN'
|
||
* OK
|
||
case vartype(m.tXOrRect)='O' ;
|
||
and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='LLL' ;
|
||
and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
|
||
* OK
|
||
otherwise
|
||
* Parameters do not pass the test
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
#endif
|
||
|
||
declare Integer GdipFillRectangle in gdiplus.dll ;
|
||
integer nGraphics, integer nBrush, single,single,single,single
|
||
|
||
if vartype(m.tXOrRect)='O'
|
||
This.gdipStatus = GdipFillRectangle( This.gdipHandle, toBrush.GetHandle() ;
|
||
, m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H )
|
||
else
|
||
This.gdipStatus = GdipFillRectangle( This.gdipHandle, toBrush.GetHandle() ;
|
||
, m.tXOrRect,m.tnY, m.tnW,m.tnH )
|
||
endif
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fillrectangles && Fill a series of rectangles defined by a 4-column array of coordinates
|
||
lparameters toBrush, taRects, tnFirstCol
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toBrush)='O' and (vartype(taRects)='C' or type("taRects[1,1]")='N'))
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcRects
|
||
if vartype(taRects)='C'
|
||
lcRects = m.taRects
|
||
else
|
||
lcRects = This.MakeGdipArrayF( @taRects, 4, m.tnFirstCol )
|
||
endif
|
||
|
||
declare integer GdipFillRectangles in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cRects, integer nCount
|
||
|
||
This.gdipStatus = GdipFillRectangles( This.gdipHandle, toBrush.GetHandle() ;
|
||
, m.lcRects, len(m.lcRects)/16 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE fillrectanglesfromcursor && Fill a series of rectangles defined by a cursor containing x,y,w,h values
|
||
lparameters toBrush, tcAlias, tcExprX, tcExprY, tcExprW, tcExprH
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toBrush)='O')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
local lcRects
|
||
lcRects = This.MakeGdipArrayFFromCursor( m.tcAlias, 4, m.tcExprX, m.tcExprY, m.tcExprW, m.tcExprH )
|
||
|
||
declare integer GdipFillRectangles in gdiplus.dll ;
|
||
integer nGraphics, integer nPen, string cRects, integer nCount
|
||
|
||
This.gdipStatus = GdipFillRectangles( This.gdipHandle, toBrush.GetHandle() ;
|
||
, m.lcRects, len(m.lcRects)/16 )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE flush && Force execution of all pending graphics operations
|
||
lparameters tnFlushIntention
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnFlushIntention)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
declare integer GdipFlush in gdiplus.dll ;
|
||
integer nGraphics, integer nFlushIntention
|
||
|
||
This.gdipStatus = GdipFlush(This.gdipHandle,m.tnFlushIntention)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gethdc && Get handle to device context associated with this Graphics object.
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
local lnHDC
|
||
lnHDC = 0
|
||
declare integer GdipGetDC in gdiplus.dll ;
|
||
integer, integer @
|
||
|
||
This.gdipStatus = GdipGetDC( This.gdipHandle, @lnHDC )
|
||
if GDIPLUS_STATUS_OK == This.gdipStatus
|
||
return m.lnHDC
|
||
else
|
||
return cast(null as I)
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE interpolationmode_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
declare integer GdipGetInterpolationMode in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nMode
|
||
nMode = 0
|
||
This.gdipStatus = GdipGetInterpolationMode ( This.gdipHandle, @nMode)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nMode,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE interpolationmode_assign
|
||
LPARAMETERS tnInterpMode
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnInterpMode)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetInterpolationMode in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetInterpolationMode ( This.gdipHandle,m.tnInterpMode)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE measurestringa && Measures ANSI text string when drawn with the specified Font and formatting
|
||
lparameters tcAnsiString, toFont, tvLayoutArea, toStringFormat, rnCharsFitted, rnLinesFilled
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return null
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcAnsiString)='C' and vartype(m.toFont)$'OL' ;
|
||
and vartype(m.toStringFormat)$'OL')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return null
|
||
endif
|
||
#endif
|
||
|
||
|
||
local lcRectF && layout rectangle
|
||
do case
|
||
case vartype(tvLayoutArea)$'CQ' && String or varbinary
|
||
do case
|
||
case len(m.tvLayoutArea)==8 && sizeF
|
||
lcRectF = replicate(chr(0),8)+m.tvLayoutArea
|
||
case len(m.tvLayoutArea)==16 && rect
|
||
lcRectF = cast(m.tvLayoutArea as C(16))
|
||
otherwise
|
||
* Empty
|
||
lcRectF = replicate(chr(0),16)
|
||
endcase
|
||
case vartype(m.tvLayoutArea) == 'O'
|
||
do case
|
||
case pemstatus(m.tvLayoutArea,'gdipRectF',5) && Rect
|
||
lcRect = tvLayoutArea.GdipRectF
|
||
case pemstatus(m.tvLayoutArea,'GdipSizeF',5) && Size
|
||
lcRect = replicate(chr(0),8)+tvLayoutArea.GdipSizeF
|
||
otherwise
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return null
|
||
endcase
|
||
|
||
case vartype(m.tvLayoutArea) == 'N' && Width only
|
||
lcRectF = replicate(chr(0),8)+bintoc(m.tvLayoutArea,'F')+replicate(chr(0),4)
|
||
otherwise
|
||
* Not given
|
||
lcRectF = replicate(chr(0),16)
|
||
endcase
|
||
|
||
declare integer GdipMeasureString in gdiplus.dll ;
|
||
integer nGraphics,string cUnicode,integer nLength ;
|
||
,integer nFont,string cLayoutRect,integer nStringFormat ;
|
||
, string @cRectOut, integer @nChars, integer @nLines
|
||
|
||
local lcBoundingBox as String, lnCharsFitted as Integer, lnLinesFilled as Integer
|
||
lcBoundingBox = replicate(chr(0),16) && empty rectangle
|
||
lnCharsFitted = 0
|
||
lnLinesFilled = 0
|
||
|
||
This.gdipStatus = GdipMeasureString( ;
|
||
This.gdipHandle ;
|
||
, strconv(m.tcAnsiString,5) ;
|
||
, len(m.tcAnsiString) ;
|
||
, iif(vartype(m.toFont)='O',toFont.GetHandle(),0) ;
|
||
, m.lcRectF ;
|
||
, iif(vartype(m.toStringFormat)='O',toStringFormat.GetHandle(),0) ;
|
||
, @ lcBoundingBox ;
|
||
, @lnCharsFitted, @lnLinesFilled ;
|
||
)
|
||
if GDIPLUS_STATUS_OK == This.gdipStatus
|
||
* Return result
|
||
rnCharsFitted = m.lnCharsFitted
|
||
rnLinesFilled = m.lnLinesFilled
|
||
* return size - the SECOND 8 bytes of the rectF structure
|
||
return This.ObjFactory('gpgraphics.measurestring',GDIPLUS_CLASS_SIZE,substr(m.lcBoundingBox,9))
|
||
else
|
||
return null && Failed
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE measurestringw && Measures Unicode text string when drawn with the specified Font and formatting
|
||
lparameters tcUnicodeString, toFont, tvLayoutArea, toStringFormat, rnCharsFitted, rnLinesFilled
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return null
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcUnicodeString)='C' and vartype(m.toFont)$'OL' ;
|
||
and vartype(m.toStringFormat)$'OL')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return null
|
||
endif
|
||
#endif
|
||
|
||
local lcRectF && layout rectangle
|
||
do case
|
||
case vartype(tvLayoutArea)$'CQ' && String or varbinary
|
||
do case
|
||
case len(m.tvLayoutArea)==8 && sizeF
|
||
lcRectF = replicate(chr(0),8)+m.tvLayoutArea
|
||
case len(m.tvLayoutArea)==16 && rect
|
||
lcRectF = cast(m.tvLayoutArea as C(16))
|
||
otherwise
|
||
* Empty
|
||
lcRectF = replicate(chr(0),16)
|
||
endcase
|
||
case vartype(m.tvLayoutArea) == 'O'
|
||
* Assume GpSize object
|
||
lcRectF = replicate(chr(0),8)+tvLayoutArea.GdipSizeF
|
||
case vartype(m.tvLayoutArea) == 'N' && Width only
|
||
lcRectF = replicate(chr(0),8)+bintoc(m.tvLayoutArea,'F')+replicate(chr(0),4)
|
||
otherwise
|
||
* Not given
|
||
lcRectF = replicate(chr(0),16)
|
||
endcase
|
||
|
||
declare integer GdipMeasureString in gdiplus.dll ;
|
||
integer nGraphics,string cUnicode,integer nLength ;
|
||
,integer nFont,string cLayoutRect,integer nStringFormat ;
|
||
, string @cRectOut, integer @nChars, integer @nLines
|
||
|
||
local lcBoundingBox as String, lnCharsFitted as Integer, lnLinesFilled as Integer
|
||
lcBoundingBox = replicate(chr(0),16) && empty rectangle
|
||
lnCharsFitted = 0
|
||
lnLinesFilled = 0
|
||
|
||
This.gdipStatus = GdipMeasureString( ;
|
||
This.gdipHandle ;
|
||
, m.tcUnicodeString ;
|
||
, len(m.tcUnicodeString)/2 ;
|
||
, iif(vartype(m.toFont)='O',toFont.GetHandle(),0) ;
|
||
, m.lcRectF ;
|
||
, iif(vartype(m.toStringFormat)='O',toStringFormat.GetHandle(),0) ;
|
||
, @ lcBoundingBox ;
|
||
, @lnCharsFitted, @lnLinesFilled ;
|
||
)
|
||
if GDIPLUS_STATUS_OK == This.gdipStatus
|
||
* Return result
|
||
rnCharsFitted = m.lnCharsFitted
|
||
rnLinesFilled = m.lnLinesFilled
|
||
* return size - the SECOND 8 bytes of the rectF structure
|
||
return This.ObjFactory('gpgraphics.measurestring',GDIPLUS_CLASS_SIZE,substr(m.lcBoundingBox,9))
|
||
else
|
||
return null && Failed
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE pagescale_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as B)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetPageScale in gdiplus.dll ;
|
||
integer nGraphics, single @
|
||
local nPageScale
|
||
nPageScale = 0.0
|
||
This.gdipStatus = GdipGetPageScale( This.gdipHandle, @nPageScale)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nPageScale,cast(null as B))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE pagescale_assign
|
||
LPARAMETERS tnScale
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnScale)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetPageScale in gdiplus.dll ;
|
||
integer nGraphics, single
|
||
|
||
This.gdipStatus = GdipSetPageScale( This.gdipHandle,m.tnScale)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE pageunit_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetPageUnit in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nUnit
|
||
nUnit = 0
|
||
This.gdipStatus = GdipGetPageUnit( This.gdipHandle, @nUnit)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nUnit,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE pageunit_assign
|
||
LPARAMETERS tnUnit
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnUnit)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetPageUnit in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetPageUnit( This.gdipHandle,m.tnUnit)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE pixeloffsetmode_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetPixelOffsetMode in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nMode
|
||
nMode = 0
|
||
This.gdipStatus = GdipGetPixelOffsetMode( This.gdipHandle, @nMode)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nMode,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE pixeloffsetmode_assign
|
||
LPARAMETERS tnMode
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnMode)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetPixelOffsetMode in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetPixelOffsetMode ( This.gdipHandle,m.tnMode)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE releasehdc && Release device context previously obtained with GetHdc()
|
||
lparameters tnHDC as integer
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnHDC)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipReleaseDC in gdiplus.dll ;
|
||
integer, integer
|
||
|
||
This.gdipStatus = GdipReleaseDC( This.gdipHandle, tnHDC )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE renderingorigin_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return null
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetRenderingOrigin in gdiplus.dll ;
|
||
integer nGraphics, integer @ x, integer @ y
|
||
local lnX, lnY
|
||
lnX = 0
|
||
lnY = 0
|
||
|
||
This.gdipStatus = GdipGetRenderingOrigin( This.gdipHandle, @lnX, @lnY )
|
||
if This.gdipStatus==GDIPLUS_STATUS_OK
|
||
return This.ObjFactory('gpgraphics.renderingorigin_access',GDIPLUS_CLASS_POINT,m.lnX,m.lnY)
|
||
else
|
||
return null
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE renderingorigin_assign
|
||
LPARAMETERS toPoint
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toPoint)='O' and pemstatus(toPoint,'X',5))
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetRenderingOrigin in gdiplus.dll ;
|
||
integer nGraphics, integer x, integer y
|
||
|
||
This.gdipStatus = GdipSetRenderingOrigin( This.gdipHandle,m.toPoint.X,m.toPoint.Y)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE resettransform && Reset the world transform matrix (to no transformation)
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipResetWorldTransform in gdiplus.dll ;
|
||
integer nGraphics
|
||
|
||
This.gdipStatus = GdipResetWorldTransform( This.gdipHandle )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE restore && Restore previously saved state
|
||
lparameters tnGraphicsState
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnGraphicsState)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipRestoreGraphics in gdiplus.dll ;
|
||
integer, integer
|
||
|
||
This.gdipStatus = GdipRestoreGraphics( This.gdipHandle, m.tnGraphicsState )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE rotatetransform && Prepend rotation by specified angle to this object's transformation matrix
|
||
lparameters tnAngle, tnMatrixOrder
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnAngle)='N' and vartype(m.tnMatrixOrder)$'LN')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipRotateWorldTransform in gdiplus.dll ;
|
||
integer nGraphics, single nAngle, integer nMatrixOrder
|
||
|
||
This.gdipStatus = GdipRotateWorldTransform( This.gdipHandle ;
|
||
, m.tnAngle, evl(m.tnMatrixOrder,GDIPLUS_MatrixOrder_Prepend) )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE save && Save current state and return token (for later restore)
|
||
lparameters rnGraphicsState
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
local lnState
|
||
lnState = 0
|
||
declare integer GdipSaveGraphics in gdiplus.dll ;
|
||
integer, integer @
|
||
|
||
This.gdipStatus = GdipSaveGraphics( This.gdipHandle, @lnState )
|
||
if GDIPLUS_STATUS_OK == This.gdipStatus
|
||
rnGraphicsState = m.lnState
|
||
return .T.
|
||
else
|
||
return .F.
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE scaletransform && Apply scaling to transformation matrix for this graphics object
|
||
lparameters tnScaleX, tnScaleY, tnMatrixOrder
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnScaleX)='N' and vartype(m.tnScaleY)='N' and vartype(m.tnMatrixOrder)$'LN')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipScaleWorldTransform in gdiplus.dll ;
|
||
integer nGraphics, single nScaleX, single nScaleY, integer nMatrixOrder
|
||
|
||
This.gdipStatus = GdipScaleWorldTransform( This.gdipHandle ;
|
||
, m.tnScaleX, m.tnScaleY, evl(m.tnMatrixOrder,GDIPLUS_MatrixOrder_Prepend) )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE smoothingmode_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
declare integer GdipGetSmoothingMode in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nSmoothingMode
|
||
nSmoothingMode = 0
|
||
This.gdipStatus = GdipGetSmoothingMode( This.gdipHandle, @nSmoothingMode)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nSmoothingMode,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE smoothingmode_assign
|
||
LPARAMETERS tnMode
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnMode)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetSmoothingMode in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetSmoothingMode( This.gdipHandle,m.tnMode)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE textcontrast_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetTextContrast in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nValue
|
||
nValue = 0
|
||
This.gdipStatus = GdipGetTextContrast( This.gdipHandle, @nValue)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE textcontrast_assign
|
||
LPARAMETERS tnValue
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnValue)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetTextContrast in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetTextContrast( This.gdipHandle,m.tnValue)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE textrenderinghint_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetTextRenderingHint in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nHint
|
||
nHint = 0
|
||
This.gdipStatus = GdipGetTextRenderingHint( This.gdipHandle, @nHint)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nHint,cast(null as I))
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE textrenderinghint_assign
|
||
LPARAMETERS tnValue
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnValue)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetTextRenderingHint in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetTextRenderingHint( This.gdipHandle,m.tnValue)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE translatetransform && Add translate by (x,y) to this graphics object's transformation matrix
|
||
lparameters tnOffsetX, tnOffsetY, tnMatrixOrder
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnOffsetX)='N' and vartype(m.tnOffsetY)='N' and vartype(m.tnMatrixOrder)$'LN')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipTranslateWorldTransform in gdiplus.dll ;
|
||
integer nGraphics, single nOffsetX, single nOffsetY, integer nMatrixOrder
|
||
|
||
This.gdipStatus = GdipTranslateWorldTransform( This.gdipHandle ;
|
||
, m.tnOffsetX, m.tnOffsetY, evl(m.tnMatrixOrder,GDIPLUS_MatrixOrder_Prepend) )
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE visibleclipbounds_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return null
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetVisibleClipBounds in gdiplus.dll ;
|
||
integer nGraphics, string @ pRectF
|
||
local lcRectF, loRect
|
||
lcRectF = replicate(chr(0),16)
|
||
This.gdipStatus = GdipGetVisibleClipBounds( This.gdipHandle, @lcRectF )
|
||
if This.gdipStatus==GDIPLUS_STATUS_OK and len(m.lcRectF)==16
|
||
return This.ObjFactory('gpgraphics.visibleclipbounds_access',GDIPLUS_CLASS_RECT,@lcRectF)
|
||
else
|
||
return null
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE visibleclipbounds_assign
|
||
LPARAMETERS vNewVal
|
||
error 1743, 'VisibleClipBounds'
|
||
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gphatchbrush AS gpbrush OF "_gdiplus.vcx" && A brush object which fills with a hatch pattern.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: backgroundcolor_access
|
||
*m: backgroundcolor_assign
|
||
*m: create && Create solid brush in given color
|
||
*m: foregroundcolor_access
|
||
*m: foregroundcolor_assign
|
||
*m: hatchstyle_access
|
||
*m: hatchstyle_assign
|
||
*p: backgroundcolor && Color of space between hatch lines
|
||
*p: foregroundcolor && Color of hatch lines
|
||
*p: hatchstyle && Hatch style of this brush object
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
hatchstyle = 0
|
||
Name = "gphatchbrush"
|
||
_memberdata = <VFPData>
|
||
<memberdata name="backgroundcolor" type="property" display="BackgroundColor" favorites="true"/>
|
||
<memberdata name="create" type="method" display="Create" favorites="true"/>
|
||
<memberdata name="foregroundcolor" type="property" display="ForegroundColor" favorites="true"/>
|
||
<memberdata name="hatchstyle" type="property" display="HatchStyle" favorites="true"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE backgroundcolor_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
|
||
declare integer GdipGetHatchBackgroundColor in gdiplus.dll ;
|
||
integer, integer @
|
||
|
||
local nARGB
|
||
nARGB = 0
|
||
This.gdipStatus = GdipGetHatchBackgroundColor( This.gdipHandle, @nARGB )
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nARGB,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE backgroundcolor_assign
|
||
LPARAMETERS tvColor
|
||
error 1743, 'BackgroundColor'
|
||
ENDPROC
|
||
|
||
PROCEDURE create && Create solid brush in given color
|
||
lparameters tnStyle, tvForeColor, tvBackColor
|
||
* tnStyle must be HatchStyle constant
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnStyle)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
Declare Integer GdipCreateHatchBrush In GDIPlus.Dll ;
|
||
integer nHatchStyle, integer nForeColor, integer nBackColor, Integer @nBrush
|
||
|
||
This.gdipStatus = GdipCreateHatchBrush( ;
|
||
m.tnStyle ;
|
||
, iif(vartype(m.tvForeColor)='O',m.tvForeColor.ARGB,iif(vartype(m.tvForeColor)='N',m.tvForeColor,0xFF000000)) ;
|
||
, iif(vartype(m.tvBackColor)='O',m.tvBackColor.ARGB,iif(vartype(m.tvBackColor)='N',m.tvBackColor,0xFFFFFFFF)) ;
|
||
, @nHandle)
|
||
This.SetHandle(m.nHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE foregroundcolor_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
|
||
declare integer GdipGetHatchForegroundColor in gdiplus.dll ;
|
||
integer, integer @
|
||
|
||
local nARGB
|
||
nARGB = 0
|
||
This.gdipStatus = GdipGetHatchForegroundColor( This.gdipHandle, @nARGB )
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nARGB,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE foregroundcolor_assign
|
||
LPARAMETERS tvColor
|
||
error 1743, 'ForegroundColor'
|
||
ENDPROC
|
||
|
||
PROCEDURE hatchstyle_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
|
||
declare integer GdipGetHatchStyle in gdiplus.dll ;
|
||
integer, integer @
|
||
|
||
local nHatchStyle
|
||
nHatchStyle = 0
|
||
This.gdipStatus = GdipGetHatchStyle( This.gdipHandle, @nHatchStyle )
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nHatchStyle,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE hatchstyle_assign
|
||
LPARAMETERS vNewVal
|
||
error 1743, 'HatchStyle'
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
lparameters tnStyle, tvForeColor, tvBackColor
|
||
if not dodefault()
|
||
return .F.
|
||
endif
|
||
if pcount()>0
|
||
return This.Create(m.tnStyle, m.tvForeColor, m.tvBackColor)
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gpimage AS gpobject OF "_gdiplus.vcx" && Encapsulates a GDI+ image, and serves as the base class for specific image types (for example, the gpBitmap class).
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: createfromfile && Create Image object from a file on disk
|
||
*m: flags_access
|
||
*m: flags_assign
|
||
*m: getbounds && Get a bounding rectangle in the specified units
|
||
*m: getdecoderclsid && Get the CLSID for the Decoder for a specific image format (eg "image/jpeg")
|
||
*m: getencoderclsid && Get the CLSID for the Encoder for a specific image format (eg "image/jpeg")
|
||
*m: getencoderparaminfo && Internal function, get inforrmation about an encoder parameter, given human-facing name
|
||
*m: getencoderparamsfromarray && Internal function, convert array into EncoderParameters array
|
||
*m: getencoderparamsfromstring && Internal function, parse string into EncoderParameters array
|
||
*m: getpropertycount && Gets the number of properties (pieces of metadata) stored in this Image object
|
||
*m: getpropertyidlist && Gets an array of the property identifiers used in the metadata of this Image object.
|
||
*m: getpropertyitem && Gets a specified property item (piece of metadata) from this Image object
|
||
*m: getthumbnailimage && Create a thumbnail at the specified size, return as new GpImage object
|
||
*m: horizontalresolution_access
|
||
*m: horizontalresolution_assign
|
||
*m: imageheight_access
|
||
*m: imageheight_assign
|
||
*m: imagewidth_access
|
||
*m: imagewidth_assign
|
||
*m: physicaldimension_access
|
||
*m: physicaldimension_assign
|
||
*m: pixelformat_access
|
||
*m: pixelformat_assign
|
||
*m: rawformat_access
|
||
*m: rawformat_assign
|
||
*m: rotateflip && Rotate, flip (or both) this image
|
||
*m: savetofile && Save image to a disk file, using specified encoder
|
||
*m: verticalresolution_access
|
||
*m: verticalresolution_assign
|
||
*p: flags && Attribute flags for this image
|
||
*p: horizontalresolution && Horizontal resolution in pixels-per-inch
|
||
*p: imageheight && Height of this image
|
||
*p: imagewidth && Width of this image
|
||
*p: physicaldimension && Get the width and height of this object (returned as a GpSize)
|
||
*p: pixelformat && Pixel format - see GP_PIXELFORMAT constants
|
||
*p: rawformat && Get the format of this image (as a GUID)
|
||
*p: verticalresolution && Vertical resolution in pixels-per-inch
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
Name = "gpimage"
|
||
_memberdata = <VFPData>
|
||
<memberdata name="createfromfile" type="method" display="CreateFromFile" favorites="True"/>
|
||
<memberdata name="flags" type="property" display="Flags" favorites="True"/>
|
||
<memberdata name="getbounds" type="method" display="GetBounds" favorites="True"/>
|
||
<memberdata name="getdecoderclsid" type="method" display="GetDecoderCLSID" favorites="True"/>
|
||
<memberdata name="getencoderclsid" type="method" display="GetEncoderCLSID" favorites="True"/>
|
||
<memberdata name="getthumbnailimage" type="method" display="GetThumbnailImage" favorites="True"/>
|
||
<memberdata name="horizontalresolution" type="property" display="HorizontalResolution" favorites="True"/>
|
||
<memberdata name="imageheight" type="property" display="ImageHeight" favorites="True"/>
|
||
<memberdata name="imagewidth" type="property" display="ImageWidth" favorites="True"/>
|
||
<memberdata name="physicaldimension" type="property" display="PhysicalDimension" favorites="True"/>
|
||
<memberdata name="pixelformat" type="property" display="PixelFormat" favorites="True"/>
|
||
<memberdata name="rawformat" type="property" display="RawFormat" favorites="True"/>
|
||
<memberdata name="savetofile" type="method" display="SaveToFile" favorites="True"/>
|
||
<memberdata name="verticalresolution" type="property" display="VerticalResolution" favorites="True"/>
|
||
<memberdata name="getpropertycount" type="method" display="GetPropertyCount" favorites="True"/>
|
||
<memberdata name="getpropertyidlist" type="method" display="GetPropertyIDList" favorites="True"/>
|
||
<memberdata name="getpropertyitem" type="method" display="GetPropertyItem" favorites="True"/>
|
||
<memberdata name="rotateflip" type="method" display="RotateFlip" favorites="True"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE clone
|
||
lparameters toImage as GpImage
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toImage)='O' and m.toImage.gdipHandle<>0)
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
Declare Integer GdipCloneImage In GDIPlus.Dll ;
|
||
integer nImage, integer @nCloneImage
|
||
This.GdipStatus = GdipCloneImage( ;
|
||
m.toImage.gdipHandle ;
|
||
, @nHandle)
|
||
this.gdipHandle= m.nHandle
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE createfromfile && Create Image object from a file on disk
|
||
lparameters tcFilename as String, tlUseEmbeddedColorMgmt as Logical
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcFilename)='C' and !empty(m.tcFilename) and vartype(m.tlUseEmbeddedColorMgmt)='L')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
if m.tlUseEmbeddedColorMgmt
|
||
declare integer GdipLoadImageFromFileICM in gdiplus.dll ;
|
||
string wFilename, integer @ nImage
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
This.gdipStatus = GdipLoadImageFromFileICM( ;
|
||
strconv(m.tcFilename+chr(0),5) ;
|
||
, @nHandle)
|
||
this.SetHandle(m.nHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
else
|
||
declare integer GdipLoadImageFromFile in gdiplus.dll ;
|
||
string wFilename, integer @ nImage
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
This.gdipStatus = GdipLoadImageFromFile( ;
|
||
strconv(m.tcFilename+chr(0),5) ;
|
||
, @nHandle)
|
||
this.SetHandle(m.nHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
endif
|
||
ENDPROC
|
||
|
||
PROCEDURE Destroy
|
||
if This.GdipHandle!=0 and This.gdipOwnsThisHandle
|
||
Declare Integer GdipDisposeImage In GDIPlus.Dll ;
|
||
integer nImage
|
||
GdipDisposeImage(This.GdipHandle)
|
||
This.GdipHandle=0
|
||
This.gdipOwnsThisHandle = .F.
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE flags_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetImageFlags in gdiplus.dll ;
|
||
integer nImage, integer @ nValue
|
||
local nValue
|
||
nValue = 0
|
||
This.gdipStatus = GdipGetImageFlags( This.gdipHandle, @nValue)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE flags_assign
|
||
lparameters newVal
|
||
error 1743, "Flags"
|
||
ENDPROC
|
||
|
||
PROCEDURE getbounds && Get a bounding rectangle in the specified units
|
||
lparameters tnUnit as integer
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnUnit)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return null
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return null
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetImageBounds in gdiplus.dll ;
|
||
integer nGraphics, string @ pRectF, integer @nUnit
|
||
local lcRectF
|
||
lcRectF = replicate(chr(0),16)
|
||
This.gdipStatus = GdipGetImageBounds( This.gdipHandle, @lcRectF, @tnUnit )
|
||
if This.gdipStatus==GDIPLUS_STATUS_OK and len(m.lcRectF)==16
|
||
return This.ObjFactory( 'gpimage.getbounds', GDIPLUS_CLASS_RECT,@lcRectF)
|
||
else
|
||
return null
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE getdecoderclsid && Get the CLSID for the Decoder for a specific image format (eg "image/jpeg")
|
||
lparameters tvSearchValue
|
||
* When passed varbinary, search on Image format GUID
|
||
* When passed char, search on mime type
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tvSearchValue)='C' or (vartype(m.tvSearchValue)='Q' and len(m.tvSearchValue)=16))
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return cast(null as Q)
|
||
endif
|
||
#endif
|
||
|
||
local lnNumDecoders as Integer, lnBufferSize as integer
|
||
lnNumDecoders = 0
|
||
lnBufferSize = 0
|
||
|
||
* The buffer is self-referencing: it starts with an array of ImageCodecInfo
|
||
* followed by the text strings, and the array contains pointers to the text strings
|
||
* To avoid the danger, however slight, of VFP moving this memory around, I allocate
|
||
* Memory using GlobalAlloc.
|
||
*
|
||
|
||
declare integer GlobalAlloc in kernel32.dll integer nFlags, integer nSize
|
||
declare integer GlobalFree in kernel32.dll integer nHandle
|
||
declare integer lstrlenW in kernel32.dll as __win32_lstrlenW_ptr integer
|
||
declare integer GdipGetImageDecodersSize in gdiplus.dll ;
|
||
integer @numDecoders, integer @ nsize
|
||
declare integer GdipGetImageDecoders in gdiplus.dll ;
|
||
integer numDecoders, integer nsize, integer nBufferPtr
|
||
|
||
This.gdipStatus = GdipGetImageDecodersSize( @lnNumDecoders, @lnBufferSize )
|
||
if GDIPLUS_STATUS_OK != This.gdipStatus
|
||
return cast(null as Q)
|
||
endif
|
||
local lnBufferPtr as Integer, lnStringPtr as integer, liDecoder as integer
|
||
lnBufferPtr = GlobalAlloc( 0x0040, m.lnBufferSize ) && 0x40=GMEM_FIXED|GMEM_ZEROINIT
|
||
|
||
* Be careful from now on to deallocate this memory
|
||
* TRY ..CATCH would be smart?
|
||
|
||
This.gdipStatus = GdipGetImageDecoders( m.lnNumDecoders, m.lnBufferSize, m.lnBufferPtr )
|
||
if GDIPLUS_STATUS_OK != This.gdipStatus
|
||
GlobalFree( m.lnBufferPtr )
|
||
return cast(null as Q)
|
||
endif
|
||
|
||
local lcFoundCLSID
|
||
lcFoundCLSID = null
|
||
|
||
do case
|
||
case vartype(m.tvSearchValue)='C' && Search on mime type
|
||
local lcUnicodeMimeType
|
||
lcUnicodeMimeType = strconv(m.tvSearchValue,5)
|
||
for liDecoder = 0 to m.lnNumDecoders-1
|
||
lnStringPtr = ctobin(sys(2600,m.lnBufferPtr+m.liDecoder*76+48,4),'RS')
|
||
if m.lcUnicodeMimeType == sys(2600,lnStringPtr,__win32_lstrlenW_ptr(m.lnStringPtr)*2 )
|
||
lcFoundCLSID = sys(2600,m.lnBufferPtr+m.liDecoder*76,16)
|
||
exit
|
||
endif
|
||
endfor
|
||
|
||
case vartype(m.tvSearchValue)='Q' && Search on Image format GUID
|
||
local lcFormatID
|
||
lcFormatID = cast(m.tvSearchValue as C(16))
|
||
for liDecoder = 0 to m.lnNumDecoders-1
|
||
if m.tvSearchValue == cast( sys(2600,m.lnBufferPtr+m.liDecoder*76+16,16) as Q(16) )
|
||
lcFoundCLSID = sys(2600,m.lnBufferPtr+m.liDecoder*76,16)
|
||
exit
|
||
endif
|
||
endfor
|
||
otherwise
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
* No return here - must still free memory, see below!
|
||
endcase
|
||
|
||
GlobalFree( m.lnBufferPtr )
|
||
return cast( m.lcFoundCLSID as Q(16) )
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE getencoderclsid && Get the CLSID for the Encoder for a specific image format (eg "image/jpeg")
|
||
lparameters tvSearchValue
|
||
* When passed varbinary, search on Image format GUID
|
||
* When passed char, search on mime type
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tvSearchValue)='C' or (vartype(m.tvSearchValue)='Q' and len(m.tvSearchValue)=16))
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return cast(null as Q)
|
||
endif
|
||
#endif
|
||
|
||
local lnNumEncoders as Integer, lnBufferSize as integer
|
||
lnNumEncoders = 0
|
||
lnBufferSize = 0
|
||
|
||
* The buffer is self-referencing: it starts with an array of ImageCodecInfo
|
||
* followed by the text strings, and the array contains pointers to the text strings
|
||
* To avoid the danger, however slight, of VFP moving this memory around, I allocate
|
||
* Memory using GlobalAlloc.
|
||
*
|
||
* eg on my system, sizeof(ImageCodecInfo)=76, num encoders=5, but lnBufferSize=1040
|
||
* object is 1040 bytes
|
||
*
|
||
|
||
declare integer GlobalAlloc in kernel32.dll integer nFlags, integer nSize
|
||
declare integer GlobalFree in kernel32.dll integer nHandle
|
||
declare integer lstrlenW in kernel32.dll as __win32_lstrlenW_ptr integer
|
||
declare integer GdipGetImageEncodersSize in gdiplus.dll ;
|
||
integer @numEncoders, integer @ nsize
|
||
declare integer GdipGetImageEncoders in gdiplus.dll ;
|
||
integer numEncoders, integer nsize, integer nBufferPtr
|
||
|
||
This.gdipStatus = GdipGetImageEncodersSize( @lnNumEncoders, @lnBufferSize )
|
||
if GDIPLUS_STATUS_OK != This.gdipStatus
|
||
return cast(null as Q)
|
||
endif
|
||
local lnBufferPtr as Integer, lnStringPtr as integer, liEncoder as integer
|
||
lnBufferPtr = GlobalAlloc( 0x0040, m.lnBufferSize ) && 0x40=GMEM_FIXED|GMEM_ZEROINIT
|
||
|
||
* Be careful from now on to deallocate this memory
|
||
* TRY ..CATCH would be smart?
|
||
|
||
This.gdipStatus = GdipGetImageEncoders( m.lnNumEncoders, m.lnBufferSize, m.lnBufferPtr )
|
||
if GDIPLUS_STATUS_OK != This.gdipStatus
|
||
GlobalFree( m.lnBufferPtr )
|
||
return cast(null as Q)
|
||
endif
|
||
|
||
local lcFoundCLSID
|
||
lcFoundCLSID = null
|
||
|
||
do case
|
||
case vartype(m.tvSearchValue)='C' && Search on mime type
|
||
local lcUnicodeMimeType
|
||
lcUnicodeMimeType = strconv(m.tvSearchValue,5)
|
||
for liEncoder = 0 to m.lnNumEncoders-1
|
||
lnStringPtr = ctobin( sys(2600,m.lnBufferPtr+m.liEncoder*76+48,4),'RS')
|
||
if m.lcUnicodeMimeType == sys(2600,lnStringPtr,__win32_lstrlenW_ptr(m.lnStringPtr)*2 )
|
||
lcFoundCLSID = sys(2600,m.lnBufferPtr+m.liEncoder*76,16)
|
||
exit
|
||
endif
|
||
endfor
|
||
|
||
case vartype(m.tvSearchValue)='Q' && Search on Image format GUID
|
||
local lcFormatID
|
||
lcFormatID = cast(m.tvSearchValue as C(16))
|
||
for liEncoder = 0 to m.lnNumEncoders-1
|
||
if m.tvSearchValue == cast( sys(2600,m.lnBufferPtr+m.liEncoder*76+16,16) as Q(16) )
|
||
lcFoundCLSID = sys(2600,m.lnBufferPtr+m.liEncoder*76,16)
|
||
exit
|
||
endif
|
||
endfor
|
||
otherwise
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return cast(null as Q)
|
||
endcase
|
||
|
||
GlobalFree( m.lnBufferPtr )
|
||
return cast( m.lcFoundCLSID as Q(16) )
|
||
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE getencoderparaminfo && Internal function, get inforrmation about an encoder parameter, given human-facing name
|
||
lparameters tcParamName, rqGUID, rnDataType
|
||
|
||
do case
|
||
case upper(m.tcParamName) == 'QUALITY'
|
||
* Supported by: JPEG
|
||
rqGUID = GDIPLUS_ENCODER_Quality
|
||
rnDataType = GDIPLUS_ValueDataType_Long
|
||
case upper(m.tcParamName) == 'TRANSFORMATION'
|
||
* Supported by: JPEG
|
||
rqGUID = GDIPLUS_ENCODER_Transformation
|
||
rnDataType = GDIPLUS_ValueDataType_Long
|
||
case upper(m.tcParamName) == 'LUMINANCETABLE'
|
||
* Supported by: JPEG
|
||
rqGUID = GDIPLUS_ENCODER_LuminanceTable
|
||
rnDataType = GDIPLUS_ValueDataType_Short && array of ...
|
||
case upper(m.tcParamName) == 'CHROMINANCETABLE'
|
||
* Supported by: JPEG
|
||
rqGUID = GDIPLUS_ENCODER_ChrominanceTable
|
||
rnDataType = GDIPLUS_ValueDataType_Short && array of ...
|
||
case upper(m.tcParamName) == 'COMPRESSION'
|
||
* Supported by: TIFF
|
||
rqGUID = GDIPLUS_ENCODER_Compression
|
||
rnDataType = GDIPLUS_ValueDataType_Long
|
||
case upper(m.tcParamName) == 'COLORDEPTH'
|
||
* Supported by: TIFF
|
||
rqGUID = GDIPLUS_ENCODER_ColorDepth
|
||
rnDataType = GDIPLUS_ValueDataType_Long
|
||
case upper(m.tcParamName) == 'SAVEFLAG'
|
||
* Supported by: TIFF
|
||
rqGUID = GDIPLUS_ENCODER_SaveFlag
|
||
rnDataType = GDIPLUS_ValueDataType_Long
|
||
* These are defined by GDI+ but not supported by any of the standard encoders
|
||
*case upper(m.tcParamName) == 'COMPRESSION'
|
||
*case upper(m.tcParamName) == 'SCANMETHOD'
|
||
*case upper(m.tcParamName) == 'VERSION'
|
||
*case upper(m.tcParamName) == 'RENDERMETHOD'
|
||
|
||
otherwise
|
||
return .F.
|
||
endcase
|
||
return .T.
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE getencoderparamsfromarray && Internal function, convert array into EncoderParameters array
|
||
lparameters lqCLSIDEncoder, raEncoderParams
|
||
* Internal function, convert array into EncoderParameters array
|
||
* return global memory handle (pointer)
|
||
|
||
external array raEncoderParams
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(type( "raEncoderParams[1]")!='U' and alen(raEncoderParams,2) >= 3)
|
||
error 11 && Function argument
|
||
endif
|
||
#endif
|
||
|
||
|
||
* Input is a 3-column array, where
|
||
* array[i,1] = GUID (varbinary) or name (string) of parameter
|
||
* array[i,2] = data type (se GDIPLUS_ValueDataType_xxx constants)
|
||
* array[i,3] = value
|
||
|
||
|
||
* Need to build an array of EncoderParameter objects
|
||
* Each item is:
|
||
* arraycol Offset Size Description
|
||
* 1 0 16 GUID of the parameter, see GDIPLUS_ENCODER_xxx constants
|
||
* 2 16 4 Number of values
|
||
* 3 20 4 Data type - see
|
||
* - 24 4 Pointer to buffer
|
||
* 4 n/a value
|
||
|
||
* Build local array of parameters
|
||
local lnParamCount
|
||
lnParamCount = alen(raEncoderParams,1)
|
||
local laParam[m.lnParamCount,4], liParam, lcName, lqParamID,lvValue,lnValue, lnBufferSize, lnBufferPtr
|
||
lnBufferSize = 4 + 28 * m.lnParamCount && 4=sizeof(ULONG), 28=sizeof(EncoderParameter)
|
||
for liParam = 1 to m.lnParamCount
|
||
lqParamID = null && initialise
|
||
|
||
* Check input
|
||
* Name -> GUID
|
||
do case
|
||
case vartype( raEncoderParams[m.liParam,1])=='C'
|
||
* Look it up
|
||
lcName = raEncoderParams[m.liParam,1] && to save having two error messages (ouch)
|
||
if not This.getEncoderParamInfo( m.lcName, @lqParamID )
|
||
error _GDIPLUS_BADENCODERPARAMNAME_LOC
|
||
return 0
|
||
endif
|
||
laParam[m.liParam,1] = m.lqParamID
|
||
case vartype( raEncoderParams[m.liParam,1])=='Q' and len(raEncoderParams[m.liParam,1])=16
|
||
laParam[m.liParam,1] = raEncoderParams[m.liParam,1]
|
||
otherwise
|
||
error _GDIPLUS_BADENCODERPARAMNAMETYPE_LOC
|
||
endcase
|
||
|
||
* Data type and value
|
||
laParam[m.liParam,2]=1 && default value
|
||
laParam[m.liParam,3]=raEncoderParams[m.liParam,2]
|
||
lvValue = raEncoderParams[m.liParam,3]
|
||
lnValue = icase( vartype(raEncoderParams[m.liParam,3])$'NY',raEncoderParams[m.liParam,3] ;
|
||
,vartype(raEncoderParams[m.liParam,3])='C',val(raEncoderParams[m.liParam,3]) ;
|
||
,null)
|
||
local llOK
|
||
llOK = .F. && only set to .T. if works
|
||
do case
|
||
case GDIPLUS_ValueDataType_Byte = laParam[m.liParam,3]
|
||
if vartype(m.lvValue)$'NC'
|
||
laParam[m.liParam,4] = chr(m.lnValue)
|
||
llOK = .T.
|
||
endif
|
||
case GDIPLUS_ValueDataType_Short= laParam[m.liParam,3]
|
||
if vartype(m.lvValue)$'NC'
|
||
laParam[m.liParam,4] = chr(m.lnValue%256)+chr(m.lnValue/256)
|
||
llOK = .T.
|
||
endif
|
||
case GDIPLUS_ValueDataType_Long = laParam[m.liParam,3]
|
||
if vartype(m.lvValue)$'NC'
|
||
laParam[m.liParam,4] = bintoc(m.lnValue,'4RS')
|
||
llOK = .T.
|
||
endif
|
||
case GDIPLUS_ValueDataType_Rational = laParam[m.liParam,3]
|
||
* must be expressed as a string in the form "num/den"
|
||
if vartype(m.lvValue)=='C' and '/' $ m.lvValue
|
||
laParam[m.liParam,4] = ;
|
||
bintoc(val(strextract(m.lnValue,'','/')),'4RS') ;
|
||
+ bintoc(val(strextract(m.lnValue,'/','')),'4RS')
|
||
llOK = .T.
|
||
endif
|
||
case GDIPLUS_ValueDataType_LongRange = laParam[m.liParam,3]
|
||
* must be expressed as a string in the form "low-high"
|
||
if vartype(m.lvValue)=='C' and '-' $ m.lvValue
|
||
laParam[m.liParam,4] = ;
|
||
bintoc(val(strextract(m.lnValue,'','-')),'4RS') ;
|
||
+ bintoc(val(strextract(m.lnValue,'-','')),'4RS')
|
||
llOK = .T.
|
||
endif
|
||
case GDIPLUS_ValueDataType_ASCII = laParam[m.liParam,3]
|
||
if vartype(m.lvValue)=='C'
|
||
laParam[m.liParam,4] = m.lvValue + chr(0)
|
||
* laParam[m.liParam,2]= len(laParam[m.liParam,4]) ?
|
||
llOK = .T.
|
||
endif
|
||
case GDIPLUS_ValueDataType_Undefined = laParam[m.liParam,3]
|
||
if vartype(m.lvValue)$'CQ'
|
||
laParam[m.liParam,4] = m.lvValue
|
||
laParam[m.liParam,2]= len(m.lvValue)
|
||
llOK = .T.
|
||
endif
|
||
|
||
* Don't support rational range or pointer
|
||
* otherwise llOK already false
|
||
|
||
endcase
|
||
if ! m.llOK
|
||
error _GDIPLUS_BADENCODERPARAMVALUE_LOC
|
||
return 0
|
||
endif
|
||
lnBufferSize = m.lnBufferSize + len(laParam[m.liParam,4])
|
||
endfor
|
||
|
||
* OK, allocate array and go for it.
|
||
declare integer GlobalAlloc in kernel32.dll integer nFlags, integer nSize
|
||
|
||
lnBufferPtr = GlobalAlloc( 0x0040, m.lnBufferSize ) && 0x40=GMEM_FIXED|GMEM_ZEROINIT
|
||
if 0==m.lnBufferPtr
|
||
* Memory allocation error
|
||
error _GDIPLUS_LOC_MALLOCFAIL
|
||
return null
|
||
endif
|
||
|
||
local lnArrayPtr, lnValuePtr
|
||
lnArrayPtr = m.lnBufferPtr + 4
|
||
lnValuePtr = m.lnArrayPtr + 28*m.lnParamCount
|
||
* parameter count:
|
||
sys(2600,m.lnBufferPtr ,4, bintoc(m.lnParamCount,'4RS'))
|
||
for liParam = 1 to m.lnParamCount
|
||
sys(2600,m.lnArrayPtr,28, ;
|
||
laParam[m.liParam,1];
|
||
+ bintoc(laParam[m.liParam,2],'4RS') ;
|
||
+ bintoc(laParam[m.liParam,3],'4RS') ;
|
||
+ bintoc(m.lnValuePtr,'4RS') ;
|
||
)
|
||
sys(2600,m.lnValuePtr,len(laParam[m.liParam,4]),laParam[m.liParam,4])
|
||
lnArrayPtr = m.lnArrayPtr + 28
|
||
lnValuePtr = m.lnValuePtr + len(laParam[m.liParam,4])
|
||
endfor
|
||
|
||
return m.lnBufferPtr
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE getencoderparamsfromstring && Internal function, parse string into EncoderParameters array
|
||
lparameters lqCLSIDEncoder, tcEncoderParams
|
||
* Internal function, parse string into EncoderParameters array
|
||
* return global memory handle (pointer)
|
||
|
||
* Input is a string of the format "param1=value1, param2=value2, ..."
|
||
*
|
||
* This is more limited than the array version in that
|
||
* - it only understands string parameter names
|
||
* - it only understands those parameters it knows about
|
||
* - data type is only the kind this class implements
|
||
* - cannot include commas in values
|
||
* but it is easier to use for the more common cases
|
||
*
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcEncoderParams)=='C')
|
||
error 11 && Function argument
|
||
endif
|
||
#endif
|
||
|
||
* Short circui
|
||
if empty(m.tcEncoderParams)
|
||
return 0 && nothing to do
|
||
endif
|
||
|
||
local lnCount
|
||
lnCount= occurs(",",m.tcEncoderParams)+1
|
||
local laParams[m.lnCount,3], lnPos,lcName, lcValue, lqGUID, lnType, lcScratch,liParam
|
||
lcScratch = m.tcEncoderParams
|
||
for liParam = 1 to m.lnCount
|
||
* Find name
|
||
lnPos = at('=',m.lcScratch)
|
||
if m.lnPos = 0
|
||
* Invalid
|
||
error _GDIPLUS_BADENCODERPARAMSTRING_LOC
|
||
return 0
|
||
endif
|
||
lcName = alltrim(left(m.lcScratch,m.lnPos-1))
|
||
lcScratch = substr(m.lcScratch,m.lnPos+1)
|
||
lnPos = at(',',m.lcScratch)
|
||
if m.lnPos = 0
|
||
lcValue = alltrim(m.lcScratch)
|
||
lcScratch = ''
|
||
else
|
||
lcValue = alltrim(left(m.lcScratch,m.lnPos-1))
|
||
lcScratch = substr(m.lcScratch,m.lnPos+1)
|
||
endif
|
||
* Now look it up
|
||
if not This.getEncoderParamInfo( m.lcName, @lqGUID, @lnType )
|
||
error _GDIPLUS_BADENCODERPARAMNAME_LOC
|
||
return 0
|
||
endif
|
||
laParams[m.liParam,1] = m.lqGUID
|
||
laParams[m.liParam,2] = m.lnType
|
||
do case
|
||
case inlist(m.lnType ;
|
||
,GDIPLUS_ValueDataType_Byte,GDIPLUS_ValueDataType_Short,GDIPLUS_ValueDataType_Long )
|
||
|
||
laParams[m.liParam,3] = val(m.lcValue)
|
||
* rationals?
|
||
otherwise
|
||
laParams[m.liParam,3] = m.lcValue
|
||
endcase
|
||
endfor
|
||
|
||
return This.getEncoderParamsFromArray( m.lqCLSIDEncoder, @laParams )
|
||
ENDPROC
|
||
|
||
PROCEDURE getpropertycount && Gets the number of properties (pieces of metadata) stored in this Image object
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
local lnCount
|
||
store 0 to lnCount
|
||
|
||
declare integer GdipGetPropertyCount in gdiplus.dll ;
|
||
integer nImage, integer @nCount
|
||
|
||
This.gdipStatus = GdipGetPropertyCount( This.gdipHandle, @lnCount)
|
||
return iif(GDIPLUS_STATUS_OK==This.gdipStatus,m.lnCount,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE getpropertyidlist && Gets an array of the property identifiers used in the metadata of this Image object.
|
||
lparameters raPropIDList
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(type("raPropIDList[1]")!='U')
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
error 11 && Function argument
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
local lnCount, lcIdList, lnIndex
|
||
lnCount = This.GetPropertyCount()
|
||
if isnull(m.lnCount) or m.lnCount<1
|
||
return m.lnCount
|
||
endif
|
||
|
||
declare integer GdipGetPropertyIdList in gdiplus.dll ;
|
||
integer nImage, integer nCount, string @ list
|
||
|
||
lcIdList = replicate( chr(0), 4*m.lnCount )
|
||
This.gdipStatus = GdipGetPropertyIdList( This.gdipHandle, lnCount, @lcIdList )
|
||
|
||
* Now convert to the array
|
||
dimension raPropIDList[m.lnCount]
|
||
for lnIndex = 1 to m.lnCount
|
||
raPropIDList[m.lnIndex] = ctobin(substr(m.lcIdList,m.lnIndex*4-3,4),'RS')
|
||
endfor
|
||
return m.lnCount
|
||
ENDPROC
|
||
|
||
PROCEDURE getpropertyitem && Gets a specified property item (piece of metadata) from this Image object
|
||
lparameters tnPropID as Integer
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnPropID)='N')
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
error 11 && Function argument
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GlobalAlloc in kernel32.dll integer nFlags, integer nSize
|
||
declare integer GlobalFree in kernel32.dll integer nHandle
|
||
declare integer lstrlenA in kernel32.dll as __win32_lstrlenA_ptr integer
|
||
|
||
declare integer GdipGetPropertyItemSize in gdiplus.dll ;
|
||
integer nImage, integer nPropID, integer @ nBufSize
|
||
declare integer GdipGetPropertyItem in gdiplus.dll ;
|
||
integer nImage, integer nPropID, integer nBufSize, integer nBufferPtr
|
||
local lnBufferSize as integer, lnBufferPtr as Integer, lnStringPtr as integer
|
||
lnBufferSize = 0
|
||
|
||
This.gdipStatus = GdipGetPropertyItemSize( This.gdipHandle, m.tnPropID, @lnBufferSize )
|
||
if GDIPLUS_STATUS_OK != This.gdipStatus
|
||
return null
|
||
endif
|
||
|
||
lnBufferPtr = GlobalAlloc( 0x0040, m.lnBufferSize ) && 0x40=GMEM_FIXED|GMEM_ZEROINIT
|
||
if 0==m.lnBufferPtr
|
||
* Memory allocation error
|
||
error _GDIPLUS_MALLOCFAIL_LOC
|
||
return null
|
||
endif
|
||
|
||
This.gdipStatus = GdipGetPropertyItem( This.gdipHandle, m.tnPropID, m.lnBufferSize, m.lnBufferPtr )
|
||
if GDIPLUS_STATUS_OK != This.gdipStatus
|
||
GlobalFree( m.lnBufferPtr )
|
||
return null
|
||
endif
|
||
|
||
* Now decode the parameter
|
||
* PropertyItem
|
||
* Offset Size Description
|
||
* 0 4 ID (32 bit int)
|
||
* 4 4 Length of value
|
||
* 8 4 Data type - GP_PROPERTYTAGTYPE_xxx
|
||
* 12 4 Pointer to value
|
||
* 16 (probably) The value itself
|
||
local lnPropertyTagType, lnValueLen, lnValuePtr, lvReturn
|
||
lnPropertyTagType = ctobin(sys(2600,m.lnBufferPtr+8,4),'RS')
|
||
lnValueLen = ctobin(sys(2600,m.lnBufferPtr+4,4),'RS')
|
||
lnValuePtr = ctobin(sys(2600,m.lnBufferPtr+12,4),'RS')
|
||
do case
|
||
case inlist(m.lnPropertyTagType,0,6,7,8) && nothing or undefined
|
||
lvReturn = null && warning: this is also error value
|
||
case 1 == m.lnPropertyTagType && Byte
|
||
lvReturn = asc( sys(2600,m.lnValuePtr,1))
|
||
case 2 == m.lnPropertyTagType && ASCII string (_not_ unicode)
|
||
* trim null byte off end, but only if there! (It *should* be, but..)
|
||
lvReturn = strextract(sys(2600,m.lnValuePtr,m.lnValueLen),'',chr(0),1,2)
|
||
case 3 == m.lnPropertyTagType && Short (16 bit)
|
||
lvReturn = asc(sys(2600,m.lnValuePtr,1))+256*asc(sys(2600,m.lnValuePtr+1,1))
|
||
case 4 == m.lnPropertyTagType && Long (32 bit)
|
||
lvReturn = ctobin(sys(2600,m.lnValuePtr,4),'RS')
|
||
case 5 == m.lnPropertyTagType && Rational(two 32 bit)
|
||
* return as string
|
||
lvReturn = ltrim(str( ctobin(sys(2600,m.lnValuePtr,4),'RS') )) ;
|
||
+ '/' ;
|
||
+ ltrim(str( ctobin(sys(2600,m.lnValuePtr+4,4),'RS') ))
|
||
case 9 == m.lnPropertyTagType && signed Long (32 bit)
|
||
lvReturn = ctobin(sys(2600,m.lnValuePtr,4),'RS')
|
||
if m.lvReturn>0x7FFFFFFF
|
||
lvReturn = m.lvReturn - 0x100000000
|
||
endif
|
||
case 10 == m.lnPropertyTagType && signed rational a/b
|
||
local lnNum, lnDen
|
||
lnNum = ctobin(sys(2600,m.lnValuePtr,4),'RS')
|
||
lnDen = ctobin(sys(2600,m.lnValuePtr+4,4),'RS')
|
||
if m.lnNum >0x7FFFFFFF
|
||
lnNum = m.lnNum - 0x100000000
|
||
endif
|
||
if m.lnDen >0x7FFFFFFF
|
||
lnDen = m.lnDen - 0x100000000
|
||
endif
|
||
lvReturn = ltrim(str(m.lnNum)) +'/'+ltrim(str(m.lnDen))
|
||
|
||
otherwise
|
||
GlobalFree( m.lnBufferPtr )
|
||
error _GDIPLUS_BADPROPERTYTAGTYPE_LOC
|
||
return null
|
||
endcase
|
||
|
||
GlobalFree( m.lnBufferPtr )
|
||
return m.lvReturn
|
||
ENDPROC
|
||
|
||
PROCEDURE getthumbnailimage && Create a thumbnail at the specified size, return as new GpImage object
|
||
lparameters tnWidth as Integer, tnHeight as Integer
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return null
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnWidth)='N' and vartype(m.tnHeight)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetImageThumbnail in gdiplus.dll ;
|
||
integer nSrcImage, integer nWidth, integer nHeight, integer @nNewImage,integer,integer
|
||
local lnNewImage
|
||
lnNewImage = 0
|
||
|
||
This.gdipStatus = GdipGetImageThumbnail( ;
|
||
This.gdipHandle ;
|
||
, m.tnWidth, m.tnHeight, @lnNewImage, 0, 0 )
|
||
if GDIPLUS_STATUS_OK == This.gdipStatus
|
||
return This.ObjFactory('gpimage.getthumbnailimage', GDIPLUS_CLASS_IMAGE,m.lnNewImage)
|
||
else
|
||
return null
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE horizontalresolution_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as B)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetImageHorizontalResolution in gdiplus.dll ;
|
||
integer nImage, single @ nValue
|
||
local nValue
|
||
nValue = 0.0
|
||
This.gdipStatus = GdipGetImageHorizontalResolution( This.gdipHandle, @nValue)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as B))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE horizontalresolution_assign
|
||
lparameters newVal
|
||
error 1743, "HorizontalResolution"
|
||
ENDPROC
|
||
|
||
PROCEDURE imageheight_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetImageHeight in gdiplus.dll ;
|
||
integer nImage, integer @ nValue
|
||
local nValue
|
||
nValue = 0
|
||
This.gdipStatus = GdipGetImageHeight( This.gdipHandle, @nValue)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE imageheight_assign
|
||
lparameters newVal
|
||
error 1743, "ImageHeight"
|
||
ENDPROC
|
||
|
||
PROCEDURE imagewidth_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetImageWidth in gdiplus.dll ;
|
||
integer nPen, integer @ nValue
|
||
local nValue
|
||
nValue = 0
|
||
This.gdipStatus = GdipGetImageWidth( This.gdipHandle, @nValue)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE imagewidth_assign
|
||
lparameters newVal
|
||
error 1743, "ImageWidth"
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
lparameters tvParam1, tvParam2
|
||
if not dodefault()
|
||
return .F.
|
||
endif
|
||
|
||
do case
|
||
case vartype(m.tvParam1) = 'N'
|
||
* Handle
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tvParam2)='L')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.SetHandle(m.tvParam1,m.tvParam2)
|
||
|
||
case vartype(m.tvParam1) = 'C'
|
||
* Filename, no second param
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tvParam2)='L')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
return This.CreateFromFile( m.tvParam1, m.tvParam2 )
|
||
case vartype(m.tvParam1)='L'
|
||
* Do nothing
|
||
otherwise
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endcase
|
||
return .T.
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE physicaldimension_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return null
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetImageDimension in gdiplus.dll ;
|
||
integer nGraphics, single @, single @
|
||
local lnWidth, lnHeight
|
||
store 0.0 to lnWidth, lnHeight
|
||
This.gdipStatus = GdipGetImageDimension ( This.gdipHandle, @lnWidth, @lnHeight )
|
||
if This.gdipStatus==GDIPLUS_STATUS_OK
|
||
return This.ObjFactory('gpimage.physicaldimension_access',GDIPLUS_CLASS_SIZE, m.lnWidth, m.lnHeight)
|
||
else
|
||
return null
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE physicaldimension_assign
|
||
lparameters newVal
|
||
error 1743, "PhysicalDimension"
|
||
ENDPROC
|
||
|
||
PROCEDURE pixelformat_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetImagePixelFormat in gdiplus.dll ;
|
||
integer nPen, integer @ nValue
|
||
local nValue
|
||
nValue = 0
|
||
This.gdipStatus = GdipGetImagePixelFormat( This.gdipHandle, @nValue)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE pixelformat_assign
|
||
lparameters newVal
|
||
error 1743, "PixelFormat"
|
||
ENDPROC
|
||
|
||
PROCEDURE rawformat_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as Q(16))
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetImageRawFormat in gdiplus.dll ;
|
||
integer nImage, string @ sGUID
|
||
local sGUID
|
||
sGUID = replicate(chr(0),16)
|
||
This.gdipStatus = GdipGetImageRawFormat( This.gdipHandle, @sGUID)
|
||
return cast(iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.sGUID,null) as Q(16))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE rawformat_assign
|
||
lparameters newVal
|
||
error 1743, "RawFormat"
|
||
ENDPROC
|
||
|
||
PROCEDURE rotateflip && Rotate, flip (or both) this image
|
||
lparameters tnRotateFlipType
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnRotateFlipType)='N')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipImageRotateFlip in gdiplus.dll ;
|
||
integer nImage, integer nMode
|
||
|
||
This.gdipStatus = GdipImageRotateFlip( This.gdipHandle, m.tnRotateFlipType )
|
||
return (GDIPLUS_STATUS_OK == This.gdipStatus)
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE savetofile && Save image to a disk file, using specified encoder
|
||
lparameters tcFilename as String, tvCLSIDEncoder, rvEncoderParams
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcFilename)='C' and !empty(m.tcFilename))
|
||
error 11 && Function argument
|
||
endif
|
||
#endif
|
||
|
||
|
||
local lqCLSIDEncoder
|
||
* Encoder may be varbinary, or string
|
||
do case
|
||
case vartype(m.tvCLSIDEncoder)=='Q'
|
||
lqCLSIDEncoder = m.tvCLSIDEncoder
|
||
case vartype(m.tvCLSIDEncoder)=='C'
|
||
if left(m.tvCLSIDEncoder,1)=='{'
|
||
lqCLSIDEncoder = This.StringToGUID( m.tvCLSIDEncoder)
|
||
else
|
||
lqCLSIDEncoder = This.GetEncoderCLSID(m.tvCLSIDEncoder)
|
||
endif
|
||
otherwise
|
||
error 11
|
||
endcase
|
||
|
||
declare integer GdipSaveImageToFile in gdiplus.dll ;
|
||
integer nImage, string wFilename, string qEncoder, integer nEncoderParamsPtr
|
||
declare integer GlobalFree in kernel32.dll integer nHandle
|
||
|
||
local lnEncoderParamsPtr
|
||
do case
|
||
case type("rvEncoderParams[1]")!='U'
|
||
lnEncoderParamsPtr = This.getEncoderParamsFromArray( m.lqCLSIDEncoder, @rvEncoderParams )
|
||
case vartype(m.rvEncoderParams)=='C'
|
||
lnEncoderParamsPtr = This.getEncoderParamsFromString( m.lqCLSIDEncoder, @rvEncoderParams )
|
||
case vartype(m.rvEncoderParams)=='L' and !m.rvEncoderParams
|
||
lnEncoderParamsPtr = 0
|
||
otherwise
|
||
error 11 && function argument
|
||
return .F.
|
||
endcase
|
||
|
||
|
||
This.gdipStatus = GdipSaveImageToFile ( ;
|
||
This.gdipHandle ;
|
||
, strconv(m.tcFilename,5)+chr(0) ;
|
||
, m.lqCLSIDEncoder ;
|
||
, m.lnEncoderParamsPtr )
|
||
|
||
|
||
if m.lnEncoderParamsPtr!=0
|
||
GlobalFree(m.lnEncoderParamsPtr)
|
||
endif
|
||
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE verticalresolution_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as B)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetImageVerticalResolution in gdiplus.dll ;
|
||
integer nImage, single @ nValue
|
||
local nValue
|
||
nValue = 0.0
|
||
This.gdipStatus = GdipGetImageVerticalResolution( This.gdipHandle, @nValue)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as B))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE verticalresolution_assign
|
||
lparameters newVal
|
||
error 1743, "VerticalResolution"
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gpobject AS gpbase OF "_gdiplus.vcx" && The abstract base class for all GDI+ objects. Provides management of GDI+ handles and the outcome of GDI+ operations.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: gdipstatus_assign
|
||
*m: gethandle && Return the underlying GDI+ handle for this object
|
||
*m: getstatus && Return the status code from the last GDI+ function called on this object
|
||
*m: sethandle && Set the native GDI+ handle if this has been obtained from an outside source
|
||
*p: gdiphandle && Underlying GDI+ handle for this object
|
||
*p: gdipownsthishandle && True if this VFP object owns the corresponding GDI+ object (and thus should dispose of it in its Destroy Event)
|
||
*p: gdipstatus && Status code returned from last GDI+ function called (see Status enumeration)
|
||
*p: win32lasterror && Win32 error code if GetStatus() returns GP_STATUS_Win32Error
|
||
*</DefinedPropArrayMethod>
|
||
|
||
PROTECTED gdiphandle,gdipownsthishandle,gdipstatus
|
||
*<PropValue>
|
||
gdiphandle = 0
|
||
gdipstatus = 0
|
||
Name = "gpobject"
|
||
win32lasterror = 0
|
||
_memberdata = <VFPData>
|
||
<memberdata name="gdiphandle" type="property" display="gdipHandle"/>
|
||
<memberdata name="gdipownsthishandle" type="property" display="gdipOwnsThisHandle"/>
|
||
<memberdata name="gdipstatus" type="property" display="gdipStatus"/>
|
||
<memberdata name="gethandle" type="method" display="GetHandle" favorites="True"/>
|
||
<memberdata name="getstatus" type="method" display="GetStatus" favorites="True"/>
|
||
<memberdata name="sethandle" type="method" display="SetHandle" favorites="True"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE gdipstatus_assign
|
||
LPARAMETERS vNewVal
|
||
THIS.gdipStatus = m.vNewVal
|
||
do case
|
||
case m.vNewVal == GDIPLUS_STATUS_Win32Error
|
||
This.win32LastError = _win32_GetLastError()
|
||
#if GDIPLUS_CHECK_GDIPLUSNOTINIT
|
||
case m.vNewVal == GDIPLUS_STATUS_GdiplusNotInitialized
|
||
error _GDIPLUS_GDIPLUSNOTINIT_LOC
|
||
#endif
|
||
endcase
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gethandle && Return the underlying GDI+ handle for this object
|
||
return This.gdipHandle
|
||
ENDPROC
|
||
|
||
PROCEDURE getstatus && Return the status code from the last GDI+ function called on this object
|
||
return This.gdipStatus
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
declare integer GetLastError in kernel32.dll as _win32_GetLastError
|
||
return dodefault()
|
||
ENDPROC
|
||
|
||
PROCEDURE sethandle && Set the native GDI+ handle if this has been obtained from an outside source
|
||
lparameters tvNewHandle, tlOwnsHandle
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tvNewHandle)='N' and vartype(m.tlOwnsHandle)='L')
|
||
error 11 && function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
* Assume if we came through this function that we do NOT own the graphics handle
|
||
* Thus destroy must not call GdipDelete..() on this handle
|
||
* This can be overridden by passing tlOwnsHandle=.T.
|
||
This.gdipHandle = m.tvNewHandle
|
||
This.gdipOwnsThisHandle = m.tlOwnsHandle
|
||
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gppen AS gpobject OF "_gdiplus.vcx" && A pen object, which is used to draw lines and curves.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: alignment_access
|
||
*m: alignment_assign
|
||
*m: create && Create pen in a given color
|
||
*m: createfrombrush && Create pen from an existing _gdiplus brush object
|
||
*m: dashcap_access
|
||
*m: dashcap_assign
|
||
*m: dashoffset_access
|
||
*m: dashoffset_assign
|
||
*m: dashstyle_access
|
||
*m: dashstyle_assign
|
||
*m: endcap_access
|
||
*m: endcap_assign
|
||
*m: linejoin_access
|
||
*m: linejoin_assign
|
||
*m: miterlimit_access
|
||
*m: miterlimit_assign
|
||
*m: pencolor_access
|
||
*m: pencolor_assign
|
||
*m: pentype_access
|
||
*m: pentype_assign
|
||
*m: penunit_access
|
||
*m: penunit_assign
|
||
*m: penwidth_access
|
||
*m: penwidth_assign
|
||
*m: startcap_access
|
||
*m: startcap_assign
|
||
*p: alignment && The alignment of this pen (see GP_PENALIGNMENT_ constants)
|
||
*p: dashcap && The cap style at the end of dashes, for dashed lines
|
||
*p: dashoffset && The distance from the start of a line to the beginning of a dash pattern
|
||
*p: dashstyle && The style used for dashed lines
|
||
*p: endcap && Cap style at the end of lines drawn with this Pen
|
||
*p: linejoin && Join style for the ends of two consecutive lines drawn with this Pen
|
||
*p: miterlimit && The limit of the thickness of the join on a mitered corner
|
||
*p: pencolor && The color of this Pen object.
|
||
*p: pentype && The style of lines drawn with this Pen object
|
||
*p: penunit && The unit for measuring width etc, see GDIPLUS_UNIT constants
|
||
*p: penwidth && Width of the pen object
|
||
*p: startcap && Cap style at the start of lines drawn with this Pen
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
Name = "gppen"
|
||
_memberdata = <VFPData>
|
||
<memberdata name="create" type="method" display="Create" favorites="True"/>
|
||
<memberdata name="createfrombrush" type="method" display="CreateFromBrush" favorites="True"/>
|
||
<memberdata name="dashcap" type="property" display="DashCap" favorites="True"/>
|
||
<memberdata name="dashoffset" type="property" display="DashOffset" favorites="True"/>
|
||
<memberdata name="dashstyle" type="property" display="DashStyle" favorites="True"/>
|
||
<memberdata name="endcap" type="property" display="EndCap" favorites="True"/>
|
||
<memberdata name="linejoin" type="property" display="LineJoin" favorites="True"/>
|
||
<memberdata name="miterlimit" type="property" display="MiterLimit" favorites="True"/>
|
||
<memberdata name="pencolor" type="property" display="PenColor" favorites="True"/>
|
||
<memberdata name="pentype" type="property" display="PenType" favorites="True"/>
|
||
<memberdata name="penunit" type="property" display="PenUnit" favorites="True"/>
|
||
<memberdata name="penwidth" type="property" display="PenWidth" favorites="True"/>
|
||
<memberdata name="startcap" type="property" display="StartCap" favorites="True"/>
|
||
<memberdata name="alignment" type="property" display="Alignment" favorites="True"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE alignment_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetPenMode in gdiplus.dll ;
|
||
integer nPen, integer @ nType
|
||
local nType
|
||
nType = 0
|
||
This.gdipStatus = GdipGetPenMode( This.gdipHandle, @nType)
|
||
* if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE alignment_assign
|
||
LPARAMETERS tnValue
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnValue)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipSetPenMode in gdiplus.dll ;
|
||
integer nPen, integer nValue
|
||
|
||
This.gdipStatus = GdipSetPenMode( This.gdipHandle,m.tnValue)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE clone
|
||
lparameters toPen as GpPen
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toPen)='O' and m.toPen.gdipHandle<>0)
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
Declare Integer GdipClonePen In GDIPlus.Dll ;
|
||
integer nPen, integer @nClonePen
|
||
This.GdipStatus = GdipClonePen( ;
|
||
m.toPen.gdipHandle ;
|
||
, @nHandle)
|
||
this.gdipHandle= m.nHandle
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE create && Create pen in a given color
|
||
lparameters tvColor, tnWidth as Number, tnUnit as Number
|
||
|
||
* tvColor may be ARGB or a Color object
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
Declare Integer GdipCreatePen1 In GDIPlus.Dll ;
|
||
integer nColor, single fWidth,Integer nUnit, Integer @nPen
|
||
This.GdipStatus = GdipCreatePen1( ;
|
||
icase(vartype(m.tvColor)='O',m.tvColor.ARGB,vartype(m.tvColor)='N',m.tvColor,0xFF000000) ;
|
||
, iif(vartype(m.tnWidth)='N',m.tnWidth,1.0) ;
|
||
, iif(vartype(m.tnUnit)='N',m.tnUnit,0) ;
|
||
, @nHandle)
|
||
This.SetHandle(m.nHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE createfrombrush && Create pen from an existing _gdiplus brush object
|
||
lparameters toBrush as Brush, tnWidth as Number, tnUnit as Number
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toBrush)='O' and m.toPen.gdipHandle<>0)
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
Declare Integer GdipCreatePen2 In GDIPlus.Dll ;
|
||
integer nBrush, single fWidth,Integer nUnit, Integer @nPen
|
||
This.GdipStatus = GdipCreatePen2( ;
|
||
m.toBrush.GetHandle() ;
|
||
, iif(vartype(m.tnWidth)='N',m.tnWidth,1.0) ;
|
||
, iif(vartype(m.tnUnit)='N',m.tnUnit,0) ;
|
||
, @nHandle)
|
||
This.SetHandle(m.nHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE dashcap_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetPenDashCap197819 in gdiplus.dll ;
|
||
integer nPen, integer @ nType
|
||
local nType
|
||
nType = 0
|
||
This.gdipStatus = GdipGetPenDashCap197819( This.gdipHandle, @nType)
|
||
* if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE dashcap_assign
|
||
LPARAMETERS tnValue
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnValue)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipSetPenDashCap197819 in gdiplus.dll ;
|
||
integer nPen, integer nValue
|
||
|
||
This.gdipStatus = GdipSetPenDashCap197819( This.gdipHandle,m.tnValue)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE dashoffset_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as B)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetPenDashOffset in gdiplus.dll ;
|
||
integer nPen, single @ nType
|
||
local nOffset
|
||
nOffset = 0.0
|
||
This.gdipStatus = GdipGetPenDashOffset( This.gdipHandle, @nOffset)
|
||
* if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nOffset,cast(null as B))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE dashoffset_assign
|
||
LPARAMETERS tnNewValue
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnNewValue)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipSetPenDashOffset in gdiplus.dll ;
|
||
integer nPen, single nValue
|
||
|
||
This.gdipStatus = GdipSetPenDashOffset( This.gdipHandle,m.tnNewValue)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE dashstyle_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetPenDashStyle in gdiplus.dll ;
|
||
integer nPen, integer @ nType
|
||
local nType
|
||
nType = 0
|
||
This.gdipStatus = GdipGetPenDashStyle( This.gdipHandle, @nType)
|
||
* if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE dashstyle_assign
|
||
LPARAMETERS tnValue
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnValue)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipSetPenDashStyle in gdiplus.dll ;
|
||
integer nPen, integer nValue
|
||
|
||
This.gdipStatus = GdipSetPenDashStyle( This.gdipHandle,m.tnValue)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Destroy
|
||
if This.GdipHandle!=0 and This.gdipOwnsThisHandle
|
||
Declare Integer GdipDeletePen In GDIPlus.Dll ;
|
||
integer nPen
|
||
GdipDeletePen(This.GdipHandle)
|
||
This.GdipHandle=0
|
||
This.gdipOwnsThisHandle=.F.
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE endcap_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetPenEndCap in gdiplus.dll ;
|
||
integer nPen, integer @ nType
|
||
local nType
|
||
nType = 0
|
||
This.gdipStatus = GdipGetPenEndCap( This.gdipHandle, @nType)
|
||
* if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE endcap_assign
|
||
LPARAMETERS tnValue
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnValue)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipSetPenEndCap in gdiplus.dll ;
|
||
integer nPen, integer nValue
|
||
|
||
This.gdipStatus = GdipSetPenEndCap( This.gdipHandle,m.tnValue)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
lparameters tvColor, tnWidth as Number, tnUnit as Number
|
||
if not dodefault()
|
||
return .F.
|
||
endif
|
||
if pcount()>0
|
||
return This.Create(m.tvColor,m.tnWidth,m.tnUnit)
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE linejoin_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetPenLineJoin in gdiplus.dll ;
|
||
integer nPen, integer @ nType
|
||
local nType
|
||
nType = 0
|
||
This.gdipStatus = GdipGetPenLineJoin( This.gdipHandle, @nType)
|
||
* if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE linejoin_assign
|
||
LPARAMETERS tnValue
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnValue)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipSetPenLineJoin in gdiplus.dll ;
|
||
integer nPen, integer nValue
|
||
|
||
This.gdipStatus = GdipSetPenLineJoin( This.gdipHandle,m.tnValue)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE miterlimit_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as B)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetPenMiterLimit in gdiplus.dll ;
|
||
integer nPen, single @ nLimit
|
||
local nLimit
|
||
nLimit = 0.0
|
||
This.gdipStatus = GdipGetPenMiterLimit( This.gdipHandle, @nLimit)
|
||
* if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nLimit,cast(null as B))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE miterlimit_assign
|
||
LPARAMETERS tnNewValue
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnNewValue)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipSetPenMiterLimit in gdiplus.dll ;
|
||
integer nPen, single nValue
|
||
|
||
This.gdipStatus = GdipSetPenMiterLimit( This.gdipHandle,m.tnNewValue)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE pencolor_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetPenColor in gdiplus.dll ;
|
||
integer nPen, integer @ nARGB
|
||
local nARGB
|
||
nARGB = 0
|
||
This.gdipStatus = GdipGetPenColor( This.gdipHandle, @nARGB )
|
||
* if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nARGB,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE pencolor_assign
|
||
LPARAMETERS tvColor
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tvColor)$'ON')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipSetPenColor in gdiplus.dll ;
|
||
integer nPen, integer nColor
|
||
|
||
This.gdipStatus = GdipSetPenColor( This.gdipHandle,iif(vartype(m.tvColor)='O',m.tvColor.ARGB,m.tvColor))
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE pentype_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetPenFillType in gdiplus.dll ;
|
||
integer nPen, integer @ nType
|
||
local nType
|
||
nType = 0
|
||
This.gdipStatus = GdipGetPenFillType( This.gdipHandle, @nType)
|
||
* if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE pentype_assign
|
||
LPARAMETERS vNewVal
|
||
error 1743, 'PenType'
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE penunit_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetPenUnit in gdiplus.dll ;
|
||
integer nPen, integer @ nType
|
||
local nType
|
||
nType = 0
|
||
This.gdipStatus = GdipGetPenUnit( This.gdipHandle, @nType)
|
||
* if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE penunit_assign
|
||
LPARAMETERS tnValue
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnValue)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipSetPenUnit in gdiplus.dll ;
|
||
integer nPen, integer nValue
|
||
|
||
This.gdipStatus = GdipSetPenUnit( This.gdipHandle,m.tnValue)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE penwidth_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as B)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetPenWidth in gdiplus.dll ;
|
||
integer nPen, single @ fWidth
|
||
local nWidth
|
||
nWidth = 0.0
|
||
This.gdipStatus = GdipGetPenWidth( This.gdipHandle, @nWidth )
|
||
* if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nWidth,cast(null as B))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE penwidth_assign
|
||
LPARAMETERS tnNewWidth
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnNewWidth)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipSetPenWidth in gdiplus.dll ;
|
||
integer nPen, single fWidth
|
||
|
||
This.gdipStatus = GdipSetPenWidth( This.gdipHandle,m.tnNewWidth)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE startcap_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipGetPenStartCap in gdiplus.dll ;
|
||
integer nPen, integer @ nType
|
||
local nType
|
||
nType = 0
|
||
This.gdipStatus = GdipGetPenStartCap( This.gdipHandle, @nType)
|
||
* if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE startcap_assign
|
||
LPARAMETERS tnValue
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnValue)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipSetPenStartCap in gdiplus.dll ;
|
||
integer nPen, integer nValue
|
||
|
||
This.gdipStatus = GdipSetPenStartCap( This.gdipHandle,m.tnValue)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gppoint AS gpbase OF "_gdiplus.vcx" && Encapsulates an ordered pair of x- and y-coordinates that defines a point in a two-dimensional plane.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: create && Set point from individual x,y coordinates
|
||
*m: gdippointf_access
|
||
*m: gdippointf_assign
|
||
*m: gdippoint_access
|
||
*m: gdippoint_assign
|
||
*m: set && Set point from individual x,y coordinates
|
||
*p: gdippoint && String representing the GDI+ Point structure (2 x 32bit integers)
|
||
*p: gdippointf && String representing the GDI+ PointF structure (2 x 32bit single-precision floats)
|
||
*p: x && x-coordinate of point
|
||
*p: y && y-coordinate of point
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
Name = "gppoint"
|
||
x = 0
|
||
y = 0
|
||
_memberdata = <VFPData>
|
||
<memberdata name="create" type="method" display="Create" favorites="True"/>
|
||
<memberdata name="set" type="method" display="Set" favorites="True"/>
|
||
<memberdata name="gdippoint" type="property" display="GdipPoint" favorites="True"/>
|
||
<memberdata name="gdippointf" type="property" display="GdipPointF" favorites="True"/>
|
||
<memberdata name="x" type="property" display="x" favorites="True"/>
|
||
<memberdata name="y" type="property" display="y" favorites="True"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE clone
|
||
lparameters toOtherPoint as GpPoint
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toOtherPoint)='O' ;
|
||
and vartype(toOtherPoint.X)='N' and vartype(toOtherPoint.Y)='N')
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.X = m.toOtherPoint.X
|
||
This.Y = m.toOtherPoint.Y
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE create && Set point from individual x,y coordinates
|
||
lparameters tx,ty
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tx)='N' and vartype(m.ty)='N')
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.X = m.tx
|
||
This.Y = m.ty
|
||
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE gdippointf_access
|
||
return ;
|
||
bintoc(This.X,'F') + bintoc(This.Y,'F')
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE gdippointf_assign
|
||
LPARAMETERS tcPointF
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcPointF)='C' and len(m.tcPointF)=8)
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.X = ctobin(substr(m.tcPointF,1,4),'N')
|
||
This.Y = ctobin(substr(m.tcPointF,5,4),'N')
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE gdippoint_access
|
||
* Convert object into 2 x 32-bit integers
|
||
* Modify bintoc() output into little-endian with normal sign bit
|
||
return ;
|
||
bintoc(This.X,'4RS') + bintoc(This.Y,'4RS')
|
||
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE gdippoint_assign
|
||
LPARAMETERS tcPoint
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcPoint)='C' and len(m.tcPoint)=8)
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
This.X = ctobin(substr(m.tcPoint,1,4),'RS')
|
||
This.Y = ctobin(substr(m.tcPoint,5,4),'RS')
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
lparameters tXorPoint,ty
|
||
if not dodefault()
|
||
return .F.
|
||
endif
|
||
|
||
do case
|
||
case pcount()=1 and vartype(m.tXorPoint)='O'
|
||
* Passed an object - presumably an existing Point object
|
||
This.Clone(m.tXorPoint)
|
||
case pcount()=1 and vartype(m.tXorPoint)='C'
|
||
* Passed a string (structure)
|
||
* Assume PointF as this is preferred format
|
||
This.gdipPointF = m.tXorPoint
|
||
case pcount()>=2
|
||
* Separate components
|
||
This.Create(m.tXorPoint,m.ty)
|
||
endcase
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE set && Set point from individual x,y coordinates
|
||
lparameters tx as Number,ty as Number
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tx)='N' and vartype(m.ty)='N')
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.X = m.tx
|
||
This.Y = m.ty
|
||
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gprectangle AS gpbase OF "_gdiplus.vcx" && Encapsulates a set of four numbers that represent the location and size of a rectangle.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: create && Set rectangle from individual coordinates
|
||
*m: createfrompointsize && Set rectangle from separate point and size objects
|
||
*m: gdippointf_access
|
||
*m: gdippointf_assign
|
||
*m: gdippoint_access
|
||
*m: gdippoint_assign
|
||
*m: gdiprectf_access
|
||
*m: gdiprectf_assign
|
||
*m: gdiprect_access
|
||
*m: gdiprect_assign
|
||
*m: gdipsizef_access
|
||
*m: gdipsizef_assign
|
||
*m: gdipsize_access
|
||
*m: gdipsize_assign
|
||
*m: gdirect_access
|
||
*m: gdirect_assign
|
||
*m: gppoint_access
|
||
*m: gppoint_assign
|
||
*m: gpsize_access
|
||
*m: gpsize_assign
|
||
*m: set && Set rectangle coordinates from individual components
|
||
*m: x2_access
|
||
*m: x2_assign
|
||
*m: y2_access
|
||
*m: y2_assign
|
||
*p: gdippoint && GDI+ Point (integers) structure for the x,y position of this rectange
|
||
*p: gdippointf && GDI+ PointF structure for the x,y position of this rectange
|
||
*p: gdiprect && String representing the GDI+ Rect structure (4 x 32bit integers)
|
||
*p: gdiprectf && String representing the GDI+ RectF structure (4 x 32bit single-precision floats)
|
||
*p: gdipsize && GDI+ Size (integers) structure for the width and height of this rectange
|
||
*p: gdipsizef && GDI+ SizeF structure for the width and height of this rectange
|
||
*p: gdirect && String containing Win32/GDI "RECT" structure (integers, x1,y1,x2,y2)
|
||
*p: gppoint && Origin of the rectange (x,y) as a GpPoint object
|
||
*p: gpsize && Width and Height of the rectangle as a GpSize object
|
||
*p: h && Height of rectangle
|
||
*p: w && Width of rectangle
|
||
*p: x && x-coordinate of upper-left corner of rectangle
|
||
*p: x2 && X-Coordinate of bottom right corner of rectangle
|
||
*p: y && y-coordinate of upper-left corner of rectangle
|
||
*p: y2 && Y-Coordinate of bottom right corner of rectangle
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
h = 0
|
||
Name = "gprectangle"
|
||
w = 0
|
||
x = 0
|
||
y = 0
|
||
_memberdata = <VFPData>
|
||
<memberdata name="create" type="method" display="Create" favorites="True"/>
|
||
<memberdata name="createfrompointsize" type="method" display="CreateFromPointSize" favorites="True"/>
|
||
<memberdata name="set" type="method" display="Set" favorites="True"/>
|
||
<memberdata name="gdippoint" type="property" display="GdipPoint" favorites="True"/>
|
||
<memberdata name="gdippointf" type="property" display="GdipPointF" favorites="True"/>
|
||
<memberdata name="x" type="property" display="x" favorites="True"/>
|
||
<memberdata name="y" type="property" display="y" favorites="True"/>
|
||
<memberdata name="gdipsize" type="property" display="GdipSize" favorites="True"/>
|
||
<memberdata name="gdipsizef" type="property" display="GdipSizeF" favorites="True"/>
|
||
<memberdata name="w" type="property" display="w" favorites="True"/>
|
||
<memberdata name="h" type="property" display="h" favorites="True"/>
|
||
<memberdata name="x2" type="property" display="x2" favorites="True"/>
|
||
<memberdata name="y2" type="property" display="y2" favorites="True"/>
|
||
<memberdata name="gdiprect" type="property" display="GdipRect" favorites="True"/>
|
||
<memberdata name="gdiprectf" type="property" display="GdipRectF" favorites="True"/>
|
||
<memberdata name="gdirect" type="property" display="GdiRect" favorites="True"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE clone
|
||
lparameters toOtherRect
|
||
do case
|
||
case vartype(m.toOtherRect)='O'
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(toOtherRect.X)='N' and vartype(toOtherRect.Y)='N' ;
|
||
and vartype(toOtherRect.W)='N' and vartype(toOtherRect.H)='N')
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.X = m.toOtherRect.X
|
||
This.Y = m.toOtherRect.Y
|
||
This.W = m.toOtherRect.W
|
||
This.H = m.toOtherRect.H
|
||
case vartype(m.toOtherRect)='C'
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(len(m.toOtherRect)=16)
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
* Assume RectF
|
||
This.gdipRectF = m.toOtherRect
|
||
otherwise
|
||
error 11
|
||
return .F.
|
||
endcase
|
||
ENDPROC
|
||
|
||
PROCEDURE create && Set rectangle from individual coordinates
|
||
lparameters tx,ty,tw,th
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tx)='N' and vartype(m.ty)='N' ;
|
||
and vartype(m.tw)$'LN' and vartype(m.th)$'LN')
|
||
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.X = m.tx
|
||
This.Y = m.ty
|
||
This.W = evl(m.tw,0)
|
||
This.H = evl(m.th,0)
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE createfrompointsize && Set rectangle from separate point and size objects
|
||
lparameters toPoint as GpPoint, toSize as GpSize
|
||
|
||
do case
|
||
case empty(m.toPoint)
|
||
* point not passed, (0,0) origin
|
||
This.X = 0
|
||
This.Y = 0
|
||
case vartype(m.toPoint)='O'
|
||
This.GpPoint = m.toPoint
|
||
case vartype(m.toPoint)='C'
|
||
* Assume PointF
|
||
This.gdipPointF = m.toPoint
|
||
otherwise
|
||
error 11
|
||
return .F.
|
||
endcase
|
||
|
||
do case
|
||
case empty(m.toSize)
|
||
* size not passed, (0,0) size
|
||
This.W = 0
|
||
This.H = 0
|
||
case vartype(m.toSize)='O'
|
||
This.GpSize = m.toSize
|
||
case vartype(m.toSize)='C'
|
||
* Assume SizeF
|
||
This.gdipSizeF = m.toSize
|
||
otherwise
|
||
error 11
|
||
return .F.
|
||
endcase
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gdippointf_access
|
||
* Convert object into 2 x 4-byte integers
|
||
* Modify bintoc() output into little-endian with normal sign bit
|
||
return ;
|
||
bintoc(This.X,'F')+bintoc(This.Y,'F')
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gdippointf_assign
|
||
LPARAMETERS tcPointF
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcPointF)='C' and len(m.tcPointF)=8)
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
* Unpack structure
|
||
This.X = ctobin(substr(m.tcRectF,1,4),'N')
|
||
This.Y = ctobin(substr(m.tcRectF,5,4),'N')
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gdippoint_access
|
||
* Return size as 2 x 32-bit integers
|
||
* Modify bintoc() output into little-endian with normal sign bit
|
||
return ;
|
||
bintoc(This.X,'4RS')+bintoc(This.Y,'4RS')
|
||
ENDPROC
|
||
|
||
PROCEDURE gdippoint_assign
|
||
LPARAMETERS tcPoint as String
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcPoint)='C' and len(m.tcPoint)=8)
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
This.X = ctobin(substr(m.tcPoint,1,4),'RS')
|
||
This.Y = ctobin(substr(m.tcPoint,5,4),'RS')
|
||
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE gdiprectf_access
|
||
return ;
|
||
bintoc(This.X,'F') + bintoc(This.Y,'F') ;
|
||
+ bintoc(This.W,'F') + bintoc(This.H,'F')
|
||
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE gdiprectf_assign
|
||
LPARAMETERS tcRectF
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcRectF)='C' and len(m.tcRectF)=16)
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
* Unpack structure
|
||
This.X = ctobin(substr(m.tcRectF,1,4),'N')
|
||
This.Y = ctobin(substr(m.tcRectF,5,4),'N')
|
||
This.W = ctobin(substr(m.tcRectF,9,4),'N')
|
||
This.H = ctobin(substr(m.tcRectF,13,4),'N')
|
||
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE gdiprect_access
|
||
* Convert object into 4 x 4-byte integers
|
||
* Modify bintoc() output into little-endian with normal sign bit
|
||
return ;
|
||
bintoc(This.X,'4RS')+bintoc(This.Y,'4RS')+bintoc(This.W,'4RS')+bintoc(This.H,'4RS')
|
||
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE gdiprect_assign
|
||
LPARAMETERS tcRect
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcRect)='C' and len(m.tcRect)=16)
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
This.X = ctobin(substr(m.tcRect,1,4),'RS')
|
||
This.Y = ctobin(substr(m.tcRect,5,4),'RS')
|
||
This.W = ctobin(substr(m.tcRect,9,4),'RS')
|
||
This.H = ctobin(substr(m.tcRect,13,4),'RS')
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gdipsizef_access
|
||
* Convert object into 2 x 4-byte integers
|
||
* Modify bintoc() output into little-endian with normal sign bit
|
||
return ;
|
||
bintoc(This.W,'F')+bintoc(This.H,'F')
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gdipsizef_assign
|
||
LPARAMETERS tcSizeF
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcSizeF)='C' and len(m.tcSizeF)=8)
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
* Unpack structure
|
||
This.W = ctobin(substr(m.tcSizeF,1,4),'N')
|
||
This.H = ctobin(substr(m.tcSizeF,5,4),'N')
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gdipsize_access
|
||
* Return size as 2 x 32-bit integers
|
||
* Modify bintoc() output into little-endian with normal sign bit
|
||
return ;
|
||
bintoc(This.W,'4RS')+bintoc(This.H,'4RS')
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gdipsize_assign
|
||
LPARAMETERS tcSize as String
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcSize)='C' and len(m.tcSize)=8)
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
This.W = ctobin(substr(m.tcSize,1,4),'RS')
|
||
This.H = ctobin(substr(m.tcSize,5,4),'RS')
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gdirect_access
|
||
* Convert object into 4 x 4-byte integers
|
||
* Modify bintoc() output into little-endian with normal sign bit
|
||
return ;
|
||
bintoc(This.X,'4RS')+bintoc(This.Y,'4RS') ;
|
||
+ bintoc(This.X2,'4RS')+bintoc(This.Y2,'4RS')
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gdirect_assign
|
||
LPARAMETERS tcRect as string
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcRect)='C' and len(m.tcRect)=16)
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
This.X = ctobin(substr(m.tcRect,1,4),'RS')
|
||
This.Y = ctobin(substr(m.tcRect,5,4),'RS')
|
||
This.X2 = ctobin(substr(m.tcRect,9,4),'RS')
|
||
This.Y2 = ctobin(substr(m.tcRect,13,4),'RS')
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gppoint_access
|
||
RETURN This.ObjFactory( 'gprectange.gppoint_access', GDIPLUS_CLASS_POINT,This.X,This.Y)
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gppoint_assign
|
||
LPARAMETERS toPoint
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toPoint)='O' and pemstatus(m.toPoint,'X',5))
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.X = m.toPoint.X
|
||
This.Y = m.toPoint.Y
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gpsize_access
|
||
RETURN This.ObjFactory( 'gprectange.gpsize_access', GDIPLUS_CLASS_SIZE,This.W,This.H)
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE gpsize_assign
|
||
LPARAMETERS toSize
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toSize)='O' and pemstatus(m.toSize,'W',5))
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.W = m.toSize.W
|
||
This.H = m.toSize.H
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
lparameters tXorRectorPoint,tYorSize,tw,th
|
||
if not dodefault()
|
||
return .F.
|
||
endif
|
||
|
||
do case
|
||
case pcount()=0
|
||
* empty constructor - rectangle will be empty
|
||
case pcount()=1 and vartype(m.tXorRectorPoint)='O'
|
||
* Passed an object - presumably an existing Rect object
|
||
This.Clone(m.tXorRectorPoint)
|
||
case pcount()=1 and vartype(m.tXorRectorPoint)='C'
|
||
* Passed a string (structure)
|
||
* Rect or RectF? Assume RectF as this is preferred format
|
||
This.gdipRectF = m.tXorRectorPoint
|
||
case pcount()=2 and vartype(m.tXorRectorPoint)$'OC' and vartype(m.tYorSize)$'OC'
|
||
* Passed separate point and size objects?
|
||
This.CreateFromPointSize(m.tXorRectorPoint, m.tYorSize)
|
||
case pcount()>=4 ;
|
||
and vartype(m.tXorRectorPoint)='N' and vartype(m.tYorSize)='N' ;
|
||
and vartype(m.tw)='N' and vartype(m.th)='N'
|
||
* Separate components
|
||
This.Create(m.tXorRectorPoint,m.tYorSize,m.tw,m.th)
|
||
otherwise
|
||
error 11
|
||
return .F.
|
||
endcase
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE set && Set rectangle coordinates from individual components
|
||
lparameters tx as Number,ty as Number,tw as Number,th as Number
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tx)='N' and vartype(m.ty)='N' ;
|
||
and vartype(m.tw)$'LN' and vartype(m.th)$'LN')
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.X = m.tx
|
||
This.Y = m.ty
|
||
This.W = evl(m.tw,0)
|
||
This.H = evl(m.th,0)
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE x2_access
|
||
RETURN THIS.x+This.w
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE x2_assign
|
||
LPARAMETERS vNewVal
|
||
This.w = m.vNewVal - This.x
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE y2_access
|
||
RETURN THIS.y+This.h
|
||
ENDPROC
|
||
|
||
PROCEDURE y2_assign
|
||
LPARAMETERS vNewVal
|
||
This.h = m.vNewVal - This.y
|
||
|
||
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gpsize AS gpbase OF "_gdiplus.vcx" && Stores an ordered pair of numbers, typically the width and height of a rectangle.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: create && Set point from individual coordinates
|
||
*m: gdipsizef_access
|
||
*m: gdipsizef_assign
|
||
*m: gdipsize_access
|
||
*m: gdipsize_assign
|
||
*m: set && Set point coordinates from individual x,y values
|
||
*p: gdipsize && String representing the GDI+ Size structure (2 x 32bit integers)
|
||
*p: gdipsizef && String representing the GDI+ SizeF structure (2 x 32bit single-precision floats)
|
||
*p: h && height value
|
||
*p: w && width value
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
h = 0
|
||
Name = "gpsize"
|
||
w = 0
|
||
_memberdata = <VFPData>
|
||
<memberdata name="create" type="method" display="Create" favorites="True"/>
|
||
<memberdata name="set" type="method" display="Set" favorites="True"/>
|
||
<memberdata name="gdipsize" type="property" display="GdipSize" favorites="True"/>
|
||
<memberdata name="gdipsizef" type="property" display="GdipSizeF" favorites="True"/>
|
||
<memberdata name="w" type="property" display="w" favorites="True"/>
|
||
<memberdata name="h" type="property" display="h" favorites="True"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE clone
|
||
lparameters toOtherSize
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toOtherSize)='O' ;
|
||
and vartype(toOtherSize.W)='N' and vartype(toOtherSize.H)='N')
|
||
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.W = m.toOtherSize.W
|
||
This.H = m.toOtherSize.H
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE create && Set point from individual coordinates
|
||
lparameters tw,th
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tw)='N' and vartype(m.th)='N')
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.W = m.tw
|
||
This.H = m.th
|
||
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE gdipsizef_access
|
||
return ;
|
||
bintoc(This.W,'F') + bintoc(This.H,'F')
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE gdipsizef_assign
|
||
LPARAMETERS tcSizeF as String
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcSizeF)='C' and len(m.tcSizeF)=8)
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.W = ctobin(substr(m.tcSizeF,1,4),'N')
|
||
This.H = ctobin(substr(m.tcSizeF,5,4),'N')
|
||
|
||
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE gdipsize_access
|
||
* Convert object into 2 x 32-bit integers
|
||
* Modify bintoc() output into little-endian with normal sign bit
|
||
return ;
|
||
bintoc(This.W,'4RS')+bintoc(This.H,'4RS')
|
||
|
||
ENDPROC
|
||
|
||
PROTECTED PROCEDURE gdipsize_assign
|
||
LPARAMETERS tcSize as String
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tcSize)='C' and len(m.tcSize)=8)
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
|
||
This.W = ctobin(substr(m.tcSize,1,4),'RS')
|
||
This.H = ctobin(substr(m.tcSize,5,4),'RS')
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
lparameters tWorSize,th
|
||
if not dodefault()
|
||
return .F.
|
||
endif
|
||
|
||
do case
|
||
case pcount()=1 and vartype(m.tWorSize)='O'
|
||
* Passed an object - presumably an existing Size object
|
||
This.Clone(m.tWorSize)
|
||
case pcount()=1 and vartype(m.tWorSize)='C'
|
||
* Passed a string (structure)
|
||
* Assume SizeF as this is preferred format
|
||
This.gdipSizeF = m.tWorSize
|
||
case pcount()>=2
|
||
* Separate components
|
||
This.Create(m.tWorSize,m.th)
|
||
endcase
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE set && Set point coordinates from individual x,y values
|
||
lparameters tw,th
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tw)='N' and vartype(m.th)='N')
|
||
error 11 && Function argument
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
This.W = m.tw
|
||
This.H = m.th
|
||
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gpsolidbrush AS gpbrush OF "_gdiplus.vcx" && A brush object which fills with a a solid color.
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: brushcolor_access
|
||
*m: brushcolor_assign
|
||
*m: create && Create solid brush in given color
|
||
*p: brushcolor && Get or set color of a SolidBrush object
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
Name = "gpsolidbrush"
|
||
_memberdata = <VFPData>
|
||
<memberdata name="brushcolor" type="property" display="BrushColor" favorites="true"/>
|
||
<memberdata name="create" type="method" display="Create" favorites="true"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE brushcolor_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
|
||
declare integer GdipGetSolidFillColor in gdiplus.dll ;
|
||
integer, integer @
|
||
|
||
local nARGB
|
||
nARGB = 0
|
||
This.gdipStatus = GdipGetSolidFillColor( This.gdipHandle, @nARGB )
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nARGB,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE brushcolor_assign
|
||
LPARAMETERS tvColor
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tvColor)$'ON')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare Integer GdipSetSolidFillColor in gdiplus.dll ;
|
||
integer nPen, integer nColor
|
||
|
||
This.gdipStatus = GdipSetSolidFillColor( This.gdipHandle,iif(vartype(m.tvColor)='O',m.tvColor.ARGB,m.tvColor))
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE create && Create solid brush in given color
|
||
lparameters tvColor
|
||
* tvColor may be ARGB or a Color object
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tvColor)$'ONL')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
Declare Integer GdipCreateSolidFill In GDIPlus.Dll ;
|
||
integer nColor, Integer @nBrush
|
||
This.gdipStatus = GdipCreateSolidFill( ;
|
||
icase(vartype(m.tvColor)='O',m.tvColor.ARGB,vartype(m.tvColor)='N',m.tvColor,0xFF000000) ;
|
||
, @nHandle)
|
||
This.SetHandle(m.nHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
lparameters tvColor
|
||
if not dodefault()
|
||
return .F.
|
||
endif
|
||
if pcount()>0
|
||
return This.Create(m.tvColor)
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|
||
|
||
DEFINE CLASS gpstringformat AS gpobject OF "_gdiplus.vcx" && Object which encapsulates text layout information (such as alignment and line spacing) and display manipulations (such as ellipsis insertion and national digit substitution).
|
||
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||
|
||
#INCLUDE "gdiplus.h"
|
||
*<DefinedPropArrayMethod>
|
||
*m: alignment_access
|
||
*m: alignment_assign
|
||
*m: create && Create StringFormat with optional flags and language
|
||
*m: formatflags_access
|
||
*m: formatflags_assign
|
||
*m: getgenericdefault && Get generic default string format (.NET: SystemDrawing.StringFormat.GenericDefault)
|
||
*m: getgenerictypographic && Get generic typographic StringFormat
|
||
*m: hotkeyprefix_access
|
||
*m: hotkeyprefix_assign
|
||
*m: linealignment_access
|
||
*m: linealignment_assign
|
||
*m: trimming_access
|
||
*m: trimming_assign
|
||
*p: alignment && Text alignment information.
|
||
*p: formatflags && Formatting Information (StringFormatFlags enumeration)
|
||
*p: hotkeyprefix && Set GpHotkeyPrefix object (write-only?)
|
||
*p: linealignment && Line alignment
|
||
*p: trimming && String trimming
|
||
*</DefinedPropArrayMethod>
|
||
|
||
*<PropValue>
|
||
Name = "gpstringformat"
|
||
_memberdata = <VFPData>
|
||
<memberdata name="create" type="method" display="Create"/>
|
||
<memberdata name="getgenericdefault" type="method" display="GetGenericDefault"/>
|
||
<memberdata name="getgenerictypographic" type="method" display="GetGenericTypographic"/>
|
||
<memberdata name="alignment" type="property" display="Alignment"/>
|
||
<memberdata name="formatflags" type="property" display="FormatFlags"/>
|
||
<memberdata name="hotkeyprefix" type="property" display="HotkeyPrefix"/>
|
||
<memberdata name="linealignment" type="property" display="LineAlignment"/>
|
||
<memberdata name="trimming" type="property" display="Trimming"/>
|
||
</VFPData>
|
||
*</PropValue>
|
||
|
||
PROCEDURE alignment_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetStringFormatAlign in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nAlignment
|
||
nAlignment = cast(null as I) && predefined error value
|
||
This.gdipStatus = GdipGetStringFormatAlign( This.gdipHandle, @nAlignment)
|
||
return m.nAlignment
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE alignment_assign
|
||
LPARAMETERS tnAlignment
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnAlignment)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
if !This.gdipOwnsThisHandle
|
||
error _GDIPLUS_GDIPNOTOWNED_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetStringFormatAlign in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetStringFormatAlign( This.gdipHandle,m.tnAlignment)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE clone
|
||
lparameters toStringFormat as GpStringFormat
|
||
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.toStringFormat)='O' and m.toStringFormat.gdipHandle<>0)
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
Declare Integer GdipCloneStringFormat In GDIPlus.Dll ;
|
||
integer nOriginal, integer @nClone
|
||
This.GdipStatus = GdipCloneStringFormat( ;
|
||
m.toStringFormat.gdipHandle ;
|
||
, @nHandle)
|
||
this.gdipHandle= m.nHandle
|
||
This.gdipOwnsThisHandle = .T.
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE create && Create StringFormat with optional flags and language
|
||
lparameters tnFlags, tnLangID
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
Declare Integer GdipCreateStringFormat In GDIPlus.Dll ;
|
||
integer,integer,integer @nHandle
|
||
|
||
This.gdipStatus = GdipCreateStringFormat ( ;
|
||
evl(tnFlags,0) ;
|
||
, evl(m.tnLangID,0) ;
|
||
, @nHandle )
|
||
This.SetHandle(m.nHandle,.T.)
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
ENDPROC
|
||
|
||
PROCEDURE Destroy
|
||
if This.GdipHandle!=0 and This.gdipOwnsThisHandle
|
||
Declare Integer GdipDeleteStringFormat In GDIPlus.Dll ;
|
||
integer nStringFormat
|
||
GdipDeleteStringFormat(This.GdipHandle)
|
||
This.GdipHandle=0
|
||
This.gdipOwnsThisHandle=.F.
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE formatflags_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetStringFormatFlags in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nFlags
|
||
nFlags = 0
|
||
This.gdipStatus = GdipGetStringFormatFlags( This.gdipHandle, @nFlags)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nFlags,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE formatflags_assign
|
||
LPARAMETERS tnFlags
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnFlags)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
if !This.gdipOwnsThisHandle
|
||
error _GDIPLUS_GDIPNOTOWNED_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetStringFormatFlags in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetStringFormatFlags( This.gdipHandle,m.tnFlags)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE getgenericdefault && Get generic default string format (.NET: SystemDrawing.StringFormat.GenericDefault)
|
||
lparameters tlMakeClone
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
Declare Integer GdipStringFormatGetGenericDefault In GDIPlus.Dll ;
|
||
integer @nHandle
|
||
This.gdipStatus = GdipStringFormatGetGenericDefault (@nHandle )
|
||
if This.gdipStatus <> GDIPLUS_STATUS_OK
|
||
return .F.
|
||
endif
|
||
|
||
if m.tlMakeClone
|
||
Declare Integer GdipCloneStringFormat In GDIPlus.Dll ;
|
||
integer nOriginal, integer @nClone
|
||
This.GdipStatus = GdipCloneStringFormat( ;
|
||
(m.nHandle) ;
|
||
, @nHandle)
|
||
if GDIPLUS_STATUS_OK == This.GdipStatus
|
||
This.SetHandle(m.nHandle,.T.)
|
||
endif
|
||
else
|
||
This.SetHandle(m.nHandle,.F.)
|
||
endif
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
ENDPROC
|
||
|
||
PROCEDURE getgenerictypographic && Get generic typographic StringFormat
|
||
lparameters tlMakeClone
|
||
this.Destroy()
|
||
local nHandle
|
||
nHandle = 0
|
||
Declare Integer GdipStringFormatGetGenericTypographic In GDIPlus.Dll ;
|
||
integer @nHandle
|
||
This.gdipStatus = GdipStringFormatGetGenericTypographic(@nHandle )
|
||
if This.gdipStatus <> GDIPLUS_STATUS_OK
|
||
return .F.
|
||
endif
|
||
|
||
if m.tlMakeClone
|
||
Declare Integer GdipCloneStringFormat In GDIPlus.Dll ;
|
||
integer nOriginal, integer @nClone
|
||
|
||
This.GdipStatus = GdipCloneStringFormat( ;
|
||
(m.nHandle) ;
|
||
, @nHandle)
|
||
if GDIPLUS_STATUS_OK == This.GdipStatus
|
||
This.SetHandle(m.nHandle,.T.)
|
||
endif
|
||
else
|
||
This.SetHandle(m.nHandle,.F.)
|
||
endif
|
||
return GDIPLUS_STATUS_OK == This.GdipStatus
|
||
ENDPROC
|
||
|
||
PROCEDURE hotkeyprefix_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetStringFormatHotkeyPrefix in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nPrefix
|
||
nPrefix = 0
|
||
This.gdipStatus = GdipGetStringFormatHotkeyPrefix( This.gdipHandle, @nPrefix)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nPrefix,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE hotkeyprefix_assign
|
||
LPARAMETERS tnPrefix
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnPrefix)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
if !This.gdipOwnsThisHandle
|
||
error _GDIPLUS_GDIPNOTOWNED_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetStringFormatHotkeyPrefix in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetStringFormatHotkeyPrefix( This.gdipHandle,m.tnPrefix)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE Init
|
||
lparameters tnFlags, tnLangID
|
||
|
||
if not dodefault()
|
||
return .F.
|
||
endif
|
||
|
||
if pcount()>0
|
||
return This.Create(m.tnFlags,m.tnLangID)
|
||
endif
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE linealignment_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetStringFormatLineAlign in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nAlignment
|
||
nAlignment = 0
|
||
This.gdipStatus = GdipGetStringFormatLineAlign( This.gdipHandle, @nAlignment)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nAlignment,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE linealignment_assign
|
||
LPARAMETERS tnAlignment
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnAlignment)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
if !This.gdipOwnsThisHandle
|
||
error _GDIPLUS_GDIPNOTOWNED_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetStringFormatLineAlign in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetStringFormatLineAlign( This.gdipHandle,m.tnAlignment)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE trimming_access
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return cast(null as I)
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipGetStringFormatTrimming in gdiplus.dll ;
|
||
integer nGraphics, integer @
|
||
local nMode
|
||
nMode = 0
|
||
This.gdipStatus = GdipGetStringFormatTrimming( This.gdipHandle, @nMode)
|
||
return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nMode,cast(null as I))
|
||
|
||
ENDPROC
|
||
|
||
PROCEDURE trimming_assign
|
||
LPARAMETERS tnMode
|
||
|
||
#if GDIPLUS_CHECK_PARAMS
|
||
if !(vartype(m.tnMode)='N')
|
||
error 11 && Function argument
|
||
This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
#if GDIPLUS_CHECK_OBJECT
|
||
if This.gdipHandle==0
|
||
error _GDIPLUS_NOGDIPOBJECT_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
if !This.gdipOwnsThisHandle
|
||
error _GDIPLUS_GDIPNOTOWNED_LOC
|
||
This.gdipStatus = GDIPLUS_STATUS_GenericError
|
||
return .F.
|
||
endif
|
||
#endif
|
||
|
||
declare integer GdipSetStringFormatTrimming in gdiplus.dll ;
|
||
integer nGraphics, integer
|
||
|
||
This.gdipStatus = GdipSetStringFormatTrimming( This.gdipHandle,m.tnMode)
|
||
return GDIPLUS_STATUS_OK == This.gdipStatus
|
||
|
||
ENDPROC
|
||
|
||
ENDDEFINE
|