1
0
Fork 0
Commit graph

37 commits

Author SHA1 Message Date
Daniel Thompson
0831f79a10 draw565: Improve line wrapping
Currently the final word of wrapped text will always appear as a single
word on its own line. Fix this by rearranging the break cases to avoid
searching for the most recent space when we get to the end of the text.

Fixes: #230
Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2021-07-22 20:04:50 +01:00
Daniel Thompson
4ad8273902 draw565: Fix bounding box calculations
wasp-os uses an drawing optimization technique to automatically place
a single pixel line on the right of glyphs when rendering them. This
results in a change to the bounding box for a rendered string (by adding
a single pixel on the right of the final character). Fix the bounding box
calculations accordingly. Among other things this eliminates graphical
artifacts when rendering labels in 2048.

Fixes: #203
Fixes: 58b5c0378e ("draw565: Optimize the string drawing")
Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2021-06-04 10:46:25 +01:00
Daniel Thompson
58b5c0378e draw565: Optimize the string drawing
Currently there is a redundant fill operation issued for every character
drawn. This was added to draw the background colours correctly but the
change did not account for the optimized character rendering in
_draw_glyph().

This results in ~15% performance improvement for character rendering

Fixes: cc34c5d46d ("draw565: Fix wrong background color of strings")
Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2021-03-29 22:16:43 +01:00
Daniel Thompson
402801c538 draw565: Avoid over-long lines when handling space
Currently, if the line wrapper attempts to break a line on a space and
that space character is outside the bounding box, then we generate an
over-long line.

Fix this by handling line break generation *after* we have checked the
length of the current line.

Fixes: #193
Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2021-03-22 08:29:06 +00:00
kozova1
28dbc66376
drivers: draw565: Added bounding_box() function that returns the size of a string.
This function returns a tuple of (width, height) of the string,
as it would appear if used in draw.string()

Signed-off-by: kozova1 <mug66kk@gmail.com>
2021-02-05 16:42:01 +02:00
Daniel Thompson
a124734ff2 draw565: Fix an out-by-one error in _bounding_box
Currently we add an extra blank pixel to the end of the string but this
is not required.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2021-02-04 22:15:59 +00:00
Daniel Thompson
6b41c8f3db drivers: st7789: Pre-allocate a memoryview
Reduce the cost of slicing the linebuffer by pre-allocating a memoryview.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2021-01-17 17:44:21 +00:00
Daniel Thompson
2fe3ac1388 draw565: Optimize string drawing
Avoid needless bouncing the chip select when drawing glyphs. This
improved performance by around 15% for 24pt fonts.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2021-01-17 16:03:42 +00:00
Daniel Thompson
ff76abfb8b draw565: Add lighten/darken functions
Add functions to generate shades from a single (usually theme provided)
basic palette colour.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2020-12-29 12:30:20 +00:00
Daniel Thompson
314947278d draw565: Allow strings to be right justified
Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2020-12-29 08:59:48 +00:00
Daniel Thompson
01a7ad4d78 draw565: Handle empty strings when calculating the bounding box
Currently the empty string cannot be drawn into a fixed width box.
Fix this by adding a special case for empty strings.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2020-12-28 14:28:54 +00:00
Daniel Thompson
8c1ab85257 draw565: Fix bug in the straight line optimization
Currently the line drawing code does not draw the final pixel of
straight lines. Thus a line from (0, 0) to (10, 10) finishes on a
different pixel to (10, 0) to (10, 10).

Fix this by removing the spurious subtract one from the end point

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2020-12-28 14:27:10 +00:00
Daniel Thompson
b7c622c03d draw565: fix width handling for vertical and horizontal lines
Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2020-12-27 18:18:14 +00:00
Daniel Thompson
0ae31a53b3 draw565: Add a polar line drawing function.
Polar coordinates are very convenient for implementing anything with
radial lines (such as a traditional watch face).

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2020-12-27 09:07:06 +00:00
Daniel Thompson
8c03ddbb7a draw565: Add width to the line drawing function
Currently all lines are a single pixel wide. To draw wider lines we
must draw two parallel lines with a single pixel offset and this is
a *very* inefficient approach, espeically on ST7789 where we spend
longer setting the clipping window than we do drawing each pixel.

Fix this by constructing a line using a variable sized square rather than
a single pixel. This will "overdraw" (some pixels will be drawn more than
once) but since square blocks can be efficiently transferred to the
display the overdraw is acceptable.

Note: It is a difficult decision whether to maintain the convention that
      color is the last argument or to keep compatibility with existing
      line drawing tests. This patch opts for the former and fixes up
      all uses within the existing codebase.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2020-12-27 08:52:54 +00:00
