93 lines
2.8 KiB
Factor
93 lines
2.8 KiB
Factor
! Copyright (C) 2006, 2009 Slava Pestov
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: specialized-arrays.int arrays kernel math namespaces make
|
|
cocoa cocoa.messages cocoa.classes core-graphics
|
|
core-graphics.types sequences continuations accessors ;
|
|
IN: cocoa.views
|
|
|
|
CONSTANT: NSOpenGLPFAAllRenderers 1
|
|
CONSTANT: NSOpenGLPFADoubleBuffer 5
|
|
CONSTANT: NSOpenGLPFAStereo 6
|
|
CONSTANT: NSOpenGLPFAAuxBuffers 7
|
|
CONSTANT: NSOpenGLPFAColorSize 8
|
|
CONSTANT: NSOpenGLPFAAlphaSize 11
|
|
CONSTANT: NSOpenGLPFADepthSize 12
|
|
CONSTANT: NSOpenGLPFAStencilSize 13
|
|
CONSTANT: NSOpenGLPFAAccumSize 14
|
|
CONSTANT: NSOpenGLPFAMinimumPolicy 51
|
|
CONSTANT: NSOpenGLPFAMaximumPolicy 52
|
|
CONSTANT: NSOpenGLPFAOffScreen 53
|
|
CONSTANT: NSOpenGLPFAFullScreen 54
|
|
CONSTANT: NSOpenGLPFASampleBuffers 55
|
|
CONSTANT: NSOpenGLPFASamples 56
|
|
CONSTANT: NSOpenGLPFAAuxDepthStencil 57
|
|
CONSTANT: NSOpenGLPFAColorFloat 58
|
|
CONSTANT: NSOpenGLPFAMultisample 59
|
|
CONSTANT: NSOpenGLPFASupersample 60
|
|
CONSTANT: NSOpenGLPFASampleAlpha 61
|
|
CONSTANT: NSOpenGLPFARendererID 70
|
|
CONSTANT: NSOpenGLPFASingleRenderer 71
|
|
CONSTANT: NSOpenGLPFANoRecovery 72
|
|
CONSTANT: NSOpenGLPFAAccelerated 73
|
|
CONSTANT: NSOpenGLPFAClosestPolicy 74
|
|
CONSTANT: NSOpenGLPFARobust 75
|
|
CONSTANT: NSOpenGLPFABackingStore 76
|
|
CONSTANT: NSOpenGLPFAMPSafe 78
|
|
CONSTANT: NSOpenGLPFAWindow 80
|
|
CONSTANT: NSOpenGLPFAMultiScreen 81
|
|
CONSTANT: NSOpenGLPFACompliant 83
|
|
CONSTANT: NSOpenGLPFAScreenMask 84
|
|
CONSTANT: NSOpenGLPFAPixelBuffer 90
|
|
CONSTANT: NSOpenGLPFAAllowOfflineRenderers 96
|
|
CONSTANT: NSOpenGLPFAVirtualScreenCount 128
|
|
CONSTANT: NSOpenGLCPSwapInterval 222
|
|
|
|
<PRIVATE
|
|
|
|
SYMBOL: software-renderer?
|
|
SYMBOL: multisample?
|
|
|
|
PRIVATE>
|
|
|
|
: with-software-renderer ( quot -- )
|
|
[ t software-renderer? ] dip with-variable ; inline
|
|
|
|
: with-multisample ( quot -- )
|
|
[ t multisample? ] dip with-variable ; inline
|
|
|
|
: <PixelFormat> ( attributes -- pixelfmt )
|
|
NSOpenGLPixelFormat -> alloc swap [
|
|
%
|
|
NSOpenGLPFADepthSize , 16 ,
|
|
software-renderer? get [
|
|
NSOpenGLPFARendererID , kCGLRendererGenericFloatID ,
|
|
] when
|
|
multisample? get [
|
|
NSOpenGLPFASupersample ,
|
|
NSOpenGLPFASampleBuffers , 1 ,
|
|
NSOpenGLPFASamples , 8 ,
|
|
] when
|
|
0 ,
|
|
] int-array{ } make
|
|
-> initWithAttributes:
|
|
-> autorelease ;
|
|
|
|
: <GLView> ( class dim -- view )
|
|
[ -> alloc 0 0 ] dip first2 <CGRect>
|
|
NSOpenGLPFAWindow NSOpenGLPFADoubleBuffer 2array <PixelFormat>
|
|
-> initWithFrame:pixelFormat:
|
|
dup 1 -> setPostsBoundsChangedNotifications:
|
|
dup 1 -> setPostsFrameChangedNotifications: ;
|
|
|
|
: view-dim ( view -- dim )
|
|
-> bounds
|
|
[ CGRect-w >fixnum ] [ CGRect-h >fixnum ] bi
|
|
2array ;
|
|
|
|
: mouse-location ( view event -- loc )
|
|
[
|
|
-> locationInWindow f -> convertPoint:fromView:
|
|
[ CGPoint-x ] [ CGPoint-y ] bi
|
|
] [ drop -> frame CGRect-h ] 2bi
|
|
swap - [ >integer ] bi@ 2array ;
|