(gtx layout.Context, k key.Event)
| 327 | } |
| 328 | |
| 329 | func (e *Selectable) command(gtx layout.Context, k key.Event) { |
| 330 | direction := 1 |
| 331 | if gtx.Locale.Direction.Progression() == system.TowardOrigin { |
| 332 | direction = -1 |
| 333 | } |
| 334 | moveByWord := k.Modifiers.Contain(key.ModShortcutAlt) |
| 335 | selAct := selectionClear |
| 336 | if k.Modifiers.Contain(key.ModShift) { |
| 337 | selAct = selectionExtend |
| 338 | } |
| 339 | if k.Modifiers == key.ModShortcut { |
| 340 | switch k.Name { |
| 341 | // Copy or Cut selection -- ignored if nothing selected. |
| 342 | case "C", "X": |
| 343 | e.scratch = e.text.SelectedText(e.scratch) |
| 344 | if text := string(e.scratch); text != "" { |
| 345 | gtx.Execute(clipboard.WriteCmd{Type: "application/text", Data: io.NopCloser(strings.NewReader(text))}) |
| 346 | } |
| 347 | // Select all |
| 348 | case "A": |
| 349 | e.text.SetCaret(0, e.text.Len()) |
| 350 | } |
| 351 | return |
| 352 | } |
| 353 | switch k.Name { |
| 354 | case key.NameUpArrow: |
| 355 | e.text.MoveLines(-1, selAct) |
| 356 | case key.NameDownArrow: |
| 357 | e.text.MoveLines(+1, selAct) |
| 358 | case key.NameLeftArrow: |
| 359 | if moveByWord { |
| 360 | e.text.MoveWord(-1*direction, selAct) |
| 361 | } else { |
| 362 | if selAct == selectionClear { |
| 363 | e.text.ClearSelection() |
| 364 | } |
| 365 | e.text.MoveCaret(-1*direction, -1*direction*int(selAct)) |
| 366 | } |
| 367 | case key.NameRightArrow: |
| 368 | if moveByWord { |
| 369 | e.text.MoveWord(1*direction, selAct) |
| 370 | } else { |
| 371 | if selAct == selectionClear { |
| 372 | e.text.ClearSelection() |
| 373 | } |
| 374 | e.text.MoveCaret(1*direction, int(selAct)*direction) |
| 375 | } |
| 376 | case key.NamePageUp: |
| 377 | e.text.MovePages(-1, selAct) |
| 378 | case key.NamePageDown: |
| 379 | e.text.MovePages(+1, selAct) |
| 380 | case key.NameHome: |
| 381 | e.text.MoveLineStart(selAct) |
| 382 | case key.NameEnd: |
| 383 | e.text.MoveLineEnd(selAct) |
| 384 | } |
| 385 | } |
| 386 |
no test coverage detected