Daniel Thompson
8a14faa668 draw565: Improve default argument values for line()
Currently there are default argument values for the start and end
coordinates but the defaults don't really make any sense since there
is no reason to prefer the value 0 over any other. Remove them.

Similarly color currently defaults to 0xffff which isn't right. It
should default to the foreground colour.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2020-12-27 08:40:45 +00:00
Kozova1
c17abd1728 draw565: Added line drawing function
This is the API:
drawable.line(x1, y1, x2, y2, color)

The function has optimizations for the case of vertical or horizontal lines.

Signed-off-by: Kozova1 <mug66kk@gmail.com>
[daniel@redfelineninja.org.uk: Minor update to commit message]
Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2020-12-12 18:18:01 +00:00
Siroj42
cc34c5d46d draw565: Fix wrong background color of strings
Signed-off-by: Joris Warmbier <siroj42@t-online.de>
2020-08-02 21:55:04 +02:00
Daniel Thompson
bbe8add40c wasp: Switch to the faster fill routines
Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2020-06-22 22:21:13 +01:00
Daniel Thompson
04a8daeff4 draw565: Optimize filled rectangle drawing
The original approach is *really* bad at drawing vertical lines (it ends
up working a pixel at a time and works the chip select for each one.

Optimize both the pixel fill and the use of the line buffer. The result
is 20% faster for quarter screen fills, 3x for horizontal lines and 6x
for vertical lines.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2020-06-22 22:20:34 +01:00
Daniel Thompson
57999226fd draw565: rle2bit: Add support for palette overrides
This allows some interesting manipulations of 2-bit images.
2020-05-24 14:19:04 +01:00
Daniel Thompson
7f6b1b9059 draw565: Switch to a different palette for RLE 2-bit images
This is an incompatible change... older 2-bit images will need to be
re-encoded to display correctly.
2020-05-18 22:17:51 +01:00
Daniel Thompson
ac1a799bfa draw565: Fix line optimization code
sx is measured in pixels (2-bytes) and len(display.linebuffer) gives
a value in bytes so the divisor isn't right.

Whilst we are here let's make sure we use integer division too.

Fixes: #18
2020-05-17 09:47:15 +01:00
Daniel Thompson
f07fb6d22a wasp: draw565: docstrings for headings and __init__ 2020-05-14 21:44:05 +01:00
Daniel Thompson
93ad0e6972 wasp: draw565: docstring improvements 2020-05-11 23:07:35 +01:00
Daniel Thompson
f68eb610c5 wasp: On-device crash reporting
If an application crashes let's report it on the device so it can be
distinguished from a hang (if nothing else it should mean we get better
bug reports).
2020-04-11 20:15:02 +01:00
Daniel Thompson
f734568ad2 wasp: draw565: Optimize the bit expansion blitter slightly. 2020-04-10 20:23:12 +01:00
Daniel Thompson
22ca8886c2 wasp: draw565: Automatic RLE format conversion
From here we can also bring colour to the launcher!
2020-04-10 20:22:51 +01:00
Daniel Thompson
a1badfd95d wasp: draw565: Fix colors when burst filling a line. 2020-04-10 20:20:01 +01:00
Daniel Thompson
fd64abe882 wasp: draw565: Optimize the 2-bit RLE drawing functions
There's a bunch of different changes here but there are only really three
big wins. The biggest win comes from restructuring the 2-bit RLE decode
loop to avoid the inner function (~20%) but the switch to 16-bit writes in
_fill() and adoption of quick_write (e.g. no CS toggling) are also
note worthy (and about 5% each).
2020-04-08 21:50:42 +01:00
Daniel Thompson
a1a8f3f8a3 wasp: draw565: Add 2-bit RLE decoder 2020-04-06 22:04:21 +01:00
Daniel Thompson
c593e1e9f9 wasp: draw565: Allow the drawing context to be reset
The main reason to reset the drawing context is so that it can be reset
before we call foreground() on an application.
2020-04-06 22:04:20 +01:00
Daniel Thompson
b9fe31241c Add licensing information for all wasp-os files. 2020-03-22 15:40:18 +00:00
Daniel Thompson
69bc452c65 draw565: Optimize the font rendering
This is a big one... more than 4x increase in font rendering performance!
2020-03-09 21:29:35 +00:00
Daniel Thompson
031d139b7c wasp: draw565: Refactor to allow apps to focus on the drawable. 2020-03-09 00:00:13 +00:00
Daniel Thompson
7fc4592383 wasp: draw565: Add some docstrings 2020-02-23 20:52:09 +00:00
Daniel Thompson
b508f4dc26 wasp: Add a simple font renderer 2020-02-19 19:57:08 +00:00