From: U-SLAVA-DFB8FF805\Slava Date: Thu, 2 Apr 2009 18:05:26 +0000 (-0500) Subject: More progress on Uniscribe X-Git-Tag: 0.94~2170^2~42^2~11 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=9c3054c84a5316e538a7345e491e0f935559ca9c More progress on Uniscribe --- diff --git a/README.txt b/README.txt index bd9da0ab2b..c5d53de842 100755 --- a/README.txt +++ b/README.txt @@ -113,12 +113,6 @@ the command prompt using the console application: factor.com -i=boot..image -Before bootstrapping, you will need to download the DLLs for the Pango -text rendering library. The required DLLs are listed in -build-support/dlls.txt and are available from the following location: - - - Once bootstrapped, double-clicking factor.exe or factor.com starts the Factor UI. diff --git a/basis/alien/destructors/destructors.factor b/basis/alien/destructors/destructors.factor old mode 100644 new mode 100755 index 1c5c975fe6..374d6425c4 --- a/basis/alien/destructors/destructors.factor +++ b/basis/alien/destructors/destructors.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: functors destructors accessors kernel parser words -combinators.smart ; +effects generalizations sequences ; IN: alien.destructors SLOT: alien @@ -12,6 +12,7 @@ F-destructor DEFINES-CLASS ${F}-destructor DEFINES <${F}-destructor> &F DEFINES &${F} |F DEFINES |${F} +N [ F stack-effect out>> length ] WHERE @@ -19,7 +20,7 @@ TUPLE: F-destructor alien disposed ; : ( alien -- destructor ) f F-destructor boa ; inline -M: F-destructor dispose* [ alien>> F ] drop-outputs ; +M: F-destructor dispose* alien>> F N ndrop ; : &F ( alien -- alien ) dup &dispose drop ; inline diff --git a/basis/images/normalization/normalization.factor b/basis/images/normalization/normalization.factor old mode 100644 new mode 100755 index bcdf841b42..dcdf39a53e --- a/basis/images/normalization/normalization.factor +++ b/basis/images/normalization/normalization.factor @@ -61,6 +61,18 @@ M: ARGB normalize-component-order* M: ABGR normalize-component-order* drop ARGB>RGBA BGRA>RGBA ; +: fix-XBGR ( bitmap -- bitmap' ) + dup 4 [ [ 255 0 ] dip set-nth ] each ; + +M: XBGR normalize-component-order* + drop fix-XBGR ABGR normalize-component-order* ; + +: fix-BGRX ( bitmap -- bitmap' ) + dup 4 [ [ 255 3 ] dip set-nth ] each ; + +M: BGRX normalize-component-order* + drop fix-BGRX BGRA normalize-component-order* ; + : normalize-scan-line-order ( image -- image ) dup upside-down?>> [ dup dim>> first 4 * '[ diff --git a/basis/opengl/textures/textures.factor b/basis/opengl/textures/textures.factor old mode 100644 new mode 100755 index 810aaa2c9c..67094200d1 --- a/basis/opengl/textures/textures.factor +++ b/basis/opengl/textures/textures.factor @@ -17,6 +17,7 @@ M: BGR component-order>format drop GL_BGR GL_UNSIGNED_BYTE ; M: RGBA component-order>format drop GL_RGBA GL_UNSIGNED_BYTE ; M: ARGB component-order>format drop GL_BGRA_EXT GL_UNSIGNED_INT_8_8_8_8_REV ; M: BGRA component-order>format drop GL_BGRA_EXT GL_UNSIGNED_BYTE ; +M: BGRX component-order>format drop GL_BGRA_EXT GL_UNSIGNED_BYTE ; GENERIC: draw-texture ( texture -- ) diff --git a/basis/ui/backend/windows/windows.factor b/basis/ui/backend/windows/windows.factor index 12ce2bed80..e405efb540 100755 --- a/basis/ui/backend/windows/windows.factor +++ b/basis/ui/backend/windows/windows.factor @@ -433,12 +433,7 @@ M: windows-ui-backend do-events style 0 ex-style AdjustWindowRectEx win32-error=0/f ; : make-RECT ( world -- RECT ) - [ window-loc>> dup ] [ dim>> ] bi v+ - "RECT" - over first over set-RECT-right - swap second over set-RECT-bottom - over first over set-RECT-left - swap second over set-RECT-top ; + [ window-loc>> ] [ dim>> ] bi ; : default-position-RECT ( RECT -- ) dup get-RECT-dimensions [ 2drop ] 2dip diff --git a/basis/ui/text/core-text/core-text.factor b/basis/ui/text/core-text/core-text.factor old mode 100644 new mode 100755 index 3704189e48..514d918e2f --- a/basis/ui/text/core-text/core-text.factor +++ b/basis/ui/text/core-text/core-text.factor @@ -10,9 +10,6 @@ IN: ui.text.core-text SINGLETON: core-text-renderer -M: core-text-renderer init-text-rendering - >>text-handle drop ; - M: core-text-renderer string-dim [ " " string-dim { 0 1 } v* ] [ cached-line dim>> ] diff --git a/basis/ui/text/pango/pango.factor b/basis/ui/text/pango/pango.factor index 017a4b2cf2..3f4808a208 100755 --- a/basis/ui/text/pango/pango.factor +++ b/basis/ui/text/pango/pango.factor @@ -7,9 +7,6 @@ IN: ui.text.pango SINGLETON: pango-renderer -M: pango-renderer init-text-rendering - >>text-handle drop ; - M: pango-renderer string-dim [ " " string-dim { 0 1 } v* ] [ cached-layout logical-rect>> dim>> [ >integer ] map ] if-empty ; diff --git a/basis/ui/text/text-tests.factor b/basis/ui/text/text-tests.factor old mode 100644 new mode 100755 index 939e262997..7ee901dc80 --- a/basis/ui/text/text-tests.factor +++ b/basis/ui/text/text-tests.factor @@ -1,6 +1,22 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: tools.test ui.text fonts ; +USING: tools.test ui.text fonts math accessors kernel sequences ; IN: ui.text.tests -[ 0.0 ] [ 0 sans-serif-font "aaa" offset>x ] unit-test +[ t ] [ 0 sans-serif-font "aaa" offset>x zero? ] unit-test +[ t ] [ 1 sans-serif-font "aaa" offset>x 0.0 > ] unit-test +[ t ] [ 3 sans-serif-font "aaa" offset>x 0.0 > ] unit-test +[ t ] [ 1 monospace-font "a" offset>x 0.0 > ] unit-test +[ 0 ] [ 0 sans-serif-font "aaa" x>offset ] unit-test +[ 3 ] [ 100 sans-serif-font "aaa" x>offset ] unit-test +[ 0 ] [ 0 sans-serif-font "" x>offset ] unit-test + +[ t ] [ + sans-serif-font "aaa" line-metrics + [ [ ascent>> ] [ descent>> ] bi + ] [ height>> ] bi = +] unit-test + +[ f ] [ sans-serif-font "\0a" text-dim first zero? ] unit-test +[ t ] [ sans-serif-font "" text-dim first zero? ] unit-test + +[ f ] [ sans-serif-font font-metrics height>> zero? ] unit-test diff --git a/basis/ui/text/text.factor b/basis/ui/text/text.factor old mode 100644 new mode 100755 index ebf4b9cce0..d787fe8ea9 --- a/basis/ui/text/text.factor +++ b/basis/ui/text/text.factor @@ -1,17 +1,16 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel arrays sequences math math.order opengl opengl.gl -strings fonts colors accessors namespaces ui.gadgets.worlds ; +USING: kernel arrays sequences math math.order cache opengl +opengl.gl strings fonts colors accessors namespaces +ui.gadgets.worlds ; IN: ui.text > [ dup init-text-rendering ] unless + dup text-handle>> [ >>text-handle ] unless text-handle>> ; HOOK: flush-layout-cache font-renderer ( -- ) @@ -79,7 +78,7 @@ USING: vocabs.loader namespaces system combinators ; "ui-backend" get [ { { [ os macosx? ] [ "core-text" ] } - { [ os windows? ] [ "pango" ] } + { [ os windows? ] [ "uniscribe" ] } { [ os unix? ] [ "pango" ] } } cond ] unless* "ui.text." prepend require \ No newline at end of file diff --git a/basis/ui/text/uniscribe/uniscribe.factor b/basis/ui/text/uniscribe/uniscribe.factor new file mode 100755 index 0000000000..f7d4207927 --- /dev/null +++ b/basis/ui/text/uniscribe/uniscribe.factor @@ -0,0 +1,41 @@ +! Copyright (C) 2009 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors assocs cache kernel math.vectors sequences +namespaces opengl.textures ui.text ui.text.private ui.gadgets.worlds +windows.uniscribe ; +IN: ui.text.uniscribe + +SINGLETON: uniscribe-renderer + +M: uniscribe-renderer string-dim + [ " " string-dim { 0 1 } v* ] + [ cached-script-string size>> ] if-empty ; + +M: uniscribe-renderer flush-layout-cache + cached-script-strings get purge-cache ; + +: rendered-script-string ( font string -- texture ) + world get world-text-handle + [ cached-script-string [ image>> ] [ text-position vneg ] bi ] + 2cache ; + +M: uniscribe-renderer draw-string ( font string -- ) + [ drop ] [ rendered-script-string draw-texture ] if-empty ; + +M: uniscribe-renderer x>offset ( x font string -- n ) + [ 2drop 0 ] [ + cached-script-string x>line-offset drop + ] if-empty ; + +M: uniscribe-renderer offset>x ( n font string -- x ) + [ 2drop 0 ] [ cached-script-string line-offset>x ] if-empty ; + +M: uniscribe-renderer font-metrics ( font -- metrics ) + " " cached-script-string metrics>> clone f >>width ; + +M: uniscribe-renderer line-metrics ( font string -- metrics ) + [ " " line-metrics clone 0 >>width ] + [ cached-script-string metrics>> 50 >>width 10 >>cap-height 10 >>x-height ] + if-empty ; + +uniscribe-renderer font-renderer set-global diff --git a/basis/windows/fonts/fonts.factor b/basis/windows/fonts/fonts.factor new file mode 100755 index 0000000000..b9fb48d840 --- /dev/null +++ b/basis/windows/fonts/fonts.factor @@ -0,0 +1,37 @@ +USING: assocs memoize locals kernel accessors init fonts +combinators windows windows.types windows.gdi32 ; +IN: windows.fonts + +: windows-font-name ( string -- string' ) + H{ + { "sans-serif" "Tahoma" } + { "serif" "Times New Roman" } + { "monospace" "Courier New" } + } at-default ; + +MEMO:: (cache-font) ( font -- HFONT ) + font size>> ! nHeight + 0 0 0 ! nWidth, nEscapement, nOrientation + font bold?>> FW_BOLD FW_NORMAL ? ! fnWeight + font italic?>> TRUE FALSE ? ! fdwItalic + FALSE ! fdwUnderline + FALSE ! fdWStrikeOut + DEFAULT_CHARSET ! fdwCharSet + OUT_OUTLINE_PRECIS ! fdwOutputPrecision + CLIP_DEFAULT_PRECIS ! fdwClipPrecision + DEFAULT_QUALITY ! fdwQuality + DEFAULT_PITCH ! fdwPitchAndFamily + font name>> windows-font-name + CreateFont + dup win32-error=0/f ; + +: cache-font ( font -- HFONT ) strip-font-colors (cache-font) ; + +[ \ (cache-font) reset-memoized ] "windows.fonts" add-init-hook + +: TEXTMETRIC>metrics ( TEXTMETRIC -- metrics ) + [ metrics new 0 >>width ] dip { + [ TEXTMETRICW-tmHeight >>height ] + [ TEXTMETRICW-tmAscent >>ascent ] + [ TEXTMETRICW-tmDescent >>descent ] + } cleave ; diff --git a/basis/windows/gdi32/gdi32.factor b/basis/windows/gdi32/gdi32.factor index 2281255a4f..549286d4f0 100755 --- a/basis/windows/gdi32/gdi32.factor +++ b/basis/windows/gdi32/gdi32.factor @@ -1,37 +1,1272 @@ ! Copyright (C) 2005, 2006 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: alien alien.syntax alien.destructors kernel windows.types ; +USING: alien alien.syntax alien.destructors kernel windows.types +math.bitwise ; IN: windows.gdi32 -! Stock Logical Objects -CONSTANT: WHITE_BRUSH 0 -CONSTANT: LTGRAY_BRUSH 1 -CONSTANT: GRAY_BRUSH 2 -CONSTANT: DKGRAY_BRUSH 3 -CONSTANT: BLACK_BRUSH 4 -CONSTANT: NULL_BRUSH 5 -ALIAS: HOLLOW_BRUSH NULL_BRUSH -CONSTANT: WHITE_PEN 6 -CONSTANT: BLACK_PEN 7 -CONSTANT: NULL_PEN 8 -CONSTANT: OEM_FIXED_FONT 10 -CONSTANT: ANSI_FIXED_FONT 11 -CONSTANT: ANSI_VAR_FONT 12 -CONSTANT: SYSTEM_FONT 13 +CONSTANT: BI_RGB 0 +CONSTANT: BI_RLE8 1 +CONSTANT: BI_RLE4 2 +CONSTANT: BI_BITFIELDS 3 +CONSTANT: BI_JPEG 4 +CONSTANT: BI_PNG 5 +CONSTANT: LF_FACESIZE 32 +CONSTANT: LF_FULLFACESIZE 64 +CONSTANT: CA_NEGATIVE 1 +CONSTANT: CA_LOG_FILTER 2 +CONSTANT: ILLUMINANT_DEVICE_DEFAULT 0 +CONSTANT: ILLUMINANT_A 1 +CONSTANT: ILLUMINANT_B 2 +CONSTANT: ILLUMINANT_C 3 +CONSTANT: ILLUMINANT_D50 4 +CONSTANT: ILLUMINANT_D55 5 +CONSTANT: ILLUMINANT_D65 6 +CONSTANT: ILLUMINANT_D75 7 +CONSTANT: ILLUMINANT_F2 8 +ALIAS: ILLUMINANT_MAX_INDEX ILLUMINANT_F2 +ALIAS: ILLUMINANT_TUNGSTEN ILLUMINANT_A +ALIAS: ILLUMINANT_DAYLIGHT ILLUMINANT_C +ALIAS: ILLUMINANT_FLUORESCENT ILLUMINANT_F2 +ALIAS: ILLUMINANT_NTSC ILLUMINANT_C +CONSTANT: RGB_GAMMA_MIN 2500 +CONSTANT: RGB_GAMMA_MAX 65000 +CONSTANT: REFERENCE_WHITE_MIN 6000 +CONSTANT: REFERENCE_WHITE_MAX 10000 +CONSTANT: REFERENCE_BLACK_MIN 0 +CONSTANT: REFERENCE_BLACK_MAX 4000 +CONSTANT: COLOR_ADJ_MIN -100 +CONSTANT: COLOR_ADJ_MAX 100 +CONSTANT: CCHDEVICENAME 32 +CONSTANT: CCHFORMNAME 32 +CONSTANT: DI_COMPAT 4 +CONSTANT: DI_DEFAULTSIZE 8 +CONSTANT: DI_IMAGE 2 +CONSTANT: DI_MASK 1 +CONSTANT: DI_NORMAL 3 +CONSTANT: DI_APPBANDING 1 +CONSTANT: EMR_HEADER 1 +CONSTANT: EMR_POLYBEZIER 2 +CONSTANT: EMR_POLYGON 3 +CONSTANT: EMR_POLYLINE 4 +CONSTANT: EMR_POLYBEZIERTO 5 +CONSTANT: EMR_POLYLINETO 6 +CONSTANT: EMR_POLYPOLYLINE 7 +CONSTANT: EMR_POLYPOLYGON 8 +CONSTANT: EMR_SETWINDOWEXTEX 9 +CONSTANT: EMR_SETWINDOWORGEX 10 +CONSTANT: EMR_SETVIEWPORTEXTEX 11 +CONSTANT: EMR_SETVIEWPORTORGEX 12 +CONSTANT: EMR_SETBRUSHORGEX 13 +CONSTANT: EMR_EOF 14 +CONSTANT: EMR_SETPIXELV 15 +CONSTANT: EMR_SETMAPPERFLAGS 16 +CONSTANT: EMR_SETMAPMODE 17 +CONSTANT: EMR_SETBKMODE 18 +CONSTANT: EMR_SETPOLYFILLMODE 19 +CONSTANT: EMR_SETROP2 20 +CONSTANT: EMR_SETSTRETCHBLTMODE 21 +CONSTANT: EMR_SETTEXTALIGN 22 +CONSTANT: EMR_SETCOLORADJUSTMENT 23 +CONSTANT: EMR_SETTEXTCOLOR 24 +CONSTANT: EMR_SETBKCOLOR 25 +CONSTANT: EMR_OFFSETCLIPRGN 26 +CONSTANT: EMR_MOVETOEX 27 +CONSTANT: EMR_SETMETARGN 28 +CONSTANT: EMR_EXCLUDECLIPRECT 29 +CONSTANT: EMR_INTERSECTCLIPRECT 30 +CONSTANT: EMR_SCALEVIEWPORTEXTEX 31 +CONSTANT: EMR_SCALEWINDOWEXTEX 32 +CONSTANT: EMR_SAVEDC 33 +CONSTANT: EMR_RESTOREDC 34 +CONSTANT: EMR_SETWORLDTRANSFORM 35 +CONSTANT: EMR_MODIFYWORLDTRANSFORM 36 +CONSTANT: EMR_SELECTOBJECT 37 +CONSTANT: EMR_CREATEPEN 38 +CONSTANT: EMR_CREATEBRUSHINDIRECT 39 +CONSTANT: EMR_DELETEOBJECT 40 +CONSTANT: EMR_ANGLEARC 41 +CONSTANT: EMR_ELLIPSE 42 +CONSTANT: EMR_RECTANGLE 43 +CONSTANT: EMR_ROUNDRECT 44 +CONSTANT: EMR_ARC 45 +CONSTANT: EMR_CHORD 46 +CONSTANT: EMR_PIE 47 +CONSTANT: EMR_SELECTPALETTE 48 +CONSTANT: EMR_CREATEPALETTE 49 +CONSTANT: EMR_SETPALETTEENTRIES 50 +CONSTANT: EMR_RESIZEPALETTE 51 +CONSTANT: EMR_REALIZEPALETTE 52 +CONSTANT: EMR_EXTFLOODFILL 53 +CONSTANT: EMR_LINETO 54 +CONSTANT: EMR_ARCTO 55 +CONSTANT: EMR_POLYDRAW 56 +CONSTANT: EMR_SETARCDIRECTION 57 +CONSTANT: EMR_SETMITERLIMIT 58 +CONSTANT: EMR_BEGINPATH 59 +CONSTANT: EMR_ENDPATH 60 +CONSTANT: EMR_CLOSEFIGURE 61 +CONSTANT: EMR_FILLPATH 62 +CONSTANT: EMR_STROKEANDFILLPATH 63 +CONSTANT: EMR_STROKEPATH 64 +CONSTANT: EMR_FLATTENPATH 65 +CONSTANT: EMR_WIDENPATH 66 +CONSTANT: EMR_SELECTCLIPPATH 67 +CONSTANT: EMR_ABORTPATH 68 +CONSTANT: EMR_GDICOMMENT 70 +CONSTANT: EMR_FILLRGN 71 +CONSTANT: EMR_FRAMERGN 72 +CONSTANT: EMR_INVERTRGN 73 +CONSTANT: EMR_PAINTRGN 74 +CONSTANT: EMR_EXTSELECTCLIPRGN 75 +CONSTANT: EMR_BITBLT 76 +CONSTANT: EMR_STRETCHBLT 77 +CONSTANT: EMR_MASKBLT 78 +CONSTANT: EMR_PLGBLT 79 +CONSTANT: EMR_SETDIBITSTODEVICE 80 +CONSTANT: EMR_STRETCHDIBITS 81 +CONSTANT: EMR_EXTCREATEFONTINDIRECTW 82 +CONSTANT: EMR_EXTTEXTOUTA 83 +CONSTANT: EMR_EXTTEXTOUTW 84 +CONSTANT: EMR_POLYBEZIER16 85 +CONSTANT: EMR_POLYGON16 86 +CONSTANT: EMR_POLYLINE16 87 +CONSTANT: EMR_POLYBEZIERTO16 88 +CONSTANT: EMR_POLYLINETO16 89 +CONSTANT: EMR_POLYPOLYLINE16 90 +CONSTANT: EMR_POLYPOLYGON16 91 +CONSTANT: EMR_POLYDRAW16 92 +CONSTANT: EMR_CREATEMONOBRUSH 93 +CONSTANT: EMR_CREATEDIBPATTERNBRUSHPT 94 +CONSTANT: EMR_EXTCREATEPEN 95 +CONSTANT: EMR_POLYTEXTOUTA 96 +CONSTANT: EMR_POLYTEXTOUTW 97 +CONSTANT: EMR_SETICMMODE 98 +CONSTANT: EMR_CREATECOLORSPACE 99 +CONSTANT: EMR_SETCOLORSPACE 100 +CONSTANT: EMR_DELETECOLORSPACE 101 +CONSTANT: EMR_GLSRECORD 102 +CONSTANT: EMR_GLSBOUNDEDRECORD 103 +CONSTANT: EMR_PIXELFORMAT 104 +CONSTANT: ENHMETA_SIGNATURE 1179469088 +CONSTANT: EPS_SIGNATURE HEX: 46535045 +CONSTANT: FR_PRIVATE HEX: 10 +CONSTANT: FR_NOT_ENUM HEX: 20 +CONSTANT: META_SETBKCOLOR HEX: 201 +CONSTANT: META_SETBKMODE HEX: 102 +CONSTANT: META_SETMAPMODE HEX: 103 +CONSTANT: META_SETROP2 HEX: 104 +CONSTANT: META_SETRELABS HEX: 105 +CONSTANT: META_SETPOLYFILLMODE HEX: 106 +CONSTANT: META_SETSTRETCHBLTMODE HEX: 107 +CONSTANT: META_SETTEXTCHAREXTRA HEX: 108 +CONSTANT: META_SETTEXTCOLOR HEX: 209 +CONSTANT: META_SETTEXTJUSTIFICATION HEX: 20A +CONSTANT: META_SETWINDOWORG HEX: 20B +CONSTANT: META_SETWINDOWEXT HEX: 20C +CONSTANT: META_SETVIEWPORTORG HEX: 20D +CONSTANT: META_SETVIEWPORTEXT HEX: 20E +CONSTANT: META_OFFSETWINDOWORG HEX: 20F +CONSTANT: META_SCALEWINDOWEXT HEX: 410 +CONSTANT: META_OFFSETVIEWPORTORG HEX: 211 +CONSTANT: META_SCALEVIEWPORTEXT HEX: 412 +CONSTANT: META_LINETO HEX: 213 +CONSTANT: META_MOVETO HEX: 214 +CONSTANT: META_EXCLUDECLIPRECT HEX: 415 +CONSTANT: META_INTERSECTCLIPRECT HEX: 416 +CONSTANT: META_ARC HEX: 817 +CONSTANT: META_ELLIPSE HEX: 418 +CONSTANT: META_FLOODFILL HEX: 419 +CONSTANT: META_PIE HEX: 81A +CONSTANT: META_RECTANGLE HEX: 41B +CONSTANT: META_ROUNDRECT HEX: 61C +CONSTANT: META_PATBLT HEX: 61D +CONSTANT: META_SAVEDC HEX: 1E +CONSTANT: META_SETPIXEL HEX: 41F +CONSTANT: META_OFFSETCLIPRGN HEX: 220 +CONSTANT: META_TEXTOUT HEX: 521 +CONSTANT: META_BITBLT HEX: 922 +CONSTANT: META_STRETCHBLT HEX: b23 +CONSTANT: META_POLYGON HEX: 324 +CONSTANT: META_POLYLINE HEX: 325 +CONSTANT: META_ESCAPE HEX: 626 +CONSTANT: META_RESTOREDC HEX: 127 +CONSTANT: META_FILLREGION HEX: 228 +CONSTANT: META_FRAMEREGION HEX: 429 +CONSTANT: META_INVERTREGION HEX: 12A +CONSTANT: META_PAINTREGION HEX: 12B +CONSTANT: META_SELECTCLIPREGION HEX: 12C +CONSTANT: META_SELECTOBJECT HEX: 12D +CONSTANT: META_SETTEXTALIGN HEX: 12E +CONSTANT: META_CHORD HEX: 830 +CONSTANT: META_SETMAPPERFLAGS HEX: 231 +CONSTANT: META_EXTTEXTOUT HEX: a32 +CONSTANT: META_SETDIBTODEV HEX: d33 +CONSTANT: META_SELECTPALETTE HEX: 234 +CONSTANT: META_REALIZEPALETTE HEX: 35 +CONSTANT: META_ANIMATEPALETTE HEX: 436 +CONSTANT: META_SETPALENTRIES HEX: 37 +CONSTANT: META_POLYPOLYGON HEX: 538 +CONSTANT: META_RESIZEPALETTE HEX: 139 +CONSTANT: META_DIBBITBLT HEX: 940 +CONSTANT: META_DIBSTRETCHBLT HEX: b41 +CONSTANT: META_DIBCREATEPATTERNBRUSH HEX: 142 +CONSTANT: META_STRETCHDIB HEX: f43 +CONSTANT: META_EXTFLOODFILL HEX: 548 +CONSTANT: META_DELETEOBJECT HEX: 1f0 +CONSTANT: META_CREATEPALETTE HEX: f7 +CONSTANT: META_CREATEPATTERNBRUSH HEX: 1F9 +CONSTANT: META_CREATEPENINDIRECT HEX: 2FA +CONSTANT: META_CREATEFONTINDIRECT HEX: 2FB +CONSTANT: META_CREATEBRUSHINDIRECT HEX: 2FC +CONSTANT: META_CREATEREGION HEX: 6FF +CONSTANT: ELF_VENDOR_SIZE 4 +CONSTANT: ELF_VERSION 0 +CONSTANT: ELF_CULTURE_LATIN 0 +CONSTANT: PFD_TYPE_RGBA 0 +CONSTANT: PFD_TYPE_COLORINDEX 1 +CONSTANT: PFD_MAIN_PLANE 0 +CONSTANT: PFD_OVERLAY_PLANE 1 +CONSTANT: PFD_UNDERLAY_PLANE -1 +CONSTANT: PFD_DOUBLEBUFFER 1 +CONSTANT: PFD_STEREO 2 +CONSTANT: PFD_DRAW_TO_WINDOW 4 +CONSTANT: PFD_DRAW_TO_BITMAP 8 +CONSTANT: PFD_SUPPORT_GDI 16 +CONSTANT: PFD_SUPPORT_OPENGL 32 +CONSTANT: PFD_GENERIC_FORMAT 64 +CONSTANT: PFD_NEED_PALETTE 128 +CONSTANT: PFD_NEED_SYSTEM_PALETTE HEX: 00000100 +CONSTANT: PFD_SWAP_EXCHANGE HEX: 00000200 +CONSTANT: PFD_SWAP_COPY HEX: 00000400 +CONSTANT: PFD_SWAP_LAYER_BUFFERS HEX: 00000800 +CONSTANT: PFD_GENERIC_ACCELERATED HEX: 00001000 +CONSTANT: PFD_DEPTH_DONTCARE HEX: 20000000 +CONSTANT: PFD_DOUBLEBUFFER_DONTCARE HEX: 40000000 +CONSTANT: PFD_STEREO_DONTCARE HEX: 80000000 +CONSTANT: SP_ERROR -1 +CONSTANT: SP_OUTOFDISK -4 +CONSTANT: SP_OUTOFMEMORY -5 +CONSTANT: SP_USERABORT -3 +CONSTANT: SP_APPABORT -2 +CONSTANT: BLACKNESS HEX: 00000042 +CONSTANT: NOTSRCERASE HEX: 001100A6 +CONSTANT: NOTSRCCOPY HEX: 00330008 +CONSTANT: SRCERASE HEX: 00440328 +CONSTANT: DSTINVERT HEX: 00550009 +CONSTANT: PATINVERT HEX: 005A0049 +CONSTANT: SRCINVERT HEX: 00660046 +CONSTANT: SRCAND HEX: 008800C6 +CONSTANT: MERGEPAINT HEX: 00BB0226 +CONSTANT: MERGECOPY HEX: 00C000CA +CONSTANT: SRCCOPY HEX: 00CC0020 +CONSTANT: SRCPAINT HEX: 00EE0086 +CONSTANT: PATCOPY HEX: 00F00021 +CONSTANT: PATPAINT HEX: 00FB0A09 +CONSTANT: WHITENESS HEX: 00FF0062 +CONSTANT: CAPTUREBLT HEX: 40000000 +CONSTANT: NOMIRRORBITMAP HEX: 80000000 +CONSTANT: R2_BLACK 1 +CONSTANT: R2_COPYPEN 13 +CONSTANT: R2_MASKNOTPEN 3 +CONSTANT: R2_MASKPEN 9 +CONSTANT: R2_MASKPENNOT 5 +CONSTANT: R2_MERGENOTPEN 12 +CONSTANT: R2_MERGEPEN 15 +CONSTANT: R2_MERGEPENNOT 14 +CONSTANT: R2_NOP 11 +CONSTANT: R2_NOT 6 +CONSTANT: R2_NOTCOPYPEN 4 +CONSTANT: R2_NOTMASKPEN 8 +CONSTANT: R2_NOTMERGEPEN 2 +CONSTANT: R2_NOTXORPEN 10 +CONSTANT: R2_WHITE 16 +CONSTANT: R2_XORPEN 7 +CONSTANT: CM_OUT_OF_GAMUT 255 +CONSTANT: CM_IN_GAMUT 0 +CONSTANT: RGN_AND 1 +CONSTANT: RGN_COPY 5 +CONSTANT: RGN_DIFF 4 +CONSTANT: RGN_OR 2 +CONSTANT: RGN_XOR 3 +CONSTANT: NULLREGION 1 +CONSTANT: SIMPLEREGION 2 +CONSTANT: COMPLEXREGION 3 +CONSTANT: ERROR 0 +CONSTANT: CBM_INIT 4 +CONSTANT: DIB_PAL_COLORS 1 +CONSTANT: DIB_RGB_COLORS 0 +CONSTANT: FW_DONTCARE 0 +CONSTANT: FW_THIN 100 +CONSTANT: FW_EXTRALIGHT 200 +ALIAS: FW_ULTRALIGHT FW_EXTRALIGHT +CONSTANT: FW_LIGHT 300 +CONSTANT: FW_NORMAL 400 +CONSTANT: FW_REGULAR 400 +CONSTANT: FW_MEDIUM 500 +CONSTANT: FW_SEMIBOLD 600 +ALIAS: FW_DEMIBOLD FW_SEMIBOLD +CONSTANT: FW_BOLD 700 +CONSTANT: FW_EXTRABOLD 800 +ALIAS: FW_ULTRABOLD FW_EXTRABOLD +CONSTANT: FW_HEAVY 900 +ALIAS: FW_BLACK FW_HEAVY +CONSTANT: ANSI_CHARSET 0 +CONSTANT: DEFAULT_CHARSET 1 +CONSTANT: SYMBOL_CHARSET 2 +CONSTANT: SHIFTJIS_CHARSET 128 +CONSTANT: HANGEUL_CHARSET 129 +CONSTANT: HANGUL_CHARSET 129 +CONSTANT: GB2312_CHARSET 134 +CONSTANT: CHINESEBIG5_CHARSET 136 +CONSTANT: GREEK_CHARSET 161 +CONSTANT: TURKISH_CHARSET 162 +CONSTANT: HEBREW_CHARSET 177 +CONSTANT: ARABIC_CHARSET 178 +CONSTANT: BALTIC_CHARSET 186 +CONSTANT: RUSSIAN_CHARSET 204 +CONSTANT: THAI_CHARSET 222 +CONSTANT: EASTEUROPE_CHARSET 238 +CONSTANT: OEM_CHARSET 255 +CONSTANT: JOHAB_CHARSET 130 +CONSTANT: VIETNAMESE_CHARSET 163 +CONSTANT: MAC_CHARSET 77 +CONSTANT: OUT_DEFAULT_PRECIS 0 +CONSTANT: OUT_STRING_PRECIS 1 +CONSTANT: OUT_CHARACTER_PRECIS 2 +CONSTANT: OUT_STROKE_PRECIS 3 +CONSTANT: OUT_TT_PRECIS 4 +CONSTANT: OUT_DEVICE_PRECIS 5 +CONSTANT: OUT_RASTER_PRECIS 6 +CONSTANT: OUT_TT_ONLY_PRECIS 7 +CONSTANT: OUT_OUTLINE_PRECIS 8 +CONSTANT: CLIP_DEFAULT_PRECIS 0 +CONSTANT: CLIP_CHARACTER_PRECIS 1 +CONSTANT: CLIP_STROKE_PRECIS 2 +CONSTANT: CLIP_MASK 15 +CONSTANT: CLIP_LH_ANGLES 16 +CONSTANT: CLIP_TT_ALWAYS 32 +CONSTANT: CLIP_EMBEDDED 128 +CONSTANT: DEFAULT_QUALITY 0 +CONSTANT: DRAFT_QUALITY 1 +CONSTANT: PROOF_QUALITY 2 +CONSTANT: NONANTIALIASED_QUALITY 3 +CONSTANT: ANTIALIASED_QUALITY 4 +CONSTANT: DEFAULT_PITCH 0 +CONSTANT: FIXED_PITCH 1 +CONSTANT: VARIABLE_PITCH 2 +CONSTANT: MONO_FONT 8 +CONSTANT: FF_DECORATIVE 80 +CONSTANT: FF_DONTCARE 0 +CONSTANT: FF_MODERN 48 +CONSTANT: FF_ROMAN 16 +CONSTANT: FF_SCRIPT 64 +CONSTANT: FF_SWISS 32 +CONSTANT: PANOSE_COUNT 10 +CONSTANT: PAN_FAMILYTYPE_INDEX 0 +CONSTANT: PAN_SERIFSTYLE_INDEX 1 +CONSTANT: PAN_WEIGHT_INDEX 2 +CONSTANT: PAN_PROPORTION_INDEX 3 +CONSTANT: PAN_CONTRAST_INDEX 4 +CONSTANT: PAN_STROKEVARIATION_INDEX 5 +CONSTANT: PAN_ARMSTYLE_INDEX 6 +CONSTANT: PAN_LETTERFORM_INDEX 7 +CONSTANT: PAN_MIDLINE_INDEX 8 +CONSTANT: PAN_XHEIGHT_INDEX 9 +CONSTANT: PAN_CULTURE_LATIN 0 +CONSTANT: PAN_ANY 0 +CONSTANT: PAN_NO_FIT 1 +CONSTANT: PAN_FAMILY_TEXT_DISPLAY 2 +CONSTANT: PAN_FAMILY_SCRIPT 3 +CONSTANT: PAN_FAMILY_DECORATIVE 4 +CONSTANT: PAN_FAMILY_PICTORIAL 5 +CONSTANT: PAN_SERIF_COVE 2 +CONSTANT: PAN_SERIF_OBTUSE_COVE 3 +CONSTANT: PAN_SERIF_SQUARE_COVE 4 +CONSTANT: PAN_SERIF_OBTUSE_SQUARE_COVE 5 +CONSTANT: PAN_SERIF_SQUARE 6 +CONSTANT: PAN_SERIF_THIN 7 +CONSTANT: PAN_SERIF_BONE 8 +CONSTANT: PAN_SERIF_EXAGGERATED 9 +CONSTANT: PAN_SERIF_TRIANGLE 10 +CONSTANT: PAN_SERIF_NORMAL_SANS 11 +CONSTANT: PAN_SERIF_OBTUSE_SANS 12 +CONSTANT: PAN_SERIF_PERP_SANS 13 +CONSTANT: PAN_SERIF_FLARED 14 +CONSTANT: PAN_SERIF_ROUNDED 15 +CONSTANT: PAN_WEIGHT_VERY_LIGHT 2 +CONSTANT: PAN_WEIGHT_LIGHT 3 +CONSTANT: PAN_WEIGHT_THIN 4 +CONSTANT: PAN_WEIGHT_BOOK 5 +CONSTANT: PAN_WEIGHT_MEDIUM 6 +CONSTANT: PAN_WEIGHT_DEMI 7 +CONSTANT: PAN_WEIGHT_BOLD 8 +CONSTANT: PAN_WEIGHT_HEAVY 9 +CONSTANT: PAN_WEIGHT_BLACK 10 +CONSTANT: PAN_WEIGHT_NORD 11 +CONSTANT: PAN_PROP_OLD_STYLE 2 +CONSTANT: PAN_PROP_MODERN 3 +CONSTANT: PAN_PROP_EVEN_WIDTH 4 +CONSTANT: PAN_PROP_EXPANDED 5 +CONSTANT: PAN_PROP_CONDENSED 6 +CONSTANT: PAN_PROP_VERY_EXPANDED 7 +CONSTANT: PAN_PROP_VERY_CONDENSED 8 +CONSTANT: PAN_PROP_MONOSPACED 9 +CONSTANT: PAN_CONTRAST_NONE 2 +CONSTANT: PAN_CONTRAST_VERY_LOW 3 +CONSTANT: PAN_CONTRAST_LOW 4 +CONSTANT: PAN_CONTRAST_MEDIUM_LOW 5 +CONSTANT: PAN_CONTRAST_MEDIUM 6 +CONSTANT: PAN_CONTRAST_MEDIUM_HIGH 7 +CONSTANT: PAN_CONTRAST_HIGH 8 +CONSTANT: PAN_CONTRAST_VERY_HIGH 9 +CONSTANT: PAN_STROKE_GRADUAL_DIAG 2 +CONSTANT: PAN_STROKE_GRADUAL_TRAN 3 +CONSTANT: PAN_STROKE_GRADUAL_VERT 4 +CONSTANT: PAN_STROKE_GRADUAL_HORZ 5 +CONSTANT: PAN_STROKE_RAPID_VERT 6 +CONSTANT: PAN_STROKE_RAPID_HORZ 7 +CONSTANT: PAN_STROKE_INSTANT_VERT 8 +CONSTANT: PAN_STRAIGHT_ARMS_HORZ 2 +CONSTANT: PAN_STRAIGHT_ARMS_WEDGE 3 +CONSTANT: PAN_STRAIGHT_ARMS_VERT 4 +CONSTANT: PAN_STRAIGHT_ARMS_SINGLE_SERIF 5 +CONSTANT: PAN_STRAIGHT_ARMS_DOUBLE_SERIF 6 +CONSTANT: PAN_BENT_ARMS_HORZ 7 +CONSTANT: PAN_BENT_ARMS_WEDGE 8 +CONSTANT: PAN_BENT_ARMS_VERT 9 +CONSTANT: PAN_BENT_ARMS_SINGLE_SERIF 10 +CONSTANT: PAN_BENT_ARMS_DOUBLE_SERIF 11 +CONSTANT: PAN_LETT_NORMAL_CONTACT 2 +CONSTANT: PAN_LETT_NORMAL_WEIGHTED 3 +CONSTANT: PAN_LETT_NORMAL_BOXED 4 +CONSTANT: PAN_LETT_NORMAL_FLATTENED 5 +CONSTANT: PAN_LETT_NORMAL_ROUNDED 6 +CONSTANT: PAN_LETT_NORMAL_OFF_CENTER 7 +CONSTANT: PAN_LETT_NORMAL_SQUARE 8 +CONSTANT: PAN_LETT_OBLIQUE_CONTACT 9 +CONSTANT: PAN_LETT_OBLIQUE_WEIGHTED 10 +CONSTANT: PAN_LETT_OBLIQUE_BOXED 11 +CONSTANT: PAN_LETT_OBLIQUE_FLATTENED 12 +CONSTANT: PAN_LETT_OBLIQUE_ROUNDED 13 +CONSTANT: PAN_LETT_OBLIQUE_OFF_CENTER 14 +CONSTANT: PAN_LETT_OBLIQUE_SQUARE 15 +CONSTANT: PAN_MIDLINE_STANDARD_TRIMMED 2 +CONSTANT: PAN_MIDLINE_STANDARD_POINTED 3 +CONSTANT: PAN_MIDLINE_STANDARD_SERIFED 4 +CONSTANT: PAN_MIDLINE_HIGH_TRIMMED 5 +CONSTANT: PAN_MIDLINE_HIGH_POINTED 6 +CONSTANT: PAN_MIDLINE_HIGH_SERIFED 7 +CONSTANT: PAN_MIDLINE_CONSTANT_TRIMMED 8 +CONSTANT: PAN_MIDLINE_CONSTANT_POINTED 9 +CONSTANT: PAN_MIDLINE_CONSTANT_SERIFED 10 +CONSTANT: PAN_MIDLINE_LOW_TRIMMED 11 +CONSTANT: PAN_MIDLINE_LOW_POINTED 12 +CONSTANT: PAN_MIDLINE_LOW_SERIFED 13 +CONSTANT: PAN_XHEIGHT_CONSTANT_SMALL 2 +CONSTANT: PAN_XHEIGHT_CONSTANT_STD 3 +CONSTANT: PAN_XHEIGHT_CONSTANT_LARGE 4 +CONSTANT: PAN_XHEIGHT_DUCKING_SMALL 5 +CONSTANT: PAN_XHEIGHT_DUCKING_STD 6 +CONSTANT: PAN_XHEIGHT_DUCKING_LARGE 7 +CONSTANT: FS_LATIN1 1 +CONSTANT: FS_LATIN2 2 +CONSTANT: FS_CYRILLIC 4 +CONSTANT: FS_GREEK 8 +CONSTANT: FS_TURKISH 16 +CONSTANT: FS_HEBREW 32 +CONSTANT: FS_ARABIC 64 +CONSTANT: FS_BALTIC 128 +CONSTANT: FS_THAI HEX: 10000 +CONSTANT: FS_JISJAPAN HEX: 20000 +CONSTANT: FS_CHINESESIMP HEX: 40000 +CONSTANT: FS_WANSUNG HEX: 80000 +CONSTANT: FS_CHINESETRAD HEX: 100000 +CONSTANT: FS_JOHAB HEX: 200000 +CONSTANT: FS_SYMBOL HEX: 80000000 +CONSTANT: HS_BDIAGONAL 3 +CONSTANT: HS_CROSS 4 +CONSTANT: HS_DIAGCROSS 5 +CONSTANT: HS_FDIAGONAL 2 +CONSTANT: HS_HORIZONTAL 0 +CONSTANT: HS_VERTICAL 1 +CONSTANT: PS_GEOMETRIC 65536 +CONSTANT: PS_COSMETIC 0 +CONSTANT: PS_ALTERNATE 8 +CONSTANT: PS_SOLID 0 +CONSTANT: PS_DASH 1 +CONSTANT: PS_DOT 2 +CONSTANT: PS_DASHDOT 3 +CONSTANT: PS_DASHDOTDOT 4 +CONSTANT: PS_NULL 5 +CONSTANT: PS_USERSTYLE 7 +CONSTANT: PS_INSIDEFRAME 6 +CONSTANT: PS_ENDCAP_ROUND 0 +CONSTANT: PS_ENDCAP_SQUARE 256 +CONSTANT: PS_ENDCAP_FLAT 512 +CONSTANT: PS_JOIN_BEVEL 4096 +CONSTANT: PS_JOIN_MITER 8192 +CONSTANT: PS_JOIN_ROUND 0 +CONSTANT: PS_STYLE_MASK 15 +CONSTANT: PS_ENDCAP_MASK 3840 +CONSTANT: PS_TYPE_MASK 983040 +CONSTANT: ALTERNATE 1 +CONSTANT: WINDING 2 +CONSTANT: DC_BINNAMES 12 +CONSTANT: DC_BINS 6 +CONSTANT: DC_COPIES 18 +CONSTANT: DC_DRIVER 11 +CONSTANT: DC_DATATYPE_PRODUCED 21 +CONSTANT: DC_DUPLEX 7 +CONSTANT: DC_EMF_COMPLIANT 20 +CONSTANT: DC_ENUMRESOLUTIONS 13 +CONSTANT: DC_EXTRA 9 +CONSTANT: DC_FIELDS 1 +CONSTANT: DC_FILEDEPENDENCIES 14 +CONSTANT: DC_MAXEXTENT 5 +CONSTANT: DC_MINEXTENT 4 +CONSTANT: DC_ORIENTATION 17 +CONSTANT: DC_PAPERNAMES 16 +CONSTANT: DC_PAPERS 2 +CONSTANT: DC_PAPERSIZE 3 +CONSTANT: DC_SIZE 8 +CONSTANT: DC_TRUETYPE 15 +CONSTANT: DCTT_BITMAP 1 +CONSTANT: DCTT_DOWNLOAD 2 +CONSTANT: DCTT_SUBDEV 4 +CONSTANT: DCTT_DOWNLOAD_OUTLINE 8 +CONSTANT: DC_VERSION 10 +CONSTANT: DC_BINADJUST 19 +CONSTANT: DC_MANUFACTURER 23 +CONSTANT: DC_MODEL 24 +CONSTANT: DC_PERSONALITY 25 +CONSTANT: DC_PRINTRATE 26 +CONSTANT: DC_PRINTRATEUNIT 27 +CONSTANT: DC_PRINTERMEM 28 +CONSTANT: DC_MEDIAREADY 29 +CONSTANT: DC_STAPLE 30 +CONSTANT: DC_PRINTRATEPPM 31 +CONSTANT: DC_COLORDEVICE 32 +CONSTANT: DC_NUP 33 +CONSTANT: DC_MEDIATYPENAMES 34 +CONSTANT: DC_MEDIATYPES 35 +CONSTANT: DCBA_FACEUPNONE 0 +CONSTANT: DCBA_FACEUPCENTER 1 +CONSTANT: DCBA_FACEUPLEFT 2 +CONSTANT: DCBA_FACEUPRIGHT 3 +CONSTANT: DCBA_FACEDOWNNONE 256 +CONSTANT: DCBA_FACEDOWNCENTER 257 +CONSTANT: DCBA_FACEDOWNLEFT 258 +CONSTANT: DCBA_FACEDOWNRIGHT 259 +CONSTANT: FLOODFILLBORDER 0 +CONSTANT: FLOODFILLSURFACE 1 +CONSTANT: ETO_CLIPPED HEX: 0004 +CONSTANT: ETO_GLYPH_INDEX HEX: 0010 +CONSTANT: ETO_OPAQUE HEX: 0002 +CONSTANT: ETO_NUMERICSLATIN HEX: 0800 +CONSTANT: ETO_NUMERICSLOCAL HEX: 0400 +CONSTANT: ETO_RTLREADING HEX: 0080 +CONSTANT: ETO_IGNORELANGUAGE HEX: 1000 +CONSTANT: ETO_PDY HEX: 2000 +CONSTANT: GDICOMMENT_WINDOWS_METAFILE -2147483647 +CONSTANT: GDICOMMENT_BEGINGROUP 2 +CONSTANT: GDICOMMENT_ENDGROUP 3 +CONSTANT: GDICOMMENT_MULTIFORMATS 1073741828 +CONSTANT: GDICOMMENT_IDENTIFIER 1128875079 +CONSTANT: AD_COUNTERCLOCKWISE 1 +CONSTANT: AD_CLOCKWISE 2 +CONSTANT: RDH_RECTANGLES 1 +CONSTANT: GCPCLASS_LATIN 1 +CONSTANT: GCPCLASS_HEBREW 2 +CONSTANT: GCPCLASS_ARABIC 2 +CONSTANT: GCPCLASS_NEUTRAL 3 +CONSTANT: GCPCLASS_LOCALNUMBER 4 +CONSTANT: GCPCLASS_LATINNUMBER 5 +CONSTANT: GCPCLASS_LATINNUMERICTERMINATOR 6 +CONSTANT: GCPCLASS_LATINNUMERICSEPARATOR 7 +CONSTANT: GCPCLASS_NUMERICSEPARATOR 8 +CONSTANT: GCPCLASS_PREBOUNDLTR 128 +CONSTANT: GCPCLASS_PREBOUNDRTL 64 +CONSTANT: GCPCLASS_POSTBOUNDLTR 32 +CONSTANT: GCPCLASS_POSTBOUNDRTL 16 +CONSTANT: GCPGLYPH_LINKBEFORE HEX: 8000 +CONSTANT: GCPGLYPH_LINKAFTER HEX: 4000 +CONSTANT: DCB_DISABLE 8 +CONSTANT: DCB_ENABLE 4 +CONSTANT: DCB_RESET 1 +CONSTANT: DCB_SET 3 +CONSTANT: DCB_ACCUMULATE 2 +CONSTANT: DCB_DIRTY 2 +CONSTANT: OBJ_BRUSH 2 +CONSTANT: OBJ_PEN 1 +CONSTANT: OBJ_PAL 5 +CONSTANT: OBJ_FONT 6 +CONSTANT: OBJ_BITMAP 7 +CONSTANT: OBJ_EXTPEN 11 +CONSTANT: OBJ_REGION 8 +CONSTANT: OBJ_DC 3 +CONSTANT: OBJ_MEMDC 10 +CONSTANT: OBJ_METAFILE 9 +CONSTANT: OBJ_METADC 4 +CONSTANT: OBJ_ENHMETAFILE 13 +CONSTANT: OBJ_ENHMETADC 12 +CONSTANT: DRIVERVERSION 0 +CONSTANT: TECHNOLOGY 2 +CONSTANT: DT_PLOTTER 0 +CONSTANT: DT_RASDISPLAY 1 +CONSTANT: DT_RASPRINTER 2 +CONSTANT: DT_RASCAMERA 3 +CONSTANT: DT_CHARSTREAM 4 +CONSTANT: DT_METAFILE 5 +CONSTANT: DT_DISPFILE 6 +CONSTANT: HORZSIZE 4 +CONSTANT: VERTSIZE 6 +CONSTANT: HORZRES 8 +CONSTANT: VERTRES 10 +CONSTANT: LOGPIXELSX 88 +CONSTANT: LOGPIXELSY 90 +CONSTANT: BITSPIXEL 12 +CONSTANT: PLANES 14 +CONSTANT: NUMBRUSHES 16 +CONSTANT: NUMPENS 18 +CONSTANT: NUMFONTS 22 +CONSTANT: NUMCOLORS 24 +CONSTANT: NUMMARKERS 20 +CONSTANT: ASPECTX 40 +CONSTANT: ASPECTY 42 +CONSTANT: ASPECTXY 44 +CONSTANT: PDEVICESIZE 26 +CONSTANT: CLIPCAPS 36 +CONSTANT: SIZEPALETTE 104 +CONSTANT: NUMRESERVED 106 +CONSTANT: COLORRES 108 +CONSTANT: PHYSICALWIDTH 110 +CONSTANT: PHYSICALHEIGHT 111 +CONSTANT: PHYSICALOFFSETX 112 +CONSTANT: PHYSICALOFFSETY 113 +CONSTANT: SCALINGFACTORX 114 +CONSTANT: SCALINGFACTORY 115 +CONSTANT: VREFRESH 116 +CONSTANT: DESKTOPHORZRES 118 +CONSTANT: DESKTOPVERTRES 117 +CONSTANT: BLTALIGNMENT 119 +CONSTANT: SHADEBLENDCAPS 120 +CONSTANT: SB_NONE HEX: 00 +CONSTANT: SB_CONST_ALPHA HEX: 01 +CONSTANT: SB_PIXEL_ALPHA HEX: 02 +CONSTANT: SB_PREMULT_ALPHA HEX: 04 +CONSTANT: SB_GRAD_RECT HEX: 10 +CONSTANT: SB_GRAD_TRI HEX: 20 +CONSTANT: COLORMGMTCAPS 121 +CONSTANT: CM_NONE HEX: 00 +CONSTANT: CM_DEVICE_ICM HEX: 01 +CONSTANT: CM_GAMMA_RAMP HEX: 02 +CONSTANT: CM_CMYK_COLOR HEX: 04 +CONSTANT: RASTERCAPS 38 +CONSTANT: RC_BITBLT 1 +CONSTANT: RC_BITMAP64 8 +CONSTANT: RC_DI_BITMAP 128 +CONSTANT: RC_DIBTODEV 512 +CONSTANT: RC_FLOODFILL 4096 +CONSTANT: RC_STRETCHBLT 2048 +CONSTANT: RC_STRETCHDIB 8192 +CONSTANT: CURVECAPS 28 +CONSTANT: CC_NONE 0 +CONSTANT: CC_CIRCLES 1 +CONSTANT: CC_PIE 2 +CONSTANT: CC_CHORD 4 +CONSTANT: CC_ELLIPSES 8 +CONSTANT: CC_WIDE 16 +CONSTANT: CC_STYLED 32 +CONSTANT: CC_WIDESTYLED 64 +CONSTANT: CC_INTERIORS 128 +CONSTANT: CC_ROUNDRECT 256 +CONSTANT: LINECAPS 30 +CONSTANT: LC_NONE 0 +CONSTANT: LC_POLYLINE 2 +CONSTANT: LC_MARKER 4 +CONSTANT: LC_POLYMARKER 8 +CONSTANT: LC_WIDE 16 +CONSTANT: LC_STYLED 32 +CONSTANT: LC_WIDESTYLED 64 +CONSTANT: LC_INTERIORS 128 +CONSTANT: POLYGONALCAPS 32 +CONSTANT: RC_BANDING 2 +CONSTANT: RC_BIGFONT 1024 +CONSTANT: RC_DEVBITS HEX: 8000 +CONSTANT: RC_GDI20_OUTPUT 16 +CONSTANT: RC_GDI20_STATE 32 +CONSTANT: RC_NONE 0 +CONSTANT: RC_OP_DX_OUTPUT HEX: 4000 +CONSTANT: RC_PALETTE 256 +CONSTANT: RC_SAVEBITMAP 64 +CONSTANT: RC_SCALING 4 +CONSTANT: PC_NONE 0 +CONSTANT: PC_POLYGON 1 +CONSTANT: PC_POLYPOLYGON 256 +CONSTANT: PC_PATHS 512 +CONSTANT: PC_RECTANGLE 2 +CONSTANT: PC_WINDPOLYGON 4 +CONSTANT: PC_SCANLINE 8 +CONSTANT: PC_TRAPEZOID 4 +CONSTANT: PC_WIDE 16 +CONSTANT: PC_STYLED 32 +CONSTANT: PC_WIDESTYLED 64 +CONSTANT: PC_INTERIORS 128 +CONSTANT: TEXTCAPS 34 +CONSTANT: TC_OP_CHARACTER 1 +CONSTANT: TC_OP_STROKE 2 +CONSTANT: TC_CP_STROKE 4 +CONSTANT: TC_CR_90 8 +CONSTANT: TC_CR_ANY 16 +CONSTANT: TC_SF_X_YINDEP 32 +CONSTANT: TC_SA_DOUBLE 64 +CONSTANT: TC_SA_INTEGER 128 +CONSTANT: TC_SA_CONTIN 256 +CONSTANT: TC_EA_DOUBLE 512 +CONSTANT: TC_IA_ABLE 1024 +CONSTANT: TC_UA_ABLE 2048 +CONSTANT: TC_SO_ABLE 4096 +CONSTANT: TC_RA_ABLE 8192 +CONSTANT: TC_VA_ABLE 16384 +CONSTANT: TC_RESERVED 32768 +CONSTANT: TC_SCROLLBLT 65536 +CONSTANT: GCP_DBCS 1 +CONSTANT: GCP_ERROR HEX: 8000 +CONSTANT: GCP_CLASSIN HEX: 80000 +CONSTANT: GCP_DIACRITIC 256 +CONSTANT: GCP_DISPLAYZWG HEX: 400000 +CONSTANT: GCP_GLYPHSHAPE 16 +CONSTANT: GCP_JUSTIFY HEX: 10000 +CONSTANT: GCP_JUSTIFYIN HEX: 200000 +CONSTANT: GCP_KASHIDA 1024 +CONSTANT: GCP_LIGATE 32 +CONSTANT: GCP_MAXEXTENT HEX: 100000 +CONSTANT: GCP_NEUTRALOVERRIDE HEX: 2000000 +CONSTANT: GCP_NUMERICOVERRIDE HEX: 1000000 +CONSTANT: GCP_NUMERICSLATIN HEX: 4000000 +CONSTANT: GCP_NUMERICSLOCAL HEX: 8000000 +CONSTANT: GCP_REORDER 2 +CONSTANT: GCP_SYMSWAPOFF HEX: 800000 +CONSTANT: GCP_USEKERNING 8 +CONSTANT: FLI_GLYPHS HEX: 40000 +CONSTANT: FLI_MASK HEX: 103b +CONSTANT: GGO_METRICS 0 +CONSTANT: GGO_BITMAP 1 +CONSTANT: GGO_NATIVE 2 +CONSTANT: GGO_BEZIER 3 +CONSTANT: GGO_GRAY2_BITMAP 4 +CONSTANT: GGO_GRAY4_BITMAP 5 +CONSTANT: GGO_GRAY8_BITMAP 6 +CONSTANT: GGO_GLYPH_INDEX 128 +CONSTANT: GGO_UNHINTED 256 +CONSTANT: GM_COMPATIBLE 1 +CONSTANT: GM_ADVANCED 2 +CONSTANT: MM_ANISOTROPIC 8 +CONSTANT: MM_HIENGLISH 5 +CONSTANT: MM_HIMETRIC 3 +CONSTANT: MM_ISOTROPIC 7 +CONSTANT: MM_LOENGLISH 4 +CONSTANT: MM_LOMETRIC 2 +CONSTANT: MM_TEXT 1 +CONSTANT: MM_TWIPS 6 +ALIAS: MM_MAX_FIXEDSCALE MM_TWIPS +CONSTANT: ABSOLUTE 1 +CONSTANT: RELATIVE 2 +CONSTANT: PC_EXPLICIT 2 +CONSTANT: PC_NOCOLLAPSE 4 +CONSTANT: PC_RESERVED 1 +CONSTANT: CLR_NONE HEX: ffffffff +ALIAS: CLR_INVALID CLR_NONE +CONSTANT: CLR_DEFAULT HEX: ff000000 +CONSTANT: PT_MOVETO 6 +CONSTANT: PT_LINETO 2 +CONSTANT: PT_BEZIERTO 4 +CONSTANT: PT_CLOSEFIGURE 1 +CONSTANT: TT_AVAILABLE 1 +CONSTANT: TT_ENABLED 2 +CONSTANT: BLACK_BRUSH 4 +CONSTANT: DKGRAY_BRUSH 3 +CONSTANT: GRAY_BRUSH 2 +CONSTANT: HOLLOW_BRUSH 5 +CONSTANT: LTGRAY_BRUSH 1 +CONSTANT: NULL_BRUSH 5 +CONSTANT: WHITE_BRUSH 0 +CONSTANT: BLACK_PEN 7 +CONSTANT: NULL_PEN 8 +CONSTANT: WHITE_PEN 6 +CONSTANT: ANSI_FIXED_FONT 11 +CONSTANT: ANSI_VAR_FONT 12 CONSTANT: DEVICE_DEFAULT_FONT 14 -CONSTANT: DEFAULT_PALETTE 15 -CONSTANT: SYSTEM_FIXED_FONT 16 -CONSTANT: DEFAULT_GUI_FONT 17 -CONSTANT: DC_BRUSH 18 -CONSTANT: DC_PEN 19 - -CONSTANT: BI_RGB 0 -CONSTANT: BI_RLE8 1 -CONSTANT: BI_RLE4 2 -CONSTANT: BI_BITFIELDS 3 +CONSTANT: DEFAULT_GUI_FONT 17 +CONSTANT: OEM_FIXED_FONT 10 +CONSTANT: SYSTEM_FONT 13 +CONSTANT: SYSTEM_FIXED_FONT 16 +CONSTANT: DEFAULT_PALETTE 15 +CONSTANT: DC_BRUSH 18 +CONSTANT: DC_PEN 19 +CONSTANT: SYSPAL_ERROR 0 +CONSTANT: SYSPAL_STATIC 1 +CONSTANT: SYSPAL_NOSTATIC 2 +CONSTANT: SYSPAL_NOSTATIC256 3 +CONSTANT: TA_BASELINE 24 +CONSTANT: TA_BOTTOM 8 +CONSTANT: TA_TOP 0 +CONSTANT: TA_CENTER 6 +CONSTANT: TA_LEFT 0 +CONSTANT: TA_RIGHT 2 +CONSTANT: TA_RTLREADING 256 +CONSTANT: TA_NOUPDATECP 0 +CONSTANT: TA_UPDATECP 1 +: TA_MASK ( -- n ) { TA_BASELINE TA_CENTER TA_UPDATECP TA_RTLREADING } flags ; foldable +CONSTANT: VTA_BASELINE 24 +CONSTANT: VTA_CENTER 6 +ALIAS: VTA_LEFT TA_BOTTOM +ALIAS: VTA_RIGHT TA_TOP +ALIAS: VTA_BOTTOM TA_RIGHT +ALIAS: VTA_TOP TA_LEFT +CONSTANT: MWT_IDENTITY 1 +CONSTANT: MWT_LEFTMULTIPLY 2 +CONSTANT: MWT_RIGHTMULTIPLY 3 +CONSTANT: OPAQUE 2 +CONSTANT: TRANSPARENT 1 +CONSTANT: BLACKONWHITE 1 +CONSTANT: WHITEONBLACK 2 +CONSTANT: COLORONCOLOR 3 +CONSTANT: HALFTONE 4 +CONSTANT: MAXSTRETCHBLTMODE 4 +CONSTANT: STRETCH_ANDSCANS 1 +CONSTANT: STRETCH_DELETESCANS 3 +CONSTANT: STRETCH_HALFTONE 4 +CONSTANT: STRETCH_ORSCANS 2 +CONSTANT: TCI_SRCCHARSET 1 +CONSTANT: TCI_SRCCODEPAGE 2 +CONSTANT: TCI_SRCFONTSIG 3 +CONSTANT: ICM_ON 2 +CONSTANT: ICM_OFF 1 +CONSTANT: ICM_QUERY 3 +CONSTANT: NEWFRAME 1 +CONSTANT: ABORTDOC 2 +CONSTANT: NEXTBAND 3 +CONSTANT: SETCOLORTABLE 4 +CONSTANT: GETCOLORTABLE 5 +CONSTANT: FLUSHOUTPUT 6 +CONSTANT: DRAFTMODE 7 +CONSTANT: QUERYESCSUPPORT 8 +CONSTANT: SETABORTPROC 9 +CONSTANT: STARTDOC 10 +CONSTANT: ENDDOC 11 +CONSTANT: GETPHYSPAGESIZE 12 +CONSTANT: GETPRINTINGOFFSET 13 +CONSTANT: GETSCALINGFACTOR 14 +CONSTANT: MFCOMMENT 15 +CONSTANT: GETPENWIDTH 16 +CONSTANT: SETCOPYCOUNT 17 +CONSTANT: SELECTPAPERSOURCE 18 +CONSTANT: DEVICEDATA 19 +CONSTANT: PASSTHROUGH 19 +CONSTANT: GETTECHNOLGY 20 +CONSTANT: GETTECHNOLOGY 20 +CONSTANT: SETLINECAP 21 +CONSTANT: SETLINEJOIN 22 +CONSTANT: SETMITERLIMIT 23 +CONSTANT: BANDINFO 24 +CONSTANT: DRAWPATTERNRECT 25 +CONSTANT: GETVECTORPENSIZE 26 +CONSTANT: GETVECTORBRUSHSIZE 27 +CONSTANT: ENABLEDUPLEX 28 +CONSTANT: GETSETPAPERBINS 29 +CONSTANT: GETSETPRINTORIENT 30 +CONSTANT: ENUMPAPERBINS 31 +CONSTANT: SETDIBSCALING 32 +CONSTANT: EPSPRINTING 33 +CONSTANT: ENUMPAPERMETRICS 34 +CONSTANT: GETSETPAPERMETRICS 35 +CONSTANT: POSTSCRIPT_DATA 37 +CONSTANT: POSTSCRIPT_IGNORE 38 +CONSTANT: MOUSETRAILS 39 +CONSTANT: GETDEVICEUNITS 42 +CONSTANT: GETEXTENDEDTEXTMETRICS 256 +CONSTANT: GETEXTENTTABLE 257 +CONSTANT: GETPAIRKERNTABLE 258 +CONSTANT: GETTRACKKERNTABLE 259 +CONSTANT: EXTTEXTOUT 512 +CONSTANT: GETFACENAME 513 +CONSTANT: DOWNLOADFACE 514 +CONSTANT: ENABLERELATIVEWIDTHS 768 +CONSTANT: ENABLEPAIRKERNING 769 +CONSTANT: SETKERNTRACK 770 +CONSTANT: SETALLJUSTVALUES 771 +CONSTANT: SETCHARSET 772 +CONSTANT: STRETCHBLT 2048 +CONSTANT: GETSETSCREENPARAMS 3072 +CONSTANT: QUERYDIBSUPPORT 3073 +CONSTANT: BEGIN_PATH 4096 +CONSTANT: CLIP_TO_PATH 4097 +CONSTANT: END_PATH 4098 +CONSTANT: EXT_DEVICE_CAPS 4099 +CONSTANT: RESTORE_CTM 4100 +CONSTANT: SAVE_CTM 4101 +CONSTANT: SET_ARC_DIRECTION 4102 +CONSTANT: SET_BACKGROUND_COLOR 4103 +CONSTANT: SET_POLY_MODE 4104 +CONSTANT: SET_SCREEN_ANGLE 4105 +CONSTANT: SET_SPREAD 4106 +CONSTANT: TRANSFORM_CTM 4107 +CONSTANT: SET_CLIP_BOX 4108 +CONSTANT: SET_BOUNDS 4109 +CONSTANT: SET_MIRROR_MODE 4110 +CONSTANT: OPENCHANNEL 4110 +CONSTANT: DOWNLOADHEADER 4111 +CONSTANT: CLOSECHANNEL 4112 +CONSTANT: POSTSCRIPT_PASSTHROUGH 4115 +CONSTANT: ENCAPSULATED_POSTSCRIPT 4116 +CONSTANT: QDI_SETDIBITS 1 +CONSTANT: QDI_GETDIBITS 2 +CONSTANT: QDI_DIBTOSCREEN 4 +CONSTANT: QDI_STRETCHDIB 8 +CONSTANT: SP_NOTREPORTED HEX: 4000 +CONSTANT: PR_JOBSTATUS 0 +CONSTANT: ASPECT_FILTERING 1 +CONSTANT: BS_SOLID 0 +CONSTANT: BS_NULL 1 +CONSTANT: BS_HOLLOW 1 +CONSTANT: BS_HATCHED 2 +CONSTANT: BS_PATTERN 3 +CONSTANT: BS_INDEXED 4 +CONSTANT: BS_DIBPATTERN 5 +CONSTANT: BS_DIBPATTERNPT 6 +CONSTANT: BS_PATTERN8X8 7 +CONSTANT: BS_DIBPATTERN8X8 8 +CONSTANT: LCS_CALIBRATED_RGB 0 +CONSTANT: LCS_DEVICE_RGB 1 +CONSTANT: LCS_DEVICE_CMYK 2 +CONSTANT: LCS_GM_BUSINESS 1 +CONSTANT: LCS_GM_GRAPHICS 2 +CONSTANT: LCS_GM_IMAGES 4 +CONSTANT: RASTER_FONTTYPE 1 +CONSTANT: DEVICE_FONTTYPE 2 +CONSTANT: TRUETYPE_FONTTYPE 4 +CONSTANT: DMORIENT_PORTRAIT 1 +CONSTANT: DMORIENT_LANDSCAPE 2 +CONSTANT: DMPAPER_FIRST 1 +CONSTANT: DMPAPER_LETTER 1 +CONSTANT: DMPAPER_LETTERSMALL 2 +CONSTANT: DMPAPER_TABLOID 3 +CONSTANT: DMPAPER_LEDGER 4 +CONSTANT: DMPAPER_LEGAL 5 +CONSTANT: DMPAPER_STATEMENT 6 +CONSTANT: DMPAPER_EXECUTIVE 7 +CONSTANT: DMPAPER_A3 8 +CONSTANT: DMPAPER_A4 9 +CONSTANT: DMPAPER_A4SMALL 10 +CONSTANT: DMPAPER_A5 11 +CONSTANT: DMPAPER_B4 12 +CONSTANT: DMPAPER_B5 13 +CONSTANT: DMPAPER_FOLIO 14 +CONSTANT: DMPAPER_QUARTO 15 +CONSTANT: DMPAPER_10X14 16 +CONSTANT: DMPAPER_11X17 17 +CONSTANT: DMPAPER_NOTE 18 +CONSTANT: DMPAPER_ENV_9 19 +CONSTANT: DMPAPER_ENV_10 20 +CONSTANT: DMPAPER_ENV_11 21 +CONSTANT: DMPAPER_ENV_12 22 +CONSTANT: DMPAPER_ENV_14 23 +CONSTANT: DMPAPER_CSHEET 24 +CONSTANT: DMPAPER_DSHEET 25 +CONSTANT: DMPAPER_ESHEET 26 +CONSTANT: DMPAPER_ENV_DL 27 +CONSTANT: DMPAPER_ENV_C5 28 +CONSTANT: DMPAPER_ENV_C3 29 +CONSTANT: DMPAPER_ENV_C4 30 +CONSTANT: DMPAPER_ENV_C6 31 +CONSTANT: DMPAPER_ENV_C65 32 +CONSTANT: DMPAPER_ENV_B4 33 +CONSTANT: DMPAPER_ENV_B5 34 +CONSTANT: DMPAPER_ENV_B6 35 +CONSTANT: DMPAPER_ENV_ITALY 36 +CONSTANT: DMPAPER_ENV_MONARCH 37 +CONSTANT: DMPAPER_ENV_PERSONAL 38 +CONSTANT: DMPAPER_FANFOLD_US 39 +CONSTANT: DMPAPER_FANFOLD_STD_GERMAN 40 +CONSTANT: DMPAPER_FANFOLD_LGL_GERMAN 41 +CONSTANT: DMPAPER_ISO_B4 42 +CONSTANT: DMPAPER_JAPANESE_POSTCARD 43 +CONSTANT: DMPAPER_9X11 44 +CONSTANT: DMPAPER_10X11 45 +CONSTANT: DMPAPER_15X11 46 +CONSTANT: DMPAPER_ENV_INVITE 47 +CONSTANT: DMPAPER_RESERVED_48 48 +CONSTANT: DMPAPER_RESERVED_49 49 +CONSTANT: DMPAPER_LETTER_EXTRA 50 +CONSTANT: DMPAPER_LEGAL_EXTRA 51 +CONSTANT: DMPAPER_TABLOID_EXTRA 52 +CONSTANT: DMPAPER_A4_EXTRA 53 +CONSTANT: DMPAPER_LETTER_TRANSVERSE 54 +CONSTANT: DMPAPER_A4_TRANSVERSE 55 +CONSTANT: DMPAPER_LETTER_EXTRA_TRANSVERSE 56 +CONSTANT: DMPAPER_A_PLUS 57 +CONSTANT: DMPAPER_B_PLUS 58 +CONSTANT: DMPAPER_LETTER_PLUS 59 +CONSTANT: DMPAPER_A4_PLUS 60 +CONSTANT: DMPAPER_A5_TRANSVERSE 61 +CONSTANT: DMPAPER_B5_TRANSVERSE 62 +CONSTANT: DMPAPER_A3_EXTRA 63 +CONSTANT: DMPAPER_A5_EXTRA 64 +CONSTANT: DMPAPER_B5_EXTRA 65 +CONSTANT: DMPAPER_A2 66 +CONSTANT: DMPAPER_A3_TRANSVERSE 67 +CONSTANT: DMPAPER_A3_EXTRA_TRANSVERSE 68 +CONSTANT: DMPAPER_DBL_JAPANESE_POSTCARD 69 +CONSTANT: DMPAPER_A6 70 +CONSTANT: DMPAPER_JENV_KAKU2 71 +CONSTANT: DMPAPER_JENV_KAKU3 72 +CONSTANT: DMPAPER_JENV_CHOU3 73 +CONSTANT: DMPAPER_JENV_CHOU4 74 +CONSTANT: DMPAPER_LETTER_ROTATED 75 +CONSTANT: DMPAPER_A3_ROTATED 76 +CONSTANT: DMPAPER_A4_ROTATED 77 +CONSTANT: DMPAPER_A5_ROTATED 78 +CONSTANT: DMPAPER_B4_JIS_ROTATED 79 +CONSTANT: DMPAPER_B5_JIS_ROTATED 80 +CONSTANT: DMPAPER_JAPANESE_POSTCARD_ROTATED 81 +CONSTANT: DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED 82 +CONSTANT: DMPAPER_A6_ROTATED 83 +CONSTANT: DMPAPER_JENV_KAKU2_ROTATED 84 +CONSTANT: DMPAPER_JENV_KAKU3_ROTATED 85 +CONSTANT: DMPAPER_JENV_CHOU3_ROTATED 86 +CONSTANT: DMPAPER_JENV_CHOU4_ROTATED 87 +CONSTANT: DMPAPER_B6_JIS 88 +CONSTANT: DMPAPER_B6_JIS_ROTATED 89 +CONSTANT: DMPAPER_12X11 90 +CONSTANT: DMPAPER_JENV_YOU4 91 +CONSTANT: DMPAPER_JENV_YOU4_ROTATED 92 +CONSTANT: DMPAPER_P16K 93 +CONSTANT: DMPAPER_P32K 94 +CONSTANT: DMPAPER_P32KBIG 95 +CONSTANT: DMPAPER_PENV_1 96 +CONSTANT: DMPAPER_PENV_2 97 +CONSTANT: DMPAPER_PENV_3 98 +CONSTANT: DMPAPER_PENV_4 99 +CONSTANT: DMPAPER_PENV_5 100 +CONSTANT: DMPAPER_PENV_6 101 +CONSTANT: DMPAPER_PENV_7 102 +CONSTANT: DMPAPER_PENV_8 103 +CONSTANT: DMPAPER_PENV_9 104 +CONSTANT: DMPAPER_PENV_10 105 +CONSTANT: DMPAPER_P16K_ROTATED 106 +CONSTANT: DMPAPER_P32K_ROTATED 107 +CONSTANT: DMPAPER_P32KBIG_ROTATED 108 +CONSTANT: DMPAPER_PENV_1_ROTATED 109 +CONSTANT: DMPAPER_PENV_2_ROTATED 110 +CONSTANT: DMPAPER_PENV_3_ROTATED 111 +CONSTANT: DMPAPER_PENV_4_ROTATED 112 +CONSTANT: DMPAPER_PENV_5_ROTATED 113 +CONSTANT: DMPAPER_PENV_6_ROTATED 114 +CONSTANT: DMPAPER_PENV_7_ROTATED 115 +CONSTANT: DMPAPER_PENV_8_ROTATED 116 +CONSTANT: DMPAPER_PENV_9_ROTATED 117 +CONSTANT: DMPAPER_PENV_10_ROTATED 118 +CONSTANT: DMPAPER_LAST 118 +CONSTANT: DMPAPER_USER 256 +CONSTANT: DMBIN_FIRST 1 +CONSTANT: DMBIN_UPPER 1 +CONSTANT: DMBIN_ONLYONE 1 +CONSTANT: DMBIN_LOWER 2 +CONSTANT: DMBIN_MIDDLE 3 +CONSTANT: DMBIN_MANUAL 4 +CONSTANT: DMBIN_ENVELOPE 5 +CONSTANT: DMBIN_ENVMANUAL 6 +CONSTANT: DMBIN_AUTO 7 +CONSTANT: DMBIN_TRACTOR 8 +CONSTANT: DMBIN_SMALLFMT 9 +CONSTANT: DMBIN_LARGEFMT 10 +CONSTANT: DMBIN_LARGECAPACITY 11 +CONSTANT: DMBIN_CASSETTE 14 +CONSTANT: DMBIN_FORMSOURCE 15 +CONSTANT: DMBIN_LAST 15 +CONSTANT: DMBIN_USER 256 +CONSTANT: DMRES_DRAFT -1 +CONSTANT: DMRES_LOW -2 +CONSTANT: DMRES_MEDIUM -3 +CONSTANT: DMRES_HIGH -4 +CONSTANT: DMCOLOR_MONOCHROME 1 +CONSTANT: DMCOLOR_COLOR 2 +CONSTANT: DMDUP_SIMPLEX 1 +CONSTANT: DMDUP_VERTICAL 2 +CONSTANT: DMDUP_HORIZONTAL 3 +CONSTANT: DMTT_BITMAP 1 +CONSTANT: DMTT_DOWNLOAD 2 +CONSTANT: DMTT_SUBDEV 3 +CONSTANT: DMTT_DOWNLOAD_OUTLINE 4 +CONSTANT: DMCOLLATE_FALSE 0 +CONSTANT: DMCOLLATE_TRUE 1 +CONSTANT: DM_SPECVERSION 800 +CONSTANT: DM_GRAYSCALE 1 +CONSTANT: DM_INTERLACED 2 +CONSTANT: DM_UPDATE 1 +CONSTANT: DM_COPY 2 +CONSTANT: DM_PROMPT 4 +CONSTANT: DM_MODIFY 8 +ALIAS: DM_IN_BUFFER DM_MODIFY +ALIAS: DM_IN_PROMPT DM_PROMPT +ALIAS: DM_OUT_BUFFER DM_COPY +ALIAS: DM_OUT_DEFAULT DM_UPDATE +CONSTANT: DM_ORIENTATION HEX: 00000001 +CONSTANT: DM_PAPERSIZE HEX: 00000002 +CONSTANT: DM_PAPERLENGTH HEX: 00000004 +CONSTANT: DM_PAPERWIDTH HEX: 00000008 +CONSTANT: DM_SCALE HEX: 00000010 +CONSTANT: DM_POSITION HEX: 00000020 +CONSTANT: DM_COPIES HEX: 00000100 +CONSTANT: DM_DEFAULTSOURCE HEX: 00000200 +CONSTANT: DM_PRINTQUALITY HEX: 00000400 +CONSTANT: DM_COLOR HEX: 00000800 +CONSTANT: DM_DUPLEX HEX: 00001000 +CONSTANT: DM_YRESOLUTION HEX: 00002000 +CONSTANT: DM_TTOPTION HEX: 00004000 +CONSTANT: DM_COLLATE HEX: 00008000 +CONSTANT: DM_FORMNAME HEX: 00010000 +CONSTANT: DM_LOGPIXELS HEX: 00020000 +CONSTANT: DM_BITSPERPEL HEX: 00040000 +CONSTANT: DM_PELSWIDTH HEX: 00080000 +CONSTANT: DM_PELSHEIGHT HEX: 00100000 +CONSTANT: DM_DISPLAYFLAGS HEX: 00200000 +CONSTANT: DM_DISPLAYFREQUENCY HEX: 00400000 +CONSTANT: DM_ICMMETHOD HEX: 00800000 +CONSTANT: DM_ICMINTENT HEX: 01000000 +CONSTANT: DM_MEDIATYPE HEX: 02000000 +CONSTANT: DM_DITHERTYPE HEX: 04000000 +CONSTANT: DM_PANNINGWIDTH HEX: 08000000 +CONSTANT: DM_PANNINGHEIGHT HEX: 10000000 +CONSTANT: DM_DISPLAYFIXEDOUTPUT HEX: 20000000 +CONSTANT: DM_DISPLAYORIENTATION HEX: 00000080 +CONSTANT: DMDO_DEFAULT HEX: 00000000 +CONSTANT: DMDO_90 HEX: 00000001 +CONSTANT: DMDO_180 HEX: 00000002 +CONSTANT: DMDO_270 HEX: 00000003 +CONSTANT: DMDFO_DEFAULT HEX: 00000000 +CONSTANT: DMDFO_STRETCH HEX: 00000001 +CONSTANT: DMDFO_CENTER HEX: 00000002 +CONSTANT: DMICMMETHOD_NONE 1 +CONSTANT: DMICMMETHOD_SYSTEM 2 +CONSTANT: DMICMMETHOD_DRIVER 3 +CONSTANT: DMICMMETHOD_DEVICE 4 +CONSTANT: DMICMMETHOD_USER 256 +CONSTANT: DMICM_SATURATE 1 +CONSTANT: DMICM_CONTRAST 2 +CONSTANT: DMICM_COLORMETRIC 3 +CONSTANT: DMICM_USER 256 +CONSTANT: DMMEDIA_STANDARD 1 +CONSTANT: DMMEDIA_TRANSPARENCY 2 +CONSTANT: DMMEDIA_GLOSSY 3 +CONSTANT: DMMEDIA_USER 256 +CONSTANT: DMDITHER_NONE 1 +CONSTANT: DMDITHER_COARSE 2 +CONSTANT: DMDITHER_FINE 3 +CONSTANT: DMDITHER_LINEART 4 +CONSTANT: DMDITHER_ERRORDIFFUSION 5 +CONSTANT: DMDITHER_RESERVED6 6 +CONSTANT: DMDITHER_RESERVED7 7 +CONSTANT: DMDITHER_RESERVED8 8 +CONSTANT: DMDITHER_RESERVED9 9 +CONSTANT: DMDITHER_GRAYSCALE 10 +CONSTANT: DMDITHER_USER 256 +CONSTANT: GDI_ERROR HEX: FFFFFFFF +: HGDI_ERROR ( -- alien ) GDI_ERROR ; inline +CONSTANT: TMPF_FIXED_PITCH 1 +CONSTANT: TMPF_VECTOR 2 +CONSTANT: TMPF_TRUETYPE 4 +CONSTANT: TMPF_DEVICE 8 +CONSTANT: NTM_ITALIC 1 +CONSTANT: NTM_BOLD 32 +CONSTANT: NTM_REGULAR 64 +CONSTANT: TT_POLYGON_TYPE 24 +CONSTANT: TT_PRIM_LINE 1 +CONSTANT: TT_PRIM_QSPLINE 2 +CONSTANT: TT_PRIM_CSPLINE 3 +CONSTANT: FONTMAPPER_MAX 10 +CONSTANT: ENHMETA_STOCK_OBJECT HEX: 80000000 +CONSTANT: WGL_FONT_LINES 0 +CONSTANT: WGL_FONT_POLYGONS 1 +CONSTANT: LPD_DOUBLEBUFFER 1 +CONSTANT: LPD_STEREO 2 +CONSTANT: LPD_SUPPORT_GDI 16 +CONSTANT: LPD_SUPPORT_OPENGL 32 +CONSTANT: LPD_SHARE_DEPTH 64 +CONSTANT: LPD_SHARE_STENCIL 128 +CONSTANT: LPD_SHARE_ACCUM 256 +CONSTANT: LPD_SWAP_EXCHANGE 512 +CONSTANT: LPD_SWAP_COPY 1024 +CONSTANT: LPD_TRANSPARENT 4096 +CONSTANT: LPD_TYPE_RGBA 0 +CONSTANT: LPD_TYPE_COLORINDEX 1 +CONSTANT: WGL_SWAP_MAIN_PLANE 1 +CONSTANT: WGL_SWAP_OVERLAY1 2 +CONSTANT: WGL_SWAP_OVERLAY2 4 +CONSTANT: WGL_SWAP_OVERLAY3 8 +CONSTANT: WGL_SWAP_OVERLAY4 16 +CONSTANT: WGL_SWAP_OVERLAY5 32 +CONSTANT: WGL_SWAP_OVERLAY6 64 +CONSTANT: WGL_SWAP_OVERLAY7 128 +CONSTANT: WGL_SWAP_OVERLAY8 256 +CONSTANT: WGL_SWAP_OVERLAY9 512 +CONSTANT: WGL_SWAP_OVERLAY10 1024 +CONSTANT: WGL_SWAP_OVERLAY11 2048 +CONSTANT: WGL_SWAP_OVERLAY12 4096 +CONSTANT: WGL_SWAP_OVERLAY13 8192 +CONSTANT: WGL_SWAP_OVERLAY14 16384 +CONSTANT: WGL_SWAP_OVERLAY15 32768 +CONSTANT: WGL_SWAP_UNDERLAY1 65536 +CONSTANT: WGL_SWAP_UNDERLAY2 HEX: 20000 +CONSTANT: WGL_SWAP_UNDERLAY3 HEX: 40000 +CONSTANT: WGL_SWAP_UNDERLAY4 HEX: 80000 +CONSTANT: WGL_SWAP_UNDERLAY5 HEX: 100000 +CONSTANT: WGL_SWAP_UNDERLAY6 HEX: 200000 +CONSTANT: WGL_SWAP_UNDERLAY7 HEX: 400000 +CONSTANT: WGL_SWAP_UNDERLAY8 HEX: 800000 +CONSTANT: WGL_SWAP_UNDERLAY9 HEX: 1000000 +CONSTANT: WGL_SWAP_UNDERLAY10 HEX: 2000000 +CONSTANT: WGL_SWAP_UNDERLAY11 HEX: 4000000 +CONSTANT: WGL_SWAP_UNDERLAY12 HEX: 8000000 +CONSTANT: WGL_SWAP_UNDERLAY13 HEX: 10000000 +CONSTANT: WGL_SWAP_UNDERLAY14 HEX: 20000000 +CONSTANT: WGL_SWAP_UNDERLAY15 HEX: 40000000 +CONSTANT: AC_SRC_OVER HEX: 00 +CONSTANT: AC_SRC_ALPHA HEX: 01 +CONSTANT: AC_SRC_NO_PREMULT_ALPHA HEX: 01 +CONSTANT: AC_SRC_NO_ALPHA HEX: 02 +CONSTANT: AC_DST_NO_PREMULT_ALPHA HEX: 10 +CONSTANT: AC_DST_NO_ALPHA HEX: 20 +CONSTANT: LAYOUT_RTL 1 +CONSTANT: LAYOUT_BITMAPORIENTATIONPRESERVED 8 +CONSTANT: CS_ENABLE HEX: 00000001 +CONSTANT: CS_DISABLE HEX: 00000002 +CONSTANT: CS_DELETE_TRANSFORM HEX: 00000003 +CONSTANT: GRADIENT_FILL_RECT_H HEX: 00 +CONSTANT: GRADIENT_FILL_RECT_V HEX: 01 +CONSTANT: GRADIENT_FILL_TRIANGLE HEX: 02 +CONSTANT: GRADIENT_FILL_OP_FLAG HEX: ff +CONSTANT: COLORMATCHTOTARGET_EMBEDED HEX: 00000001 +CONSTANT: CREATECOLORSPACE_EMBEDED HEX: 00000001 +CONSTANT: SETICMPROFILE_EMBEDED HEX: 00000001 -CONSTANT: DIB_RGB_COLORS 0 -CONSTANT: DIB_PAL_COLORS 1 +CONSTANT: DISPLAY_DEVICE_ATTACHED_TO_DESKTOP HEX: 00000001 +CONSTANT: DISPLAY_DEVICE_MULTI_DRIVER HEX: 00000002 +CONSTANT: DISPLAY_DEVICE_PRIMARY_DEVICE HEX: 00000004 +CONSTANT: DISPLAY_DEVICE_MIRRORING_DRIVER HEX: 00000008 +CONSTANT: DISPLAY_DEVICE_VGA_COMPATIBLE HEX: 00000010 +CONSTANT: DISPLAY_DEVICE_REMOVABLE HEX: 00000020 +CONSTANT: DISPLAY_DEVICE_MODESPRUNED HEX: 08000000 + +CONSTANT: NTM_NONNEGATIVE_AC HEX: 00010000 +CONSTANT: NTM_PS_OPENTYPE HEX: 00020000 +CONSTANT: NTM_TT_OPENTYPE HEX: 00040000 +CONSTANT: NTM_MULTIPLEMASTER HEX: 00080000 +CONSTANT: NTM_TYPE1 HEX: 00100000 +CONSTANT: NTM_DSIG HEX: 00200000 + +CONSTANT: GGI_MARK_NONEXISTING_GLYPHS 1 LIBRARY: gdi32 @@ -100,7 +1335,8 @@ FUNCTION: HBITMAP CreateDIBSection ( HDC hdc, BITMAPINFO* pbmi, UINT iUsage, voi ! FUNCTION: CreateFontIndirectExA ! FUNCTION: CreateFontIndirectExW ! FUNCTION: CreateFontIndirectW -! FUNCTION: CreateFontW +FUNCTION: HFONT CreateFontW ( int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight, DWORD fdwItalic, DWORD fdwUnderline, DWORD fdwStrikeOut, DWORD fdwCharSet, DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCTSTR lpszFace ) ; +ALIAS: CreateFont CreateFontW ! FUNCTION: CreateHalftonePalette ! FUNCTION: CreateHatchBrush ! FUNCTION: CreateICA @@ -262,7 +1498,8 @@ DESTRUCTOR: DeleteObject ! FUNCTION: ExtFloodFill ! FUNCTION: ExtSelectClipRgn ! FUNCTION: ExtTextOutA -! FUNCTION: ExtTextOutW +FUNCTION: BOOL ExtTextOutW ( HDC hdc, int X, int Y, UINT fuOptions, RECT* lprc, LPCTSTR lpString, UINT cbCount, INT* lpDx ) ; +ALIAS: ExtTextOut ExtTextOutW ! FUNCTION: FillPath ! FUNCTION: FillRgn ! FUNCTION: FixBrushOrgEx @@ -486,7 +1723,8 @@ FUNCTION: HGDIOBJ GetStockObject ( int fnObject ) ; ! FUNCTION: GetTextFaceAliasW ! FUNCTION: GetTextFaceW ! FUNCTION: GetTextMetricsA -! FUNCTION: GetTextMetricsW +FUNCTION: BOOL GetTextMetricsW ( HDC hdc, LPTEXTMETRIC lptm ) ; +ALIAS: GetTextMetrics GetTextMetricsW ! FUNCTION: GetTransform ! FUNCTION: GetViewportExtEx ! FUNCTION: GetViewportOrgEx @@ -569,15 +1807,15 @@ FUNCTION: HGDIOBJ SelectObject ( HDC hdc, HGDIOBJ hgdiobj ) ; ! FUNCTION: SetBitmapAttributes ! FUNCTION: SetBitmapBits ! FUNCTION: SetBitmapDimensionEx -! FUNCTION: SetBkColor +FUNCTION: COLORREF SetBkColor ( HDC hdc, COLORREF color ) ; ! FUNCTION: SetBkMode ! FUNCTION: SetBoundsRect ! FUNCTION: SetBrushAttributes ! FUNCTION: SetBrushOrgEx ! FUNCTION: SetColorAdjustment ! FUNCTION: SetColorSpace -! FUNCTION: SetDCBrushColor -! FUNCTION: SetDCPenColor +FUNCTION: COLORREF SetDCBrushColor ( HDC hdc, COLORREF color ) ; +FUNCTION: COLORREF SetDCPenColor ( HDC hdc, COLORREF color ) ; ! FUNCTION: SetDeviceGammaRamp ! FUNCTION: SetDIBColorTable ! FUNCTION: SetDIBits @@ -608,7 +1846,8 @@ FUNCTION: BOOL SetPixelFormat ( HDC hDC, int iPixelFormat, PFD* ppfd ) ; ! FUNCTION: SetSystemPaletteUse ! FUNCTION: SetTextAlign ! FUNCTION: SetTextCharacterExtra -! FUNCTION: SetTextColor +FUNCTION: COLORREF SetTextColor ( HDC hdc, COLORREF crColor ) ; +! FUNCTION: SetTextColor ( HDC hDC, ! FUNCTION: SetTextJustification ! FUNCTION: SetViewportExtEx ! FUNCTION: SetViewportOrgEx diff --git a/basis/windows/offscreen/offscreen-tests.factor b/basis/windows/offscreen/offscreen-tests.factor new file mode 100755 index 0000000000..58273979b7 --- /dev/null +++ b/basis/windows/offscreen/offscreen-tests.factor @@ -0,0 +1,5 @@ +IN: windows.offscreen.tests +USING: windows.offscreen effects tools.test kernel images ; + +{ 1 1 } [ [ [ ] make-bitmap-image ] with-memory-dc ] must-infer-as +[ t ] [ [ { 10 10 } swap [ ] make-bitmap-image ] with-memory-dc image? ] unit-test diff --git a/basis/windows/offscreen/offscreen.factor b/basis/windows/offscreen/offscreen.factor old mode 100644 new mode 100755 index 4eee68c37a..6e65958220 --- a/basis/windows/offscreen/offscreen.factor +++ b/basis/windows/offscreen/offscreen.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: alien.c-types kernel combinators sequences math windows.gdi32 windows.types images destructors -accessors fry ; +accessors fry locals ; IN: windows.offscreen : (bitmap-info) ( dim -- BITMAPINFO ) @@ -22,26 +22,32 @@ IN: windows.offscreen } 2cleave ] keep ; -: make-offscreen-dc-and-bitmap ( dim -- hDC hBitmap bits ) - f CreateCompatibleDC +: make-bitmap ( dim dc -- hBitmap bits ) [ nip ] [ swap (bitmap-info) DIB_RGB_COLORS f [ f 0 CreateDIBSection ] keep *void* ] 2bi - [ 2dup SelectObject drop ] dip ; + [ [ SelectObject drop ] keep ] dip ; + +: make-offscreen-dc-and-bitmap ( dim -- dc hBitmap bits ) + [ f CreateCompatibleDC ] dip over make-bitmap ; : bitmap>byte-array ( bits dim -- byte-array ) product 4 * memory>byte-array ; : bitmap>image ( bits dim -- image ) [ bitmap>byte-array ] keep - swap >>dim swap >>bitmap XBGR >>component-order ; + + swap >>dim + swap >>bitmap + BGRX >>component-order + t >>upside-down? ; + +: with-memory-dc ( quot: ( hDC -- ) -- ) + [ [ f CreateCompatibleDC &DeleteDC ] dip call ] with-destructors ; inline -: make-bitmap-image ( dim quot: ( hDC -- ) -- image ) - '[ - [ - make-offscreen-dc-and-bitmap - [ &DeleteDC @ ] [ &DeleteObject drop ] [ ] tri* - ] keep bitmap>byte-array - ] with-destructors ; inline \ No newline at end of file +:: make-bitmap-image ( dim dc quot -- image ) + dim dc make-bitmap [ &DeleteObject drop ] dip + quot dip + dim bitmap>image ; inline \ No newline at end of file diff --git a/basis/windows/types/types.factor b/basis/windows/types/types.factor index ee74e47fea..20bae06f30 100755 --- a/basis/windows/types/types.factor +++ b/basis/windows/types/types.factor @@ -1,6 +1,7 @@ ! Copyright (C) 2005, 2006 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: alien alien.syntax namespaces kernel words ; +USING: alien alien.c-types alien.syntax namespaces kernel words +sequences math math.bitwise math.vectors colors ; IN: windows.types TYPEDEF: char CHAR @@ -244,14 +245,14 @@ C-STRUCT: RECT { "LONG" "right" } { "LONG" "bottom" } ; -! C-STRUCT: PAINTSTRUCT - ! { "HDC" " hdc" } - ! { "BOOL" "fErase" } - ! { "RECT" "rcPaint" } - ! { "BOOL" "fRestore" } - ! { "BOOL" "fIncUpdate" } - ! { "BYTE[32]" "rgbReserved" } -! ; +C-STRUCT: PAINTSTRUCT + { "HDC" " hdc" } + { "BOOL" "fErase" } + { "RECT" "rcPaint" } + { "BOOL" "fRestore" } + { "BOOL" "fIncUpdate" } + { "BYTE[32]" "rgbReserved" } +; C-STRUCT: BITMAPINFOHEADER { "DWORD" "biSize" } @@ -283,6 +284,10 @@ C-STRUCT: POINT { "LONG" "x" } { "LONG" "y" } ; +C-STRUCT: SIZE + { "LONG" "cx" } + { "LONG" "cy" } ; + C-STRUCT: MSG { "HWND" "hWnd" } { "UINT" "message" } @@ -327,6 +332,14 @@ C-STRUCT: RECT { "LONG" "right" } { "LONG" "bottom" } ; +: ( loc dim -- RECT ) + over v+ + "RECT" + over first over set-RECT-right + swap second over set-RECT-bottom + over first over set-RECT-left + swap second over set-RECT-top ; + TYPEDEF: RECT* PRECT TYPEDEF: RECT* LPRECT TYPEDEF: PIXELFORMATDESCRIPTOR PFD @@ -363,3 +376,36 @@ C-STRUCT: ACCEL { "WORD" "key" } { "WORD" "cmd" } ; TYPEDEF: ACCEL* LPACCEL + +TYPEDEF: DWORD COLORREF +TYPEDEF: DWORD* LPCOLORREF + +: RGB ( r g b -- COLORREF ) + { 16 8 0 } bitfield ; inline + +: color>RGB ( color -- COLORREF ) + >rgba-components drop [ 255 * >integer ] tri@ RGB ; + +C-STRUCT: TEXTMETRICW + { "LONG" "tmHeight" } + { "LONG" "tmAscent" } + { "LONG" "tmDescent" } + { "LONG" "tmInternalLeading" } + { "LONG" "tmExternalLeading" } + { "LONG" "tmAveCharWidth" } + { "LONG" "tmMaxCharWidth" } + { "LONG" "tmWeight" } + { "LONG" "tmOverhang" } + { "LONG" "tmDigitizedAspectX" } + { "LONG" "tmDigitizedAspectY" } + { "WCHAR" "tmFirstChar" } + { "WCHAR" "tmLastChar" } + { "WCHAR" "tmDefaultChar" } + { "WCHAR" "tmBreakChar" } + { "BYTE" "tmItalic" } + { "BYTE" "tmUnderlined" } + { "BYTE" "tmStruckOut" } + { "BYTE" "tmPitchAndFamily" } + { "BYTE" "tmCharSet" } ; + +TYPEDEF: TEXTMETRICW* LPTEXTMETRIC diff --git a/basis/windows/uniscribe/uniscribe.factor b/basis/windows/uniscribe/uniscribe.factor old mode 100644 new mode 100755 index 5d24601555..cfd723ae8f --- a/basis/windows/uniscribe/uniscribe.factor +++ b/basis/windows/uniscribe/uniscribe.factor @@ -1,65 +1,95 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math sequences io.encodings.string io.encodings.utf16n -accessors arrays destructors alien.c-types windows windows.usp10 -windows.offscreen ; +USING: kernel assocs math sequences fry io.encodings.string +io.encodings.utf16n accessors arrays combinators destructors +cache namespaces init images.normalization alien.c-types locals +windows windows.usp10 windows.offscreen windows.gdi32 +windows.ole32 windows.types windows.fonts ; IN: windows.uniscribe -TUPLE: script-string pssa size image ; +TUPLE: script-string metrics ssa size image string disposed ; : make-script-string ( dc string -- script-string ) [ utf16n encode ] ! pString [ length ] bi ! cString - dup 1.5 * 16 + ! cGlyphs -- MSDN says this is "recommended size" + dup 1.5 * 16 + >integer ! cGlyphs -- MSDN says this is "recommended size" -1 ! iCharset -- Unicode SSA_GLYPHS ! dwFlags - ... ! iReqWidth + 0 ! iReqWidth f ! psControl f ! psState f ! piDx f ! pTabdef - ... ! pbInClass + f ! pbInClass f ! pssa [ ScriptStringAnalyse ] keep - [ win32-error=0/f ] [ |ScriptStringFree ] bi* ; + [ ole32-error ] [ |ScriptStringFree *void* ] bi* ; -: draw-script-string ( script-string -- bitmap ) +: draw-script-string ( script-string -- ) ! ssa 0 ! iX 0 ! iY - ETO_OPAQUE ! uOptions ... ???? + 0 ! uOptions f ! prc 0 ! iMinSel 0 ! iMaxSel - f ! fDisabled - ScriptStringOut ; + FALSE ! fDisabled + ScriptStringOut ole32-error ; -: ( string -- script-string ) - [ - ... dim ... [ - make-script-string |ScriptStringFree - [ ] - [ draw-script-string ] - [ - ScriptString_pSize - dup win32-error=0/f - [ SIZE-cx ] [ SIZE-cy ] bi 2array - ] tri - ] make-bitmap-image - script-string boa - ] with-destructors ; +: set-dc-font ( dc font -- ) + [ cache-font SelectObject win32-error=0/f ] + [ background>> color>RGB SetBkColor drop ] + [ foreground>> color>RGB SetTextColor drop ] 2tri ; -M: script-string dispose* pssa>> ScriptStringFree win32-error=0/f ; +: script-string-size ( ssa -- dim ) + ScriptString_pSize + dup win32-error=0/f + [ SIZE-cx ] [ SIZE-cy ] bi 2array ; -: line-offset>x ( offset script-string -- x ) - pssa>> ! ssa - swap ! icp - ... ! fTrailing - 0 [ ScriptStringCPtoX win32-error=0/f ] keep *int ; +: dc-metrics ( dc -- metrics ) + "TEXTMETRICW" [ GetTextMetrics drop ] keep + TEXTMETRIC>metrics ; -: line-x>offset ( x script-string -- offset trailing ) - pssa>> ! ssa +:: ( font string -- script-string ) + #! Comments annotate BOA constructor arguments + [| dc | + dc font set-dc-font + dc dc-metrics ! metrics + dc string make-script-string dup :> ssa ! ssa + dup script-string-size ! size + dup dc [ ssa draw-script-string ] make-bitmap-image + normalize-image ! image + string ! string + f script-string boa + ] with-memory-dc ; + +: text-position ( script-string -- loc ) drop { 0 0 } ; + +M: script-string dispose* ssa>> ScriptStringFree ole32-error ; + +SYMBOL: cached-script-strings + +: cached-script-string ( string font -- script-string ) + cached-script-strings get-global [ ] 2cache ; + +[ cached-script-strings set-global ] +"windows.uniscribe" add-init-hook + +: line-offset>x ( n script-string -- x ) + 2dup string>> length = [ + ssa>> ! ssa + swap 1- ! icp + TRUE ! fTrailing + ] [ + ssa>> + swap ! icp + FALSE ! fTrailing + ] if + 0 [ ScriptStringCPtoX ole32-error ] keep *int ; + +: x>line-offset ( x script-string -- n trailing ) + ssa>> ! ssa swap ! iX 0 ! pCh 0 ! piTrailing - [ ScriptStringXtoCP win32-error=0/f ] 2keep [ *int ] bi@ ; \ No newline at end of file + [ ScriptStringXtoCP ole32-error ] 2keep [ *int ] bi@ ; \ No newline at end of file