app/internal/window: use golang.org/x/window UTF-16 routines

Less code, no functional change.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-03-04 13:31:56 +01:00
parent 2bd539d2de
commit b1dfc94a9b
3 changed files with 9 additions and 22 deletions
+6 -19
View File
@@ -13,13 +13,13 @@ import (
"sync"
"time"
"unicode"
"unicode/utf16"
"unsafe"
syscall "golang.org/x/sys/windows"
"gioui.org/app/internal/windows"
"gioui.org/unit"
gowindows "golang.org/x/sys/windows"
"gioui.org/f32"
"gioui.org/io/clipboard"
@@ -518,21 +518,7 @@ func (w *window) readClipboard() error {
return err
}
defer windows.GlobalUnlock(mem)
// Look for terminating null character.
n := 0
for {
ch := *(*uint16)(unsafe.Pointer(ptr + uintptr(n)*2))
if ch == 0 {
break
}
n++
}
var u16 []uint16
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&u16))
hdr.Data = ptr
hdr.Cap = n
hdr.Len = n
content := string(utf16.Decode(u16))
content := gowindows.UTF16PtrToString((*uint16)(unsafe.Pointer(ptr)))
go func() {
w.w.Event(clipboard.Event{Text: content})
}()
@@ -544,9 +530,6 @@ func (w *window) WriteClipboard(s string) {
}
func (w *window) writeClipboard(s string) error {
u16 := utf16.Encode([]rune(s))
// Data must be null terminated.
u16 = append(u16, 0)
if err := windows.OpenClipboard(w.hwnd); err != nil {
return err
}
@@ -554,6 +537,10 @@ func (w *window) writeClipboard(s string) error {
if err := windows.EmptyClipboard(); err != nil {
return err
}
u16, err := gowindows.UTF16FromString(s)
if err != nil {
return err
}
n := len(u16) * int(unsafe.Sizeof(u16[0]))
mem, err := windows.GlobalAlloc(n)
if err != nil {
+1 -1
View File
@@ -5,5 +5,5 @@ go 1.14
require (
golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3
golang.org/x/image v0.0.0-20200618115811-c13761719519
golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9
golang.org/x/sys v0.0.0-20210304124612-50617c2ba197
)
+2 -2
View File
@@ -18,8 +18,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 h1:1/DFK4b7JH8DmkqhUk48onnSfrPzImPoVxuomtbT2nk=
golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210304124612-50617c2ba197 h1:7+SpRyhoo46QjKkYInQXpcfxx3TYFEYkn131lwGE9/0=
golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=