math.functions math.order math.ranges math.rectangles
math.vectors models models.arrow namespaces opengl sequences
sorting splitting timers ui.baseline-alignment ui.clipboards
-ui.commands ui.gadgets ui.gadgets.borders
+ui.commands ui.gadgets ui.gadgets.borders strings
ui.gadgets.line-support ui.gadgets.menus ui.gadgets.scrollers
ui.theme ui.gestures ui.pens.solid ui.render ui.text
unicode ;
[ draw-lines ] [ draw-caret ] bi
] with-variable ;
+<PRIVATE
+
+: row,col-dim ( font r c -- dim )
+ CHAR: x <string> swap
+ CHAR: \n <string>
+ append text-dim ;
+
+: min-dim ( font editor -- dim )
+ [ min-rows>> [ 0 ] unless* ]
+ [ min-cols>> [ 0 ] unless* ] bi
+ row,col-dim ;
+
+: max-dim ( font editor -- dim )
+ ! hopefully no one goes over 5000
+ [ max-rows>> [ 5000 ] unless* ]
+ [ max-cols>> [ 5000 ] unless* ] bi
+ row,col-dim ;
+
+: txt-dim ( font editor -- dim )
+ control-value text-dim ;
+
+PRIVATE>
+
+: editor-constrained-dim ( editor -- dim )
+ [ font>> ] keep
+ [ max-dim ]
+ [ txt-dim ]
+ [ min-dim ]
+ 2tri vmax vmin { 1 0 } v+ ;
+
M: editor pref-dim*
! Add some space for the caret.
[ font>> ] [ control-value ] bi text-dim { 1 0 } v+ ;