From ce7ac93667de16e9206a2140941b67a66886d117 Mon Sep 17 00:00:00 2001 From: Dave Carlton Date: Sat, 13 Aug 2022 22:31:05 -0500 Subject: [PATCH] Block caret code (cherry picked from commit 749ecba7c3e80891109273ff714e993afbe003c0) # Conflicts: # basis/ui/gadgets/editors/editors.factor --- basis/ui/gadgets/editors/editors-docs.factor | 23 +++++++++++++++ basis/ui/gadgets/editors/editors.factor | 31 +++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/basis/ui/gadgets/editors/editors-docs.factor b/basis/ui/gadgets/editors/editors-docs.factor index 180d5c46fc..927e506824 100644 --- a/basis/ui/gadgets/editors/editors-docs.factor +++ b/basis/ui/gadgets/editors/editors-docs.factor @@ -33,6 +33,29 @@ HELP: { editor-caret editor-mark } related-words +HELP: caret-is-shape +{ $description + "Shape is defined as line, box, or filled box" +} +$nl +{ $code +" IN: ui.gadgets.editors" +" 2 caret-is-shape set" +"" +} print-element +$nl +{ $table + { "Value" "Shape" } + { "f" "default (line)" } + { "0" "line" } + { "1" "box" } + { "2" "filled box" } +} print-element + +{ $references "Set desired shape in your .factor-rc file" + "rc-files" } + ; + HELP: editor-caret { $values { "editor" editor } { "loc" "a pair of integers" } } { $description "Outputs the current caret location as a line/column number pair." } ; diff --git a/basis/ui/gadgets/editors/editors.factor b/basis/ui/gadgets/editors/editors.factor index 75c2c21e89..b4ec2c3744 100644 --- a/basis/ui/gadgets/editors/editors.factor +++ b/basis/ui/gadgets/editors/editors.factor @@ -8,7 +8,8 @@ models.arrow namespaces opengl opengl.gl sequences sorting splitting system timers ui.baseline-alignment ui.clipboards ui.commands ui.gadgets ui.gadgets.borders ui.gadgets.line-support ui.gadgets.menus ui.gadgets.scrollers -ui.gestures ui.pens.solid ui.render ui.text ui.theme unicode ; +prettyprint ui.gadgets.editors.private math.parser +ui.gestures ui.pens.solid ui.render ui.text ui.theme unicode variables ; IN: ui.gadgets.editors TUPLE: editor < line-gadget @@ -24,12 +25,16 @@ TUPLE: editor < line-gadget M: editor preedit? preedit-start>> ; +SYMBOL: caret-is-shape +: ( -- shape ) caret-is-shape get ; + ( -- loc ) { 0 0 } ; : init-editor-locs ( editor -- editor ) >>caret + >>caret-shape >>mark ; inline : editor-theme ( editor -- editor ) @@ -167,6 +172,30 @@ M: editor ungraft* { [ focused?>> ] [ blink>> ] [ [ preedit? not ] [ preedit-selection-mode?>> not ] bi or ] } 1&& ; +: (caret-location) ( editor -- loc dim ) + [ caret-loc ] [ caret-dim ] bi ; + +: (caret-rect) ( dim -- newdim ) + second [ 2 / ] keep 2array ; + +: draw-caret-line ( editor -- ) + (caret-location) over v+ gl-line ; + +: draw-caret-rect ( editor -- ) + (caret-location) (caret-rect) gl-rect ; + +: draw-caret-rect-filled ( editor -- ) + (caret-location) (caret-rect) gl-fill-rect ; + +: draw-caret-shape ( editor -- ) + dup caret-shape>> value>> + { + { 1 [ draw-caret-rect ] } + { 2 [ draw-caret-rect-filled ] } + [ drop draw-caret-line ] + } case ; + + : draw-caret ( editor -- ) dup draw-caret? [ [ editor-caret-color gl-color ] dip -- 2.34.1