factor/library/ui/windows/clipboard.factor

48 lines
1.3 KiB
Factor
Raw Normal View History

2006-07-24 04:09:21 -04:00
! Copyright (C) 2006 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel win32-api math namespaces io prettyprint errors sequences alien
2006-07-24 14:57:36 -04:00
libc gadgets ;
2006-07-24 04:09:21 -04:00
IN: win32
: (enum-clipboard) ( n -- )
EnumClipboardFormats win32-error dup 0 > [ dup , (enum-clipboard) ] when ;
: enum-clipboard ( -- seq )
[ 0 (enum-clipboard) ] { } make nip ;
: paste ( -- str )
f OpenClipboard drop
CF_TEXT IsClipboardFormatAvailable 0 = [
"no text in clipboard" print
] [
! "text found" print
CF_TEXT GetClipboardData
dup GlobalLock swap
GlobalUnlock drop
] if
CloseClipboard drop alien>char-string ;
: copy ( str -- )
f OpenClipboard drop
EmptyClipboard drop
GMEM_MOVEABLE over length 1+ GlobalAlloc dup 0 = [
"unable to allocate memory" throw
] when
dup GlobalLock
rot dup length memcpy
dup GlobalUnlock drop
CF_TEXT swap SetClipboardData 0 = [
win32-error
"SetClipboardData failed" throw
] when
CloseClipboard drop ;
2006-07-24 14:57:36 -04:00
TUPLE: pasteboard ;
M: pasteboard clipboard-contents ( pb -- str ) drop paste ;
M: pasteboard set-clipboard-contents ( str pb -- ) drop copy ;
2006-07-24 04:09:21 -04:00
2006-07-24 14:57:36 -04:00
: init-clipboard ( -- )
<pasteboard> clipboard set-global ;