crysterm icon indicating copy to clipboard operation
crysterm copied to clipboard

Fix border drawing when border width or height == 0

Open docelic opened this issue 2 years ago • 1 comments

The code previously supported either having no border on a particular side, or having a border of 1 cell. But now border can be of arbitrary width/height, and also a particular side can have border of width or height 0.

Somewhere inside src/widget_rendering.cr#_render there is a part titled "Draw borders". Its code works on the assumption that if there is a border, its width/height is 1 cell. Having a border of 0c makes the border not show up, but it does overwrite the text in the line.

The part that the code reaches is near the end of the function:

          if (border.bottom == 0) && x != xi && x != xl - 1
            ch = ' '
            if cell != {default_attr, ch}
              lines[y][x].attr = default_attr
              lines[y][x].char = (ch || ' ')
              lines[y].dirty = true
            end
            next
          end     

This code should be adjusted so that a border of 0 on a particular side behaves identically as the no* setting on that side (e.g. like notop or noleft).

docelic avatar Apr 04 '23 22:04 docelic

When resolved, also update Style#border to have a non-nil border object.

docelic avatar Apr 13 '23 18:04 docelic