luv

Workshop wiki

port.lisp

mcclim/port.lisp

system luv/mcclim · 37 definitions · on GitHub

in-package#:mcluv
defclassluv-port
basic-port
mirrors:initformnil:accessorport-mirrors
modifier-state:initform0:accessorluv-port-modifier-state
graft-width:initarg:graft-width:initform1920:readerport-graft-width
graft-height:initarg:graft-height:initform1080:readerport-graft-height
graft-dpi:initarg:graft-dpi:initform96:readerport-graft-dpi
:documentation

Renderer-independent McCLIM display connection owned by luv.

defclassluv-raster-port
luv-portmcclim-render:render-port-mixin
:documentation

A luv port whose media rasterize into MCCLIM-RENDER images.

defclassluv-raster-medium
mcclim-render:render-medium-mixinbasic-medium
reliefs:initform
make-array4:adjustablet:fill-pointer0
:readerraster-medium-reliefs
:documentation

A CPU raster medium whose image and semantic reliefs feed a luv target.

defclassluv-gpu-port
:documentation

A luv port whose media record McCLIM drawing directly as GPU geometry.

defclassluv-gpu-medium
basic-medium
vertices:initform
make-array1024:element-type'single-float:adjustablet:fill-pointer0
:readergpu-medium-vertices
analytic-vertices:initform
make-array1024:element-type'single-float:adjustablet:fill-pointer0
:readergpu-medium-analytic-vertices
relief-vertices:initform
make-array1024:element-type'single-float:adjustablet:fill-pointer0
:readergpu-medium-relief-vertices
gradient-vertices:initform
make-array1024:element-type'single-float:adjustablet:fill-pointer0
:readergpu-medium-gradient-vertices
image-vertices:initform
make-array1024:element-type'single-float:adjustablet:fill-pointer0
:readergpu-medium-image-vertices
commands:initform
make-array32:adjustablet:fill-pointer0
:readergpu-medium-commands
fallback-statistics:initform
make-hash-table:test#'eq
:readergpu-medium-fallback-statistics
buffering-depth:initform0:accessorgpu-medium-buffering-depth
:documentation

An ordered McCLIM drawing stream containing no software pixel surface.

defclassluv-frame-manager
standard-frame-manager
:documentation

A McCLIM frame manager constrained by luv's current native host.

defmethodframe-manager-menu-choose
items&restoptions
declare
ignoremanageritems

McCLIM implements menus as temporary top-level frames. SDL's current Cocoa host gives one canvas a durable process-main-thread event loop, so a menu would require precisely the unsupported second native canvas that claim-sdl-canvas-host rejects. Decline it at the semantic boundary and leave the owning application frame responsive.

warn"~A is unavailable: luv's Cocoa host currently supports one native canvas."
or
getfoptions:label
"McCLIM popup menu"
valuesnilnilnil
defclassluv-pointer
standard-pointer
x:initform0:accessorluv-pointer-x
y:initform0:accessorluv-pointer-y
button-state:initform0:accessorluv-pointer-button-state
:documentation

McCLIM pointer state cached from portable canvas events.

defmethodpointer-position
values
luv-pointer-xpointer
luv-pointer-ypointer
defmethodpointer-button-state
luv-pointer-button-statepointer
defmethodport-modifier-state
luv-port-modifier-stateport
defunensure-luv-port-pointer
port
let
pointer
port-pointerport
if
typeppointer'luv-pointer
pointer
setf
port-pointerport
make-instance'luv-pointer:portport
defgenericpresent-mirror
mirror
:documentation

Synchronize mirror's pending output with its target.

defgenericrelease-mirror-presentation
mirror
:documentation

Release renderer-specific resources retained by mirror.

defmethodpresent-mirror
mirrort
mirror
defmethodrelease-mirror-presentation
mirrort
mirror
defclassluv-graft
graft
dpi:initarg:dpi:readergraft-dpi
:documentation

The root of the McCLIM sheet hierarchy on a luv-port.

defmethodfind-port-type
type
eql:luv

The unqualified backend name is the production path. Keep the old raster uploader available only under its deliberately explicit name.

values'luv-gpu-port'identity
defmethodfind-port-type
type
eql:luv-raster
values'luv-raster-port'identity
defmethodfind-port-type
type
eql:luv-gpu
values'luv-gpu-port'identity
defmethodprint-object
stream
print-unreadable-object
portstream:typet:identityt
formatstream"~D mirror~:P"
length
port-mirrorsport
defmethodmake-graft
&key
orientation:default
units:device
make-instance'luv-graft:portport:mirrort:region
make-bounding-rectangle00
port-graft-widthport
port-graft-heightport
:orientationorientation:unitsunits:dpi
port-graft-dpiport
defungraft-dimension
pixelsdpiunits
ecaseunits
:screen-sized1
:devicepixels
:inches
/pixelsdpi
:millimeters
*25.4
/pixelsdpi
defmethodgraft-width
&key
units:device
graft-dimension
port-graft-width
portgraft
graft-dpigraft
units
defmethodgraft-height
&key
units:device
graft-dimension
port-graft-height
portgraft
graft-dpigraft
units
defmethodprocess-next-event
&keywait-functiontimeout

Wait cooperatively until McCLIM has another reason to run.

Concurrent McCLIM sheet queues are woken directly when luv appends translated events. This quiet fallback remains for single-process queue users.

declare
ignoreport
labels
ready-p
andwait-function
funcallwait-function
when
ready-p
return-fromprocess-next-event
valuesnil:wait-function
cond
timeout
sleeptimeout
if
ready-p
valuesnil:wait-function
valuesnil:timeout
wait-function
loopuntil
ready-p
do
sleep0.05
valuesnil:wait-function
t

A port I/O process may call us with neither argument. Remain quiescent until it is interrupted or real event delivery exists.

loopdo
sleep3600
defmethodmake-medium

MCCLIM-RENDER gives us a useful, inspectable CPU image. Finish/force output synchronizes its dirty contents with the mirror's GPU texture.

make-instance'luv-raster-medium:portport:sheetsheet
defmethodmake-medium
sheet
make-instance'luv-gpu-medium:portport:sheetsheet
defmethodport-force-output
declare
ignoreport
nil
defmethodport-force-output
dolist
mirror
port-mirrorsport
nil
defmethodport-force-output
dolist
mirror
port-mirrorsport
nil
defmethodmedium-finish-output:before
alexandria:when-let
mirror
medium-drawablemedium
defmethodmedium-force-output:before
alexandria:when-let
mirror
medium-drawablemedium
defmethodmedium-finish-output:before
when
zerop
gpu-medium-buffering-depthmedium
alexandria:when-let
mirror
medium-drawablemedium
defmethodmedium-force-output:before
when
zerop
gpu-medium-buffering-depthmedium
alexandria:when-let
mirror
medium-drawablemedium
defmethoddestroy-port:before
dolist
mirror
copy-list
port-mirrorsport
let
target
mirror-targetmirror
unless
mirror-embedded-pmirror
when
member'
:opening:open
setf
mirror-contextmirror
nil
setf
port-mirrorsport
nil