diff --git a/basis/ui/backend/backend.factor b/basis/ui/backend/backend.factor index 63d551798c..3d38439f69 100755 --- a/basis/ui/backend/backend.factor +++ b/basis/ui/backend/backend.factor @@ -7,9 +7,9 @@ SYMBOL: ui-backend HOOK: set-title ui-backend ( string world -- ) -HOOK: set-fullscreen* ui-backend ( ? world -- ) +HOOK: (set-fullscreen) ui-backend ( world ? -- ) -HOOK: fullscreen* ui-backend ( world -- ? ) +HOOK: (fullscreen?) ui-backend ( world -- ? ) HOOK: (open-window) ui-backend ( world -- ) diff --git a/basis/ui/backend/cocoa/cocoa.factor b/basis/ui/backend/cocoa/cocoa.factor index 47a3bfc1a6..c6f4c6def0 100755 --- a/basis/ui/backend/cocoa/cocoa.factor +++ b/basis/ui/backend/cocoa/cocoa.factor @@ -101,10 +101,10 @@ M: cocoa-ui-backend set-title ( string world -- ) : exit-fullscreen ( world -- ) handle>> view>> f -> exitFullScreenModeWithOptions: ; -M: cocoa-ui-backend set-fullscreen* ( ? world -- ) - swap [ enter-fullscreen ] [ exit-fullscreen ] if ; +M: cocoa-ui-backend (set-fullscreen) ( world ? -- ) + [ enter-fullscreen ] [ exit-fullscreen ] if ; -M: cocoa-ui-backend fullscreen* ( world -- ? ) +M: cocoa-ui-backend (fullscreen?) ( world -- ? ) handle>> view>> -> isInFullScreenMode zero? not ; M:: cocoa-ui-backend (open-window) ( world -- ) diff --git a/basis/ui/backend/windows/windows.factor b/basis/ui/backend/windows/windows.factor index 3fc9e66769..1ca3e85232 100755 --- a/basis/ui/backend/windows/windows.factor +++ b/basis/ui/backend/windows/windows.factor @@ -556,11 +556,9 @@ M: windows-ui-backend do-events [ DispatchMessage drop ] bi ] if ; -: register-wndclassex ( -- class ) - "WNDCLASSEX" - f GetModuleHandle - class-name-ptr get-global - pick GetClassInfoEx zero? [ +:: register-window-class ( class-name-ptr -- ) + "WNDCLASSEX" f GetModuleHandle + class-name-ptr pick GetClassInfoEx 0 = [ "WNDCLASSEX" heap-size over set-WNDCLASSEX-cbSize { CS_HREDRAW CS_VREDRAW CS_OWNDC } flags over set-WNDCLASSEX-style ui-wndproc over set-WNDCLASSEX-lpfnWndProc @@ -571,9 +569,9 @@ M: windows-ui-backend do-events over set-WNDCLASSEX-hIcon f IDC_ARROW LoadCursor over set-WNDCLASSEX-hCursor - class-name-ptr get-global over set-WNDCLASSEX-lpszClassName - RegisterClassEx dup win32-error=0/f - ] when ; + class-name-ptr over set-WNDCLASSEX-lpszClassName + RegisterClassEx win32-error=0/f + ] [ drop ] if ; : adjust-RECT ( RECT -- ) style 0 ex-style AdjustWindowRectEx win32-error=0/f ; @@ -594,9 +592,16 @@ M: windows-ui-backend do-events dup adjust-RECT swap [ dup default-position-RECT ] when ; +: get-window-class ( -- class-name ) + class-name-ptr [ + dup expired? [ drop "Factor-window" utf16n malloc-string ] when + dup register-window-class + dup + ] change-global ; + : create-window ( rect -- hwnd ) make-adjusted-RECT - [ class-name-ptr get-global f ] dip + [ get-window-class f ] dip [ [ ex-style ] 2dip { WS_CLIPSIBLINGS WS_CLIPCHILDREN style } flags @@ -611,8 +616,6 @@ M: windows-ui-backend do-events : init-win32-ui ( -- ) V{ } clone nc-buttons set-global "MSG" malloc-object msg-obj set-global - "Factor-window" utf16n malloc-string class-name-ptr set-global - register-wndclassex drop GetDoubleClickTime milliseconds double-click-timeout set-global ; : cleanup-win32-ui ( -- ) @@ -758,10 +761,10 @@ M: windows-ui-backend (ungrab-input) ( handle -- ) [ SW_RESTORE ShowWindow win32-error=0/f ] } cleave ; -M: windows-ui-backend set-fullscreen* ( ? world -- ) - swap [ enter-fullscreen ] [ exit-fullscreen ] if ; +M: windows-ui-backend (set-fullscreen) ( ? world -- ) + [ enter-fullscreen ] [ exit-fullscreen ] if ; -M: windows-ui-backend fullscreen* ( world -- ? ) +M: windows-ui-backend (fullscreen?) ( world -- ? ) [ handle>> hWnd>> hwnd>RECT ] [ handle>> hWnd>> fullscreen-RECT ] bi [ get-RECT-dimensions 2array 2nip ] bi@ = ; diff --git a/basis/ui/backend/x11/x11.factor b/basis/ui/backend/x11/x11.factor index 76fd9fa30c..aca80cbc96 100755 --- a/basis/ui/backend/x11/x11.factor +++ b/basis/ui/backend/x11/x11.factor @@ -268,10 +268,12 @@ M: x11-ui-backend set-title ( string world -- ) handle>> window>> swap [ dpy get ] 2dip [ set-title-old ] [ set-title-new ] 3bi ; -M: x11-ui-backend set-fullscreen* ( ? world -- ) - handle>> window>> "XClientMessageEvent" - [ set-XClientMessageEvent-window ] keep - swap _NET_WM_STATE_ADD _NET_WM_STATE_REMOVE ? +M: x11-ui-backend (set-fullscreen) ( world ? -- ) + [ + handle>> window>> "XClientMessageEvent" + [ set-XClientMessageEvent-window ] keep + ] dip + _NET_WM_STATE_ADD _NET_WM_STATE_REMOVE ? over set-XClientMessageEvent-data0 ClientMessage over set-XClientMessageEvent-type dpy get over set-XClientMessageEvent-display diff --git a/basis/ui/ui-docs.factor b/basis/ui/ui-docs.factor index a4bcb8bcdf..7e83265926 100644 --- a/basis/ui/ui-docs.factor +++ b/basis/ui/ui-docs.factor @@ -26,7 +26,7 @@ HELP: world-attributes } ; HELP: set-fullscreen -{ $values { "?" "a boolean" } { "gadget" gadget } } +{ $values { "gadget" gadget } { "?" "a boolean" } } { $description "Sets and unsets fullscreen mode for the gadget's world." } ; HELP: fullscreen? diff --git a/basis/ui/ui.factor b/basis/ui/ui.factor index e4cf725add..b1bfce26e6 100644 --- a/basis/ui/ui.factor +++ b/basis/ui/ui.factor @@ -209,14 +209,14 @@ PRIVATE> : open-window ( gadget title/attributes -- ) ?attributes open-world-window ; -: set-fullscreen ( ? gadget -- ) - find-world set-fullscreen* ; +: set-fullscreen ( gadget ? -- ) + [ find-world ] dip (set-fullscreen) ; : fullscreen? ( gadget -- ? ) - find-world fullscreen* ; + find-world (fullscreen?) ; : toggle-fullscreen ( gadget -- ) - [ fullscreen? not ] keep set-fullscreen ; + dup fullscreen? not set-fullscreen ; : raise-window ( gadget -- ) find-world raise-window* ; diff --git a/extra/jamshred/jamshred.factor b/extra/jamshred/jamshred.factor index fd683e3bc4..ae981ae1b3 100644 --- a/extra/jamshred/jamshred.factor +++ b/extra/jamshred/jamshred.factor @@ -26,15 +26,6 @@ M: jamshred-gadget draw-gadget* ( gadget -- ) [ 100 milliseconds sleep jamshred-loop ] tri ] if ; -: fullscreen ( gadget -- ) - find-world t swap set-fullscreen* ; - -: no-fullscreen ( gadget -- ) - find-world f swap set-fullscreen* ; - -: toggle-fullscreen ( world -- ) - [ fullscreen? not ] keep set-fullscreen* ; - M: jamshred-gadget graft* ( gadget -- ) [ find-gl-context init-graphics ] [ [ jamshred-loop ] curry in-thread ] bi ; @@ -73,12 +64,12 @@ M: jamshred-gadget ungraft* ( gadget -- ) [ second mouse-scroll-y ] 2bi ; : quit ( gadget -- ) - [ no-fullscreen ] [ close-window ] bi ; + [ f set-fullscreen ] [ close-window ] bi ; jamshred-gadget H{ { T{ key-down f f "r" } [ jamshred-restart ] } { T{ key-down f f " " } [ jamshred>> toggle-running ] } - { T{ key-down f f "f" } [ find-world toggle-fullscreen ] } + { T{ key-down f f "f" } [ toggle-fullscreen ] } { T{ key-down f f "UP" } [ jamshred>> jamshred-player 1 swap change-player-speed ] } { T{ key-down f f "DOWN" } [ jamshred>> jamshred-player -1 swap change-player-speed ] } { T{ key-down f f "LEFT" } [ jamshred>> 1 jamshred-roll ] } diff --git a/extra/terrain/shaders/shaders.factor b/extra/terrain/shaders/shaders.factor index 630163c724..9233ab3f36 100644 --- a/extra/terrain/shaders/shaders.factor +++ b/extra/terrain/shaders/shaders.factor @@ -12,6 +12,7 @@ void main() gl_Position = v; vec4 p = gl_ProjectionMatrixInverse * v; + p.z = -abs(p.z); float s = sin(sky_theta), c = cos(sky_theta); direction = mat3(1, 0, 0, 0, c, s, 0, -s, c)