mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-03 08:25:34 +00:00
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:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user