Merge branch 'master' of git://factorcode.org/git/factor
commit
92cc670c28
|
@ -113,12 +113,6 @@ the command prompt using the console application:
|
||||||
|
|
||||||
factor.com -i=boot.<cpu>.image
|
factor.com -i=boot.<cpu>.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:
|
|
||||||
|
|
||||||
<http://factorcode.org/dlls>
|
|
||||||
|
|
||||||
Once bootstrapped, double-clicking factor.exe or factor.com starts
|
Once bootstrapped, double-clicking factor.exe or factor.com starts
|
||||||
the Factor UI.
|
the Factor UI.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
! Copyright (C) 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: functors destructors accessors kernel parser words ;
|
USING: functors destructors accessors kernel parser words
|
||||||
|
effects generalizations sequences ;
|
||||||
IN: alien.destructors
|
IN: alien.destructors
|
||||||
|
|
||||||
SLOT: alien
|
SLOT: alien
|
||||||
|
@ -11,6 +12,7 @@ F-destructor DEFINES-CLASS ${F}-destructor
|
||||||
<F-destructor> DEFINES <${F}-destructor>
|
<F-destructor> DEFINES <${F}-destructor>
|
||||||
&F DEFINES &${F}
|
&F DEFINES &${F}
|
||||||
|F DEFINES |${F}
|
|F DEFINES |${F}
|
||||||
|
N [ F stack-effect out>> length ]
|
||||||
|
|
||||||
WHERE
|
WHERE
|
||||||
|
|
||||||
|
@ -18,7 +20,7 @@ TUPLE: F-destructor alien disposed ;
|
||||||
|
|
||||||
: <F-destructor> ( alien -- destructor ) f F-destructor boa ; inline
|
: <F-destructor> ( alien -- destructor ) f F-destructor boa ; inline
|
||||||
|
|
||||||
M: F-destructor dispose* alien>> F ;
|
M: F-destructor dispose* alien>> F N ndrop ;
|
||||||
|
|
||||||
: &F ( alien -- alien ) dup <F-destructor> &dispose drop ; inline
|
: &F ( alien -- alien ) dup <F-destructor> &dispose drop ; inline
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,9 @@ USING: accessors fry generalizations kernel macros math.order
|
||||||
stack-checker math ;
|
stack-checker math ;
|
||||||
IN: combinators.smart
|
IN: combinators.smart
|
||||||
|
|
||||||
|
MACRO: drop-outputs ( quot -- quot' )
|
||||||
|
dup infer out>> '[ @ _ ndrop ] ;
|
||||||
|
|
||||||
MACRO: output>sequence ( quot exemplar -- newquot )
|
MACRO: output>sequence ( quot exemplar -- newquot )
|
||||||
[ dup infer out>> ] dip
|
[ dup infer out>> ] dip
|
||||||
'[ @ _ _ nsequence ] ;
|
'[ @ _ _ nsequence ] ;
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
! Copyright (C) 2009 Doug Coleman.
|
! Copyright (C) 2009 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: combinators kernel ;
|
USING: combinators kernel accessors ;
|
||||||
IN: images
|
IN: images
|
||||||
|
|
||||||
SINGLETONS: L BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR
|
SINGLETONS: L BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR
|
||||||
R16G16B16 R32G32B32 R16G16B16A16 R32G32B32A32 ;
|
R16G16B16 R32G32B32 R16G16B16A16 R32G32B32A32 ;
|
||||||
|
|
||||||
|
UNION: alpha-channel BGRA RGBA ABGR ARGB R16G16B16A16 R32G32B32A32 ;
|
||||||
|
|
||||||
: bytes-per-pixel ( component-order -- n )
|
: bytes-per-pixel ( component-order -- n )
|
||||||
{
|
{
|
||||||
{ L [ 1 ] }
|
{ L [ 1 ] }
|
||||||
|
@ -29,4 +31,6 @@ TUPLE: image dim component-order upside-down? bitmap ;
|
||||||
|
|
||||||
: <image> ( -- image ) image new ; inline
|
: <image> ( -- image ) image new ; inline
|
||||||
|
|
||||||
|
: has-alpha? ( image -- ? ) component-order>> alpha-channel? ;
|
||||||
|
|
||||||
GENERIC: load-image* ( path tuple -- image )
|
GENERIC: load-image* ( path tuple -- image )
|
|
@ -61,6 +61,18 @@ M: ARGB normalize-component-order*
|
||||||
M: ABGR normalize-component-order*
|
M: ABGR normalize-component-order*
|
||||||
drop ARGB>RGBA BGRA>RGBA ;
|
drop ARGB>RGBA BGRA>RGBA ;
|
||||||
|
|
||||||
|
: fix-XBGR ( bitmap -- bitmap' )
|
||||||
|
dup 4 <sliced-groups> [ [ 255 0 ] dip set-nth ] each ;
|
||||||
|
|
||||||
|
M: XBGR normalize-component-order*
|
||||||
|
drop fix-XBGR ABGR normalize-component-order* ;
|
||||||
|
|
||||||
|
: fix-BGRX ( bitmap -- bitmap' )
|
||||||
|
dup 4 <sliced-groups> [ [ 255 3 ] dip set-nth ] each ;
|
||||||
|
|
||||||
|
M: BGRX normalize-component-order*
|
||||||
|
drop fix-BGRX BGRA normalize-component-order* ;
|
||||||
|
|
||||||
: normalize-scan-line-order ( image -- image )
|
: normalize-scan-line-order ( image -- image )
|
||||||
dup upside-down?>> [
|
dup upside-down?>> [
|
||||||
dup dim>> first 4 * '[
|
dup dim>> first 4 * '[
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
USING: accessors assocs cache colors.constants destructors fry kernel
|
USING: accessors assocs cache colors.constants destructors fry kernel
|
||||||
opengl opengl.gl combinators images images.tesselation grouping
|
opengl opengl.gl combinators images images.tesselation grouping
|
||||||
specialized-arrays.float locals sequences math math.vectors
|
specialized-arrays.float locals sequences math math.vectors
|
||||||
math.matrices generalizations fry columns ;
|
math.matrices generalizations fry columns arrays ;
|
||||||
IN: opengl.textures
|
IN: opengl.textures
|
||||||
|
|
||||||
: gen-texture ( -- id ) [ glGenTextures ] (gen-gl-object) ;
|
: gen-texture ( -- id ) [ glGenTextures ] (gen-gl-object) ;
|
||||||
|
@ -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: 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: 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: 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 -- )
|
GENERIC: draw-texture ( texture -- )
|
||||||
|
|
||||||
|
@ -24,7 +25,7 @@ GENERIC: draw-scaled-texture ( dim texture -- )
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
TUPLE: single-texture loc dim texture-coords texture display-list disposed ;
|
TUPLE: single-texture image loc dim texture-coords texture display-list disposed ;
|
||||||
|
|
||||||
: repeat-last ( seq n -- seq' )
|
: repeat-last ( seq n -- seq' )
|
||||||
over peek pad-tail concat ;
|
over peek pad-tail concat ;
|
||||||
|
@ -44,7 +45,7 @@ TUPLE: single-texture loc dim texture-coords texture display-list disposed ;
|
||||||
tri * group ; inline
|
tri * group ; inline
|
||||||
|
|
||||||
: power-of-2-image ( image -- image )
|
: power-of-2-image ( image -- image )
|
||||||
dup dim>> [ 0 = ] all? [
|
dup dim>> [ [ 0 = ] [ power-of-2? ] bi or ] all? [
|
||||||
clone dup
|
clone dup
|
||||||
[ image-rows ]
|
[ image-rows ]
|
||||||
[ dim>> [ next-power-of-2 ] map ]
|
[ dim>> [ next-power-of-2 ] map ]
|
||||||
|
@ -92,26 +93,30 @@ TUPLE: single-texture loc dim texture-coords texture display-list disposed ;
|
||||||
|
|
||||||
: draw-textured-rect ( dim texture -- )
|
: draw-textured-rect ( dim texture -- )
|
||||||
[
|
[
|
||||||
(draw-textured-rect)
|
[ image>> has-alpha? [ GL_BLEND glDisable ] unless ]
|
||||||
GL_TEXTURE_2D 0 glBindTexture
|
[ (draw-textured-rect) GL_TEXTURE_2D 0 glBindTexture ]
|
||||||
|
[ image>> has-alpha? [ GL_BLEND glEnable ] unless ]
|
||||||
|
tri
|
||||||
] with-texturing ;
|
] with-texturing ;
|
||||||
|
|
||||||
: texture-coords ( dim -- coords )
|
: texture-coords ( texture -- coords )
|
||||||
[ dup next-power-of-2 /f ] map
|
[
|
||||||
{ { 0 0 } { 1 0 } { 1 1 } { 0 1 } } [ v* ] with map
|
[ dim>> ] [ image>> dim>> ] bi v/
|
||||||
|
{ { 0 0 } { 1 0 } { 1 1 } { 0 1 } }
|
||||||
|
[ v* ] with map
|
||||||
|
] keep
|
||||||
|
image>> upside-down?>> [ [ first2 1 swap - 2array ] map ] when
|
||||||
float-array{ } join ;
|
float-array{ } join ;
|
||||||
|
|
||||||
: make-texture-display-list ( texture -- dlist )
|
: make-texture-display-list ( texture -- dlist )
|
||||||
GL_COMPILE [ [ dim>> ] keep draw-textured-rect ] make-dlist ;
|
GL_COMPILE [ [ dim>> ] keep draw-textured-rect ] make-dlist ;
|
||||||
|
|
||||||
: <single-texture> ( image loc -- texture )
|
: <single-texture> ( image loc dim -- texture )
|
||||||
single-texture new swap >>loc
|
[ power-of-2-image ] 2dip
|
||||||
swap
|
single-texture new swap >>dim swap >>loc swap >>image
|
||||||
[ dim>> >>dim ] keep
|
dup image>> dim>> product 0 = [
|
||||||
[ dim>> product 0 = ] keep '[
|
dup texture-coords >>texture-coords
|
||||||
_
|
dup image>> make-texture >>texture
|
||||||
[ dim>> texture-coords >>texture-coords ]
|
|
||||||
[ power-of-2-image make-texture >>texture ] bi
|
|
||||||
dup make-texture-display-list >>display-list
|
dup make-texture-display-list >>display-list
|
||||||
] unless ;
|
] unless ;
|
||||||
|
|
||||||
|
@ -133,19 +138,20 @@ TUPLE: multi-texture grid display-list loc disposed ;
|
||||||
|
|
||||||
: <texture-grid> ( image-grid loc -- grid )
|
: <texture-grid> ( image-grid loc -- grid )
|
||||||
[ dup image-locs ] dip
|
[ dup image-locs ] dip
|
||||||
'[ [ _ v+ <single-texture> |dispose ] 2map ] 2map ;
|
'[ [ _ v+ over dim>> <single-texture> |dispose ] 2map ] 2map ;
|
||||||
|
|
||||||
: draw-textured-grid ( grid -- )
|
: draw-textured-grid ( grid -- )
|
||||||
[ [ [ dim>> ] keep (draw-textured-rect) ] each ] each ;
|
[ [ [ dim>> ] keep (draw-textured-rect) ] each ] each ;
|
||||||
|
|
||||||
|
: grid-has-alpha? ( grid -- ? )
|
||||||
|
first first image>> has-alpha? ;
|
||||||
|
|
||||||
: make-textured-grid-display-list ( grid -- dlist )
|
: make-textured-grid-display-list ( grid -- dlist )
|
||||||
GL_COMPILE [
|
GL_COMPILE [
|
||||||
[
|
[
|
||||||
[
|
[ grid-has-alpha? [ GL_BLEND glDisable ] unless ]
|
||||||
[
|
[ [ [ [ dim>> ] keep (draw-textured-rect) ] each ] each ]
|
||||||
[ dim>> ] keep (draw-textured-rect)
|
[ grid-has-alpha? [ GL_BLEND glEnable ] unless ] tri
|
||||||
] each
|
|
||||||
] each
|
|
||||||
GL_TEXTURE_2D 0 glBindTexture
|
GL_TEXTURE_2D 0 glBindTexture
|
||||||
] with-texturing
|
] with-texturing
|
||||||
] make-dlist ;
|
] make-dlist ;
|
||||||
|
@ -163,11 +169,14 @@ M: multi-texture draw-texture display-list>> [ glCallList ] when* ;
|
||||||
|
|
||||||
M: multi-texture dispose* grid>> [ [ dispose ] each ] each ;
|
M: multi-texture dispose* grid>> [ [ dispose ] each ] each ;
|
||||||
|
|
||||||
CONSTANT: max-texture-size { 256 256 }
|
CONSTANT: max-texture-size { 512 512 }
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
: <texture> ( image loc -- texture )
|
: small-texture? ( dim -- ? )
|
||||||
over dim>> max-texture-size [ <= ] 2all?
|
max-texture-size [ <= ] 2all? ;
|
||||||
|
|
||||||
|
: <texture> ( image loc dim -- texture )
|
||||||
|
pick dim>> small-texture?
|
||||||
[ <single-texture> ]
|
[ <single-texture> ]
|
||||||
[ [ max-texture-size tesselate ] dip <multi-texture> ] if ;
|
[ drop [ max-texture-size tesselate ] dip <multi-texture> ] if ;
|
|
@ -157,7 +157,8 @@ IN: tools.deploy.shaker
|
||||||
"specializer"
|
"specializer"
|
||||||
"step-into"
|
"step-into"
|
||||||
"step-into?"
|
"step-into?"
|
||||||
"superclass"
|
! UI needs this
|
||||||
|
! "superclass"
|
||||||
"transform-n"
|
"transform-n"
|
||||||
"transform-quot"
|
"transform-quot"
|
||||||
"tuple-dispatch-generic"
|
"tuple-dispatch-generic"
|
||||||
|
|
|
@ -9,11 +9,6 @@ IN: tools.deploy.windows
|
||||||
: copy-dll ( bundle-name -- )
|
: copy-dll ( bundle-name -- )
|
||||||
"resource:factor.dll" swap copy-file-into ;
|
"resource:factor.dll" swap copy-file-into ;
|
||||||
|
|
||||||
: copy-pango ( bundle-name -- )
|
|
||||||
"resource:build-support/dlls.txt" ascii file-lines
|
|
||||||
[ "resource:" prepend-path ] map
|
|
||||||
swap copy-files-into ;
|
|
||||||
|
|
||||||
:: copy-vm ( executable bundle-name extension -- vm )
|
:: copy-vm ( executable bundle-name extension -- vm )
|
||||||
vm "." split1-last drop extension append
|
vm "." split1-last drop extension append
|
||||||
bundle-name executable ".exe" append append-path
|
bundle-name executable ".exe" append append-path
|
||||||
|
@ -22,9 +17,7 @@ IN: tools.deploy.windows
|
||||||
: create-exe-dir ( vocab bundle-name -- vm )
|
: create-exe-dir ( vocab bundle-name -- vm )
|
||||||
dup copy-dll
|
dup copy-dll
|
||||||
deploy-ui? get [
|
deploy-ui? get [
|
||||||
[ copy-pango ]
|
[ "" copy-theme ] [ ".exe" copy-vm ] bi
|
||||||
[ "" copy-theme ]
|
|
||||||
[ ".exe" copy-vm ] tri
|
|
||||||
] [ ".com" copy-vm ] if ;
|
] [ ".com" copy-vm ] if ;
|
||||||
|
|
||||||
M: winnt deploy*
|
M: winnt deploy*
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
! Copyright (C) 2005, 2006 Doug Coleman.
|
! Copyright (C) 2005, 2006 Doug Coleman.
|
||||||
! Portions copyright (C) 2007, 2009 Slava Pestov.
|
! Portions copyright (C) 2007, 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien alien.c-types alien.strings arrays assocs ui
|
USING: alien alien.c-types alien.strings arrays assocs ui ui.private
|
||||||
ui.private ui.gadgets ui.gadgets.private ui.backend
|
ui.gadgets ui.gadgets.private ui.backend ui.clipboards
|
||||||
ui.clipboards ui.gadgets.worlds ui.gestures ui.event-loop io
|
ui.gadgets.worlds ui.gestures ui.event-loop io kernel math
|
||||||
kernel math math.vectors namespaces make sequences strings
|
math.vectors namespaces make sequences strings vectors words
|
||||||
vectors words windows.kernel32 windows.gdi32 windows.user32
|
windows.kernel32 windows.gdi32 windows.user32 windows.opengl32
|
||||||
windows.opengl32 windows.messages windows.types windows.nt
|
windows.messages windows.types windows.offscreen windows.nt windows
|
||||||
windows threads libc combinators fry combinators.short-circuit
|
threads libc combinators fry combinators.short-circuit continuations
|
||||||
continuations command-line shuffle opengl ui.render ascii
|
command-line shuffle opengl ui.render ascii math.bitwise locals
|
||||||
math.bitwise locals accessors math.rectangles math.order ascii
|
accessors math.rectangles math.order ascii calendar
|
||||||
calendar io.encodings.utf16n ;
|
io.encodings.utf16n ;
|
||||||
IN: ui.backend.windows
|
IN: ui.backend.windows
|
||||||
|
|
||||||
SINGLETON: windows-ui-backend
|
SINGLETON: windows-ui-backend
|
||||||
|
@ -433,12 +433,7 @@ M: windows-ui-backend do-events
|
||||||
style 0 ex-style AdjustWindowRectEx win32-error=0/f ;
|
style 0 ex-style AdjustWindowRectEx win32-error=0/f ;
|
||||||
|
|
||||||
: make-RECT ( world -- RECT )
|
: make-RECT ( world -- RECT )
|
||||||
[ window-loc>> dup ] [ dim>> ] bi v+
|
[ window-loc>> ] [ dim>> ] bi <RECT> ;
|
||||||
"RECT" <c-object>
|
|
||||||
over first over set-RECT-right
|
|
||||||
swap second over set-RECT-bottom
|
|
||||||
over first over set-RECT-left
|
|
||||||
swap second over set-RECT-top ;
|
|
||||||
|
|
||||||
: default-position-RECT ( RECT -- )
|
: default-position-RECT ( RECT -- )
|
||||||
dup get-RECT-dimensions [ 2drop ] 2dip
|
dup get-RECT-dimensions [ 2drop ] 2dip
|
||||||
|
@ -501,35 +496,12 @@ M: windows-ui-backend (open-window) ( world -- )
|
||||||
hWnd>> show-window ;
|
hWnd>> show-window ;
|
||||||
|
|
||||||
M: win-base select-gl-context ( handle -- )
|
M: win-base select-gl-context ( handle -- )
|
||||||
[ hDC>> ] keep hRC>> wglMakeCurrent win32-error=0/f
|
[ hDC>> ] [ hRC>> ] bi wglMakeCurrent win32-error=0/f
|
||||||
GdiFlush drop ;
|
GdiFlush drop ;
|
||||||
|
|
||||||
M: win-base flush-gl-context ( handle -- )
|
M: win-base flush-gl-context ( handle -- )
|
||||||
hDC>> SwapBuffers win32-error=0/f ;
|
hDC>> SwapBuffers win32-error=0/f ;
|
||||||
|
|
||||||
: (bitmap-info) ( dim -- BITMAPINFO )
|
|
||||||
"BITMAPINFO" <c-object> [
|
|
||||||
BITMAPINFO-bmiHeader {
|
|
||||||
[ nip "BITMAPINFOHEADER" heap-size swap set-BITMAPINFOHEADER-biSize ]
|
|
||||||
[ [ first ] dip set-BITMAPINFOHEADER-biWidth ]
|
|
||||||
[ [ second ] dip set-BITMAPINFOHEADER-biHeight ]
|
|
||||||
[ nip 1 swap set-BITMAPINFOHEADER-biPlanes ]
|
|
||||||
[ nip 32 swap set-BITMAPINFOHEADER-biBitCount ]
|
|
||||||
[ nip BI_RGB swap set-BITMAPINFOHEADER-biCompression ]
|
|
||||||
[ [ first2 * 4 * ] dip set-BITMAPINFOHEADER-biSizeImage ]
|
|
||||||
[ nip 72 swap set-BITMAPINFOHEADER-biXPelsPerMeter ]
|
|
||||||
[ nip 72 swap set-BITMAPINFOHEADER-biYPelsPerMeter ]
|
|
||||||
[ nip 0 swap set-BITMAPINFOHEADER-biClrUsed ]
|
|
||||||
[ nip 0 swap set-BITMAPINFOHEADER-biClrImportant ]
|
|
||||||
} 2cleave
|
|
||||||
] keep ;
|
|
||||||
|
|
||||||
: make-offscreen-dc-and-bitmap ( dim -- hDC hBitmap bits )
|
|
||||||
f CreateCompatibleDC
|
|
||||||
dup rot (bitmap-info) DIB_RGB_COLORS f <void*>
|
|
||||||
[ f 0 CreateDIBSection ] keep *void*
|
|
||||||
[ 2dup SelectObject drop ] dip ;
|
|
||||||
|
|
||||||
: setup-offscreen-gl ( dim -- hDC hRC hBitmap bits )
|
: setup-offscreen-gl ( dim -- hDC hRC hBitmap bits )
|
||||||
make-offscreen-dc-and-bitmap [
|
make-offscreen-dc-and-bitmap [
|
||||||
[ dup offscreen-pfd-dwFlags setup-pixel-format ]
|
[ dup offscreen-pfd-dwFlags setup-pixel-format ]
|
||||||
|
@ -548,13 +520,12 @@ M: windows-ui-backend (close-offscreen-buffer) ( handle -- )
|
||||||
! each pixel; it's left as zero
|
! each pixel; it's left as zero
|
||||||
|
|
||||||
: (make-opaque) ( byte-array -- byte-array' )
|
: (make-opaque) ( byte-array -- byte-array' )
|
||||||
[ length 4 / ]
|
[ length 4 /i ]
|
||||||
[ '[ 255 swap 4 * 3 + _ set-nth ] each ]
|
[ '[ 255 swap 4 * 3 + _ set-nth ] each ]
|
||||||
[ ] tri ;
|
[ ] tri ;
|
||||||
|
|
||||||
: (opaque-pixels) ( world -- pixels )
|
: (opaque-pixels) ( world -- pixels )
|
||||||
[ handle>> bits>> ] [ dim>> first2 * 4 * ] bi
|
[ handle>> bits>> ] [ dim>> ] bi bitmap>byte-array (make-opaque) ;
|
||||||
memory>byte-array (make-opaque) ;
|
|
||||||
|
|
||||||
M: windows-ui-backend offscreen-pixels ( world -- alien w h )
|
M: windows-ui-backend offscreen-pixels ( world -- alien w h )
|
||||||
[ (opaque-pixels) ] [ dim>> first2 ] bi ;
|
[ (opaque-pixels) ] [ dim>> first2 ] bi ;
|
||||||
|
|
|
@ -20,7 +20,7 @@ PRIVATE>
|
||||||
|
|
||||||
: rendered-image ( path -- texture )
|
: rendered-image ( path -- texture )
|
||||||
world get image-texture-cache
|
world get image-texture-cache
|
||||||
[ cached-image { 0 0 } <texture> ] cache ;
|
[ cached-image [ { 0 0 } ] keep dim>> <texture> ] cache ;
|
||||||
|
|
||||||
: draw-image ( image-name -- )
|
: draw-image ( image-name -- )
|
||||||
rendered-image draw-texture ;
|
rendered-image draw-texture ;
|
||||||
|
|
|
@ -10,9 +10,6 @@ IN: ui.text.core-text
|
||||||
|
|
||||||
SINGLETON: core-text-renderer
|
SINGLETON: core-text-renderer
|
||||||
|
|
||||||
M: core-text-renderer init-text-rendering
|
|
||||||
<cache-assoc> >>text-handle drop ;
|
|
||||||
|
|
||||||
M: core-text-renderer string-dim
|
M: core-text-renderer string-dim
|
||||||
[ " " string-dim { 0 1 } v* ]
|
[ " " string-dim { 0 1 } v* ]
|
||||||
[ cached-line dim>> ]
|
[ cached-line dim>> ]
|
||||||
|
@ -22,9 +19,11 @@ M: core-text-renderer flush-layout-cache
|
||||||
cached-lines get purge-cache ;
|
cached-lines get purge-cache ;
|
||||||
|
|
||||||
: rendered-line ( font string -- texture )
|
: rendered-line ( font string -- texture )
|
||||||
world get world-text-handle
|
world get world-text-handle [
|
||||||
[ cached-line [ image>> ] [ loc>> ] bi <texture> ]
|
cached-line
|
||||||
2cache ;
|
[ image>> ] [ loc>> ] [ image>> dim>> ] tri
|
||||||
|
<texture>
|
||||||
|
] 2cache ;
|
||||||
|
|
||||||
M: core-text-renderer draw-string ( font string -- )
|
M: core-text-renderer draw-string ( font string -- )
|
||||||
rendered-line draw-texture ;
|
rendered-line draw-texture ;
|
||||||
|
|
|
@ -7,9 +7,6 @@ IN: ui.text.pango
|
||||||
|
|
||||||
SINGLETON: pango-renderer
|
SINGLETON: pango-renderer
|
||||||
|
|
||||||
M: pango-renderer init-text-rendering
|
|
||||||
<cache-assoc> >>text-handle drop ;
|
|
||||||
|
|
||||||
M: pango-renderer string-dim
|
M: pango-renderer string-dim
|
||||||
[ " " string-dim { 0 1 } v* ]
|
[ " " string-dim { 0 1 } v* ]
|
||||||
[ cached-layout logical-rect>> dim>> [ >integer ] map ] if-empty ;
|
[ cached-layout logical-rect>> dim>> [ >integer ] map ] if-empty ;
|
||||||
|
@ -18,9 +15,11 @@ M: pango-renderer flush-layout-cache
|
||||||
cached-layouts get purge-cache ;
|
cached-layouts get purge-cache ;
|
||||||
|
|
||||||
: rendered-layout ( font string -- texture )
|
: rendered-layout ( font string -- texture )
|
||||||
world get world-text-handle
|
world get world-text-handle [
|
||||||
[ cached-layout [ image>> ] [ text-position vneg ] bi <texture> ]
|
cached-layout
|
||||||
2cache ;
|
[ image>> ] [ text-position vneg ] [ image>> dim>> ] tri
|
||||||
|
<texture>
|
||||||
|
] 2cache ;
|
||||||
|
|
||||||
M: pango-renderer draw-string ( font string -- )
|
M: pango-renderer draw-string ( font string -- )
|
||||||
rendered-layout draw-texture ;
|
rendered-layout draw-texture ;
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
UI text rendering implementation using cross-platform Pango library
|
|
@ -1,6 +1,22 @@
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
! Copyright (C) 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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
|
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
|
||||||
|
|
|
@ -1,17 +1,16 @@
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
! Copyright (C) 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel arrays sequences math math.order opengl opengl.gl
|
USING: kernel arrays sequences math math.order cache opengl
|
||||||
strings fonts colors accessors namespaces ui.gadgets.worlds ;
|
opengl.gl strings fonts colors accessors namespaces
|
||||||
|
ui.gadgets.worlds ;
|
||||||
IN: ui.text
|
IN: ui.text
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
SYMBOL: font-renderer
|
SYMBOL: font-renderer
|
||||||
|
|
||||||
HOOK: init-text-rendering font-renderer ( world -- )
|
|
||||||
|
|
||||||
: world-text-handle ( world -- handle )
|
: world-text-handle ( world -- handle )
|
||||||
dup text-handle>> [ dup init-text-rendering ] unless
|
dup text-handle>> [ <cache-assoc> >>text-handle ] unless
|
||||||
text-handle>> ;
|
text-handle>> ;
|
||||||
|
|
||||||
HOOK: flush-layout-cache font-renderer ( -- )
|
HOOK: flush-layout-cache font-renderer ( -- )
|
||||||
|
@ -79,7 +78,7 @@ USING: vocabs.loader namespaces system combinators ;
|
||||||
"ui-backend" get [
|
"ui-backend" get [
|
||||||
{
|
{
|
||||||
{ [ os macosx? ] [ "core-text" ] }
|
{ [ os macosx? ] [ "core-text" ] }
|
||||||
{ [ os windows? ] [ "pango" ] }
|
{ [ os windows? ] [ "uniscribe" ] }
|
||||||
{ [ os unix? ] [ "pango" ] }
|
{ [ os unix? ] [ "pango" ] }
|
||||||
} cond
|
} cond
|
||||||
] unless* "ui.text." prepend require
|
] unless* "ui.text." prepend require
|
|
@ -0,0 +1 @@
|
||||||
|
Slava Pestov
|
|
@ -0,0 +1 @@
|
||||||
|
UI text rendering implementation using the MS Windows Uniscribe library
|
|
@ -0,0 +1 @@
|
||||||
|
unportable
|
|
@ -0,0 +1,42 @@
|
||||||
|
! Copyright (C) 2009 Slava Pestov.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: accessors assocs cache kernel math math.vectors sequences fonts
|
||||||
|
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>> { 0 0 } ] [ size>> ] bi <texture> ]
|
||||||
|
2cache ;
|
||||||
|
|
||||||
|
M: uniscribe-renderer draw-string ( font string -- )
|
||||||
|
dup dup selection? [ string>> ] when empty?
|
||||||
|
[ 2drop ] [ rendered-script-string draw-texture ] if ;
|
||||||
|
|
||||||
|
M: uniscribe-renderer x>offset ( x font string -- n )
|
||||||
|
[ 2drop 0 ] [
|
||||||
|
cached-script-string x>line-offset 0 = [ 1+ ] unless
|
||||||
|
] 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
|
|
@ -0,0 +1,37 @@
|
||||||
|
USING: assocs memoize locals kernel accessors init fonts math
|
||||||
|
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>> neg ! 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 ;
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
||||||
|
Slava Pestov
|
|
@ -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
|
|
@ -0,0 +1,53 @@
|
||||||
|
! Copyright (C) 2009 Joe Groff, Slava Pestov.
|
||||||
|
! 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 locals ;
|
||||||
|
IN: windows.offscreen
|
||||||
|
|
||||||
|
: (bitmap-info) ( dim -- BITMAPINFO )
|
||||||
|
"BITMAPINFO" <c-object> [
|
||||||
|
BITMAPINFO-bmiHeader {
|
||||||
|
[ nip "BITMAPINFOHEADER" heap-size swap set-BITMAPINFOHEADER-biSize ]
|
||||||
|
[ [ first ] dip set-BITMAPINFOHEADER-biWidth ]
|
||||||
|
[ [ second ] dip set-BITMAPINFOHEADER-biHeight ]
|
||||||
|
[ nip 1 swap set-BITMAPINFOHEADER-biPlanes ]
|
||||||
|
[ nip 32 swap set-BITMAPINFOHEADER-biBitCount ]
|
||||||
|
[ nip BI_RGB swap set-BITMAPINFOHEADER-biCompression ]
|
||||||
|
[ [ first2 * 4 * ] dip set-BITMAPINFOHEADER-biSizeImage ]
|
||||||
|
[ nip 72 swap set-BITMAPINFOHEADER-biXPelsPerMeter ]
|
||||||
|
[ nip 72 swap set-BITMAPINFOHEADER-biYPelsPerMeter ]
|
||||||
|
[ nip 0 swap set-BITMAPINFOHEADER-biClrUsed ]
|
||||||
|
[ nip 0 swap set-BITMAPINFOHEADER-biClrImportant ]
|
||||||
|
} 2cleave
|
||||||
|
] keep ;
|
||||||
|
|
||||||
|
: make-bitmap ( dim dc -- hBitmap bits )
|
||||||
|
[ nip ]
|
||||||
|
[
|
||||||
|
swap (bitmap-info) DIB_RGB_COLORS f <void*>
|
||||||
|
[ f 0 CreateDIBSection ] keep *void*
|
||||||
|
] 2bi
|
||||||
|
[ [ 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
|
||||||
|
<image>
|
||||||
|
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 dc quot -- image )
|
||||||
|
dim dc make-bitmap [ &DeleteObject drop ] dip
|
||||||
|
quot dip
|
||||||
|
dim bitmap>image ; inline
|
|
@ -0,0 +1 @@
|
||||||
|
Utility words for memory DCs and bitmaps
|
|
@ -0,0 +1 @@
|
||||||
|
unportable
|
|
@ -1,6 +1,7 @@
|
||||||
! Copyright (C) 2005, 2006 Doug Coleman.
|
! Copyright (C) 2005, 2006 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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
|
IN: windows.types
|
||||||
|
|
||||||
TYPEDEF: char CHAR
|
TYPEDEF: char CHAR
|
||||||
|
@ -244,14 +245,14 @@ C-STRUCT: RECT
|
||||||
{ "LONG" "right" }
|
{ "LONG" "right" }
|
||||||
{ "LONG" "bottom" } ;
|
{ "LONG" "bottom" } ;
|
||||||
|
|
||||||
! C-STRUCT: PAINTSTRUCT
|
C-STRUCT: PAINTSTRUCT
|
||||||
! { "HDC" " hdc" }
|
{ "HDC" " hdc" }
|
||||||
! { "BOOL" "fErase" }
|
{ "BOOL" "fErase" }
|
||||||
! { "RECT" "rcPaint" }
|
{ "RECT" "rcPaint" }
|
||||||
! { "BOOL" "fRestore" }
|
{ "BOOL" "fRestore" }
|
||||||
! { "BOOL" "fIncUpdate" }
|
{ "BOOL" "fIncUpdate" }
|
||||||
! { "BYTE[32]" "rgbReserved" }
|
{ "BYTE[32]" "rgbReserved" }
|
||||||
! ;
|
;
|
||||||
|
|
||||||
C-STRUCT: BITMAPINFOHEADER
|
C-STRUCT: BITMAPINFOHEADER
|
||||||
{ "DWORD" "biSize" }
|
{ "DWORD" "biSize" }
|
||||||
|
@ -283,6 +284,10 @@ C-STRUCT: POINT
|
||||||
{ "LONG" "x" }
|
{ "LONG" "x" }
|
||||||
{ "LONG" "y" } ;
|
{ "LONG" "y" } ;
|
||||||
|
|
||||||
|
C-STRUCT: SIZE
|
||||||
|
{ "LONG" "cx" }
|
||||||
|
{ "LONG" "cy" } ;
|
||||||
|
|
||||||
C-STRUCT: MSG
|
C-STRUCT: MSG
|
||||||
{ "HWND" "hWnd" }
|
{ "HWND" "hWnd" }
|
||||||
{ "UINT" "message" }
|
{ "UINT" "message" }
|
||||||
|
@ -327,6 +332,14 @@ C-STRUCT: RECT
|
||||||
{ "LONG" "right" }
|
{ "LONG" "right" }
|
||||||
{ "LONG" "bottom" } ;
|
{ "LONG" "bottom" } ;
|
||||||
|
|
||||||
|
: <RECT> ( loc dim -- RECT )
|
||||||
|
over v+
|
||||||
|
"RECT" <c-object>
|
||||||
|
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* PRECT
|
||||||
TYPEDEF: RECT* LPRECT
|
TYPEDEF: RECT* LPRECT
|
||||||
TYPEDEF: PIXELFORMATDESCRIPTOR PFD
|
TYPEDEF: PIXELFORMATDESCRIPTOR PFD
|
||||||
|
@ -363,3 +376,36 @@ C-STRUCT: ACCEL
|
||||||
{ "WORD" "key" }
|
{ "WORD" "key" }
|
||||||
{ "WORD" "cmd" } ;
|
{ "WORD" "cmd" } ;
|
||||||
TYPEDEF: ACCEL* LPACCEL
|
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
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Slava Pestov
|
|
@ -0,0 +1 @@
|
||||||
|
High-level wrapper around Uniscribe binding
|
|
@ -0,0 +1 @@
|
||||||
|
unportable
|
|
@ -0,0 +1,118 @@
|
||||||
|
! Copyright (C) 2009 Slava Pestov.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: kernel assocs math sequences fry io.encodings.string
|
||||||
|
io.encodings.utf16n accessors arrays combinators destructors locals
|
||||||
|
cache namespaces init images.normalization fonts alien.c-types
|
||||||
|
windows windows.usp10 windows.offscreen windows.gdi32
|
||||||
|
windows.ole32 windows.types windows.fonts opengl.textures ;
|
||||||
|
IN: windows.uniscribe
|
||||||
|
|
||||||
|
TUPLE: script-string font string metrics ssa size image disposed ;
|
||||||
|
|
||||||
|
: line-offset>x ( n script-string -- x )
|
||||||
|
2dup string>> length = [
|
||||||
|
ssa>> ! ssa
|
||||||
|
swap 1- ! icp
|
||||||
|
TRUE ! fTrailing
|
||||||
|
] [
|
||||||
|
ssa>>
|
||||||
|
swap ! icp
|
||||||
|
FALSE ! fTrailing
|
||||||
|
] if
|
||||||
|
0 <int> [ ScriptStringCPtoX ole32-error ] keep *int ;
|
||||||
|
|
||||||
|
: x>line-offset ( x script-string -- n trailing )
|
||||||
|
ssa>> ! ssa
|
||||||
|
swap ! iX
|
||||||
|
0 <int> ! pCh
|
||||||
|
0 <int> ! piTrailing
|
||||||
|
[ ScriptStringXtoCP ole32-error ] 2keep [ *int ] bi@ ;
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
|
||||||
|
: make-script-string ( dc string -- script-string )
|
||||||
|
dup selection? [ string>> ] when
|
||||||
|
[ utf16n encode ] ! pString
|
||||||
|
[ length ] bi ! cString
|
||||||
|
dup 1.5 * 16 + >integer ! cGlyphs -- MSDN says this is "recommended size"
|
||||||
|
-1 ! iCharset -- Unicode
|
||||||
|
SSA_GLYPHS ! dwFlags
|
||||||
|
0 ! iReqWidth
|
||||||
|
f ! psControl
|
||||||
|
f ! psState
|
||||||
|
f ! piDx
|
||||||
|
f ! pTabdef
|
||||||
|
f ! pbInClass
|
||||||
|
f <void*> ! pssa
|
||||||
|
[ ScriptStringAnalyse ] keep
|
||||||
|
[ ole32-error ] [ |ScriptStringFree *void* ] bi* ;
|
||||||
|
|
||||||
|
: set-dc-colors ( dc font -- )
|
||||||
|
[ background>> color>RGB SetBkColor drop ]
|
||||||
|
[ foreground>> color>RGB SetTextColor drop ] 2bi ;
|
||||||
|
|
||||||
|
: selection-start/end ( script-string -- iMinSel iMaxSel )
|
||||||
|
string>> dup selection? [ [ start>> ] [ end>> ] bi ] [ drop 0 0 ] if ;
|
||||||
|
|
||||||
|
: (draw-script-string) ( script-string -- )
|
||||||
|
[
|
||||||
|
ssa>> ! ssa
|
||||||
|
0 ! iX
|
||||||
|
0 ! iY
|
||||||
|
0 ! uOptions
|
||||||
|
f ! prc
|
||||||
|
]
|
||||||
|
[ selection-start/end ] bi
|
||||||
|
! iMinSel
|
||||||
|
! iMaxSel
|
||||||
|
FALSE ! fDisabled
|
||||||
|
ScriptStringOut ole32-error ;
|
||||||
|
|
||||||
|
: draw-script-string ( dc script-string -- )
|
||||||
|
[ font>> set-dc-colors ] keep (draw-script-string) ;
|
||||||
|
|
||||||
|
: script-string-bitmap-size ( script-string -- dim )
|
||||||
|
size>> dup small-texture? [ [ next-power-of-2 ] map ] when ;
|
||||||
|
|
||||||
|
:: make-script-string-image ( dc script-string -- image )
|
||||||
|
script-string script-string-bitmap-size dc
|
||||||
|
[ dc script-string draw-script-string ] make-bitmap-image ;
|
||||||
|
|
||||||
|
: set-dc-font ( dc font -- )
|
||||||
|
cache-font SelectObject win32-error=0/f ;
|
||||||
|
|
||||||
|
: script-string-size ( script-string -- dim )
|
||||||
|
ssa>> ScriptString_pSize
|
||||||
|
dup win32-error=0/f
|
||||||
|
[ SIZE-cx ] [ SIZE-cy ] bi 2array ;
|
||||||
|
|
||||||
|
: dc-metrics ( dc -- metrics )
|
||||||
|
"TEXTMETRICW" <c-object>
|
||||||
|
[ GetTextMetrics drop ] keep
|
||||||
|
TEXTMETRIC>metrics ;
|
||||||
|
|
||||||
|
: <script-string> ( font string -- script-string )
|
||||||
|
[ script-string new ] 2dip
|
||||||
|
[ >>font ] [ >>string ] bi*
|
||||||
|
[
|
||||||
|
{
|
||||||
|
[ over font>> set-dc-font ]
|
||||||
|
[ dc-metrics >>metrics ]
|
||||||
|
[ over string>> make-script-string >>ssa ]
|
||||||
|
[ drop dup script-string-size >>size ]
|
||||||
|
[ over make-script-string-image >>image ]
|
||||||
|
} cleave
|
||||||
|
] with-memory-dc ;
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
|
M: script-string dispose*
|
||||||
|
ssa>> <void*> ScriptStringFree ole32-error ;
|
||||||
|
|
||||||
|
SYMBOL: cached-script-strings
|
||||||
|
|
||||||
|
: cached-script-string ( string font -- script-string )
|
||||||
|
cached-script-strings get-global [ <script-string> ] 2cache ;
|
||||||
|
|
||||||
|
[ <cache-assoc> cached-script-strings set-global ]
|
||||||
|
"windows.uniscribe" add-init-hook
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2009 Doug Coleman.
|
! Copyright (C) 2009 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien.syntax ;
|
USING: alien.syntax alien.destructors ;
|
||||||
IN: windows.usp10
|
IN: windows.usp10
|
||||||
|
|
||||||
LIBRARY: usp10
|
LIBRARY: usp10
|
||||||
|
@ -262,6 +262,8 @@ FUNCTION: HRESULT ScriptStringFree (
|
||||||
SCRIPT_STRING_ANALYSIS* pssa
|
SCRIPT_STRING_ANALYSIS* pssa
|
||||||
) ;
|
) ;
|
||||||
|
|
||||||
|
DESTRUCTOR: ScriptStringFree
|
||||||
|
|
||||||
FUNCTION: SIZE* ScriptString_pSize ( SCRIPT_STRING_ANALYSIS ssa ) ;
|
FUNCTION: SIZE* ScriptString_pSize ( SCRIPT_STRING_ANALYSIS ssa ) ;
|
||||||
|
|
||||||
FUNCTION: int* ScriptString_pcOutChars ( SCRIPT_STRING_ANALYSIS ssa ) ;
|
FUNCTION: int* ScriptString_pcOutChars ( SCRIPT_STRING_ANALYSIS ssa ) ;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2005, 2006 Doug Coleman.
|
! Copyright (C) 2005, 2006 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien alien.syntax alien.c-types alien.strings arrays
|
USING: alien alien.syntax alien.c-types alien.strings arrays
|
||||||
combinators kernel math namespaces parser prettyprint sequences
|
combinators kernel math namespaces parser sequences
|
||||||
windows.errors windows.types windows.kernel32 words
|
windows.errors windows.types windows.kernel32 words
|
||||||
io.encodings.utf16n ;
|
io.encodings.utf16n ;
|
||||||
IN: windows
|
IN: windows
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
libcairo-2.dll
|
|
||||||
libgio-2.0-0.dll
|
|
||||||
libglib-2.0-0.dll
|
|
||||||
libgmodule-2.0-0.dll
|
|
||||||
libgobject-2.0-0.dll
|
|
||||||
libgthread-2.0-0.dll
|
|
||||||
libpango-1.0-0.dll
|
|
||||||
libpangocairo-1.0-0.dll
|
|
||||||
libpangowin32-1.0-0.dll
|
|
||||||
libpng12-0.dll
|
|
||||||
libtiff3.dll
|
|
||||||
zlib1.dll
|
|
|
@ -445,16 +445,6 @@ get_url() {
|
||||||
check_ret $DOWNLOADER
|
check_ret $DOWNLOADER
|
||||||
}
|
}
|
||||||
|
|
||||||
maybe_download_dlls() {
|
|
||||||
if [[ $OS == winnt ]] ; then
|
|
||||||
for file in `cat build-support/dlls.txt`; do
|
|
||||||
get_url http://factorcode.org/dlls/$file
|
|
||||||
chmod 777 *.dll
|
|
||||||
check_ret chmod
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
get_config_info() {
|
get_config_info() {
|
||||||
find_build_info
|
find_build_info
|
||||||
check_installed_programs
|
check_installed_programs
|
||||||
|
@ -472,7 +462,6 @@ install() {
|
||||||
cd_factor
|
cd_factor
|
||||||
make_factor
|
make_factor
|
||||||
get_boot_image
|
get_boot_image
|
||||||
maybe_download_dlls
|
|
||||||
bootstrap
|
bootstrap
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -547,7 +536,6 @@ case "$1" in
|
||||||
update) update; update_bootstrap ;;
|
update) update; update_bootstrap ;;
|
||||||
bootstrap) get_config_info; bootstrap ;;
|
bootstrap) get_config_info; bootstrap ;;
|
||||||
report) find_build_info ;;
|
report) find_build_info ;;
|
||||||
dlls) get_config_info; maybe_download_dlls;;
|
|
||||||
net-bootstrap) get_config_info; update_boot_images; bootstrap ;;
|
net-bootstrap) get_config_info; update_boot_images; bootstrap ;;
|
||||||
make-target) ECHO=false; find_build_info; echo $MAKE_TARGET ;;
|
make-target) ECHO=false; find_build_info; echo $MAKE_TARGET ;;
|
||||||
*) usage ;;
|
*) usage ;;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2008, 2009 Eduardo Cavazos, Slava Pestov.
|
! Copyright (C) 2008, 2009 Eduardo Cavazos, Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors arrays calendar combinators.short-circuit
|
USING: accessors arrays calendar combinators.short-circuit
|
||||||
continuations debugger http.client io.directories io.files io.launcher
|
continuations debugger io.directories io.files io.launcher
|
||||||
io.pathnames io.encodings.ascii kernel make mason.common mason.config
|
io.pathnames io.encodings.ascii kernel make mason.common mason.config
|
||||||
mason.platform mason.report mason.email namespaces sequences ;
|
mason.platform mason.report mason.email namespaces sequences ;
|
||||||
IN: mason.child
|
IN: mason.child
|
||||||
|
@ -9,20 +9,8 @@ IN: mason.child
|
||||||
: make-cmd ( -- args )
|
: make-cmd ( -- args )
|
||||||
gnu-make platform 2array ;
|
gnu-make platform 2array ;
|
||||||
|
|
||||||
: dll-url ( -- url )
|
|
||||||
"http://factorcode.org/dlls/"
|
|
||||||
target-cpu get "x86.64" = [ "64/" append ] when ;
|
|
||||||
|
|
||||||
: download-dlls ( -- )
|
|
||||||
target-os get "winnt" = [
|
|
||||||
dll-url "build-support/dlls.txt" ascii file-lines
|
|
||||||
[ append download ] with each
|
|
||||||
] when ;
|
|
||||||
|
|
||||||
: make-vm ( -- )
|
: make-vm ( -- )
|
||||||
"factor" [
|
"factor" [
|
||||||
download-dlls
|
|
||||||
|
|
||||||
<process>
|
<process>
|
||||||
make-cmd >>command
|
make-cmd >>command
|
||||||
"../compile-log" >>stdout
|
"../compile-log" >>stdout
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! (c) 2008 Joe Groff, see license for details
|
! (c) 2008 Joe Groff, see license for details
|
||||||
USING: accessors continuations images.bitmap kernel math
|
USING: accessors continuations images.bitmap kernel math
|
||||||
sequences ui.gadgets ui.gadgets.worlds ui ui.backend
|
sequences ui.gadgets ui.gadgets.private ui.gadgets.worlds
|
||||||
destructors ;
|
ui.private ui ui.backend destructors ;
|
||||||
IN: ui.offscreen
|
IN: ui.offscreen
|
||||||
|
|
||||||
TUPLE: offscreen-world < world ;
|
TUPLE: offscreen-world < world ;
|
||||||
|
|
|
@ -1,3 +1,2 @@
|
||||||
unportable
|
|
||||||
ui
|
ui
|
||||||
graphics
|
graphics
|
||||||
|
|
Loading…
Reference in New Issue