MCPcopy
hub / github.com/mum4k/termdash / Draw

Method Draw

widgets/segmentdisplay/segmentdisplay.go:207–269  ·  view source on GitHub ↗

Draw draws the SegmentDisplay widget onto the canvas. Implements widgetapi.Widget.Draw.

(cvs *canvas.Canvas, meta *widgetapi.Meta)

Source from the content-addressed store, hash-verified

205// Draw draws the SegmentDisplay widget onto the canvas.
206// Implements widgetapi.Widget.Draw.
207func (sd *SegmentDisplay) Draw(cvs *canvas.Canvas, meta *widgetapi.Meta) error {
208 sd.mu.Lock()
209 defer sd.mu.Unlock()
210
211 segAr, err := sd.preprocess(cvs.Area())
212 if err != nil {
213 return err
214 }
215
216 sd.lastCanFit = segAr.canFit
217 if sd.buff.Len() == 0 {
218 return nil
219 }
220
221 text := sd.buff.String()
222 aligned, err := alignfor.Rectangle(cvs.Area(), segAr.needArea(), sd.opts.hAlign, sd.opts.vAlign)
223 if err != nil {
224 return fmt.Errorf("alignfor.Rectangle => %v", err)
225 }
226
227 optRange, err := sd.wOptsTracker.ForPosition(0) // Text options for the current byte.
228 if err != nil {
229 return err
230 }
231
232 gaps := segAr.gaps
233 startX := aligned.Min.X
234 for i, c := range text {
235 if i >= segAr.canFit {
236 break
237 }
238
239 endX := startX + segAr.segment.Dx()
240 ar := image.Rect(startX, aligned.Min.Y, endX, aligned.Max.Y)
241 startX = endX
242 if gaps > 0 {
243 startX += segAr.gapPixels
244 gaps--
245 }
246
247 dCvs, err := canvas.New(ar)
248 if err != nil {
249 return fmt.Errorf("canvas.New => %v", err)
250 }
251
252 if i >= optRange.High { // Get the next write options.
253 or, err := sd.wOptsTracker.ForPosition(i)
254 if err != nil {
255 return err
256 }
257 optRange = or
258 }
259 wOpts := sd.givenWOpts[optRange.AttrIdx]
260 if err := sd.drawChar(dCvs, c, wOpts); err != nil {
261 return err
262 }
263
264 if err := dCvs.CopyTo(cvs); err != nil {

Callers

nothing calls this directly

Calls 9

preprocessMethod · 0.95
drawCharMethod · 0.95
RectangleFunction · 0.92
NewFunction · 0.92
needAreaMethod · 0.80
ForPositionMethod · 0.80
AreaMethod · 0.45
StringMethod · 0.45
CopyToMethod · 0.45

Tested by

no test coverage detected