io/clipboard,app: add WriteOp, ReadOp

Previously, the only way to manipulate the clipboard (read or write) is
using the `app.Window`.

The new `clipboard.ReadOp` and `clipboard.WriteOp`makes possible to
read/write from the widget.

Signed-off-by: Inkeliz <inkeliz@inkeliz.com>
This commit is contained in:
Inkeliz
2020-12-06 20:17:25 +00:00
committed by Elias Naur
parent 4e2d08c0a6
commit a76f816ae9
6 changed files with 279 additions and 1 deletions
+27
View File
@@ -2,9 +2,36 @@
package clipboard
import (
"gioui.org/internal/opconst"
"gioui.org/io/event"
"gioui.org/op"
)
// Event is generated when the clipboard content is requested.
type Event struct {
Text string
}
// ReadOp requests the text of the clipboard, delivered to
// the current handler through an Event.
type ReadOp struct {
Tag event.Tag
}
// WriteOp copies Text to the clipboard.
type WriteOp struct {
Text string
}
func (h ReadOp) Add(o *op.Ops) {
data := o.Write1(opconst.TypeClipboardReadLen, h.Tag)
data[0] = byte(opconst.TypeClipboardRead)
}
func (h WriteOp) Add(o *op.Ops) {
data := o.Write1(opconst.TypeClipboardWriteLen, &h.Text)
data[0] = byte(opconst.TypeClipboardWrite)
}
func (Event) ImplementsEvent() {}