@@ -323,6 +323,53 @@ func TestStdParagraph_DrawContent_PlacesTextBulletInRTLSlot(t *testing.T) {
323323 }
324324}
325325
326+ func TestStdParagraph_DrawContent_AlignsTextBulletWithinLTRSlot (t * testing.T ) {
327+ tests := []struct {
328+ name string
329+ alignX string
330+ wantX func (* StdParagraph , * labelTestWriter , * BulletStyle ) float64
331+ }{
332+ {
333+ name : "center" ,
334+ alignX : "center" ,
335+ wantX : func (p * StdParagraph , w * labelTestWriter , b * BulletStyle ) float64 {
336+ return ContentLeft (p ) + max ((b .Width ()- p .bulletTextWidth (w , b ))/ 2 , 0 )
337+ },
338+ },
339+ {
340+ name : "end" ,
341+ alignX : "end" ,
342+ wantX : func (p * StdParagraph , w * labelTestWriter , b * BulletStyle ) float64 {
343+ return ContentLeft (p ) + max (b .Width ()- p .bulletTextWidth (w , b ), 0 )
344+ },
345+ },
346+ }
347+
348+ for _ , tc := range tests {
349+ t .Run (tc .name , func (t * testing.T ) {
350+ p := & StdParagraph {}
351+ p .font = & FontStyle {id : "body" , entries : []fontEntry {{name : "Helvetica" }}, size : 12 }
352+ p .paragraphStyle = & ParagraphStyle {}
353+ p .bullets = []* BulletStyle {{text : "1." , width : 40 , font : p .font , alignX : tc .alignX }}
354+ p .SetLeft (10 )
355+ p .SetTop (20 )
356+ p .SetWidth (140 )
357+ p .AddText ("Hello world" )
358+
359+ w := & labelTestWriter {t : t , fonts : defaultTestFonts (t ), lineSpacing : 1.0 }
360+ if err := p .DrawContent (w ); err != nil {
361+ t .Fatal (err )
362+ }
363+ if len (w .moves ) < 3 {
364+ t .Fatalf ("move count = %d, want at least 3" , len (w .moves ))
365+ }
366+ if got , want := w .moves [1 ][0 ], tc .wantX (p , w , p .Bullet ()); math .Abs (got - want ) > 0.001 {
367+ t .Fatalf ("bullet x = %v, want %v" , got , want )
368+ }
369+ })
370+ }
371+ }
372+
326373func TestStdParagraph_SetAttrs_ParsesMultipleBulletReferences (t * testing.T ) {
327374 scope := & Scope {}
328375 first := & BulletStyle {id : "first" , text : "*" , width : 12 }
0 commit comments