Commit graph

32122 commits

Author SHA1 Message Date
Frank Gevaerts
837cad0d38 bidi.c: Check buffer sizes.
This could cause a crash with certain themes and long filenames.

Change-Id: I0a48c91bb089b122a56c4e126ba4d7a175399fa2
2014-01-09 23:30:32 +01:00
Thomas Martitz
99f3f77ee8 skin_engine: Pass string to put_line() via $t because they can be very large.
Change-Id: I02d6bf492bb42e173a7b436427e3cc3560d80183
2014-01-09 23:28:33 +01:00
Thomas Martitz
7ba2d0160b put_line(): Limit and truncate inline strings to MAX_PATH+32.
Because inline strings have to be copied (to escape '$') the local buffer
can be exhaused. The code didn't check for this. The buffer is increased
to handle filenames plus some extra chars but truncates to avoid overflow.

If you have longer strings please pass them via $t tag, in which case
put_line() imposes no additional length-limitation.

Change-Id: I0ca20adbe72f6d44cb442f34d665c16b12cbbaeb
2014-01-09 23:17:38 +01:00
Thomas Martitz
3be3a40138 put_line: Be more careful with changing fg and bg colors.
put_line() needs to change fore- and background colors if required by
the line style. This should really only be done if required, and be undone
as to not compromise subsequent lines. This fixes %Vf and %Vb skin tags.

Change-Id: I85e5a0d1d64aa9eb76a891d9ce1de1320274a69a
2014-01-09 17:42:47 +01:00
Thomas Martitz
fde92de224 lcd_nine_segment_bmp: Fixes for non-ideal image dimensions.
1) The 9-segment images need not be multiple of 3 pixels anymore. If it
isn't the inner segments will be smaller than the corners.

2) If the desired actual images is not a multiple of the segment sizes the
function drawed more than the desired rectangle. This is fixed by
drawing the last segment only partially.

Change-Id: Ic918facd8734fa4a4aa72536f0b67de82d81651e
2014-01-09 00:43:46 +01:00
Thomas Martitz
124e9c1cb6 Fix put_line via multiscreen API on remotes. Stupid me.
Change-Id: Id75dfd6ab3957dd27cb7db6f8776f754d85c19b4
2014-01-08 10:45:00 +01:00
Marcin Bukat
51d8a45057 adfuload: add atj213x timer0 test program
This simple program shows how to setup timer for periodic
operation. Interrupts are not used yet and simply pending
irq bit is polled and cleared when set. This program
supports my understanding of disassm of ADEC_N63.BIN that
P_CLK is configured for 7.5MHz and timer clock source is P_CLK
directly.

Change-Id: Idd6461bf847c763b78b8c324012ec2515f65dd41
2014-01-08 08:56:09 +01:00
Thomas Martitz
81be2016bb Fix Player red and icons on mono displays.
Change-Id: Ib8adcb4c70f2dd3ddd25da8f0606f48926dfd89e
2014-01-07 23:39:37 +01:00
Thomas Martitz
4f5894de52 Bump plugin API and ABI for put_line and struct viewport related changes.
Change-Id: I891e3c612ec0fb27e393561dababfc5ef7eb6e46
2014-01-07 23:02:52 +01:00
Thomas Martitz
e766e6d9f3 reversi: Update viewport initialization to new member fields.
Change-Id: I37f77e4ad5abf04006dd6ee2a82de115ef204e3a
2014-01-07 23:01:07 +01:00
Thomas Martitz
10a2e6738d Oops, pasted to the wrong place.
Change-Id: Icb07ddd04171699e997eca171bf8756b5fd9f024
2014-01-07 22:46:45 +01:00
Thomas Martitz
444d2e508a Add missing kernel.h include (hopefully the last one, really), take #4.
Change-Id: I167e988868b53203ea926540699d587e115635e8
2014-01-07 22:41:26 +01:00
Thomas Martitz
0e6d86e4fe Fix a few reds and yellows.
Change-Id: I9ad2aca494f2ea3ca5453082ec5491ec031f9ae5
2014-01-07 22:41:00 +01:00
Thomas Martitz
d146970ca1 lcd/grey: Enable viewport fg_pattern and bg_pattern for all bitmap targets.
Greylib performed a horrible hack and stored fg and bg patterns in other
struct viewport fields. One of them was just removed. So instead of
this hack simply enable the *_pattern fields for mono targets as well,
so that greylib can use them normally.

Change-Id: Ib0842ebcc97f5bf9d9382b4471903afa2f96f39f
2014-01-07 22:14:41 +01:00
Thomas Martitz
e1c7b3b8f7 lcd-16bit: Remove {lss,lse,lst}_pattern fields from struct viewport.
These where used for line styling during scrolling, which is now done in apps/,
The  viewport struct doesn't need to record these anymore.

Change-Id: I810d9dcb2644b00a798c6e75acab69c74a78e77f
2014-01-07 14:13:48 +01:00
Thomas Martitz
deb6ac3693 lcd-16bit: Move lcd_gradient_fillrect/_part() to lcd-16bit-common.c.
Change-Id: I6b2d2ba73464610556cfd9ecec52fc62adb007c7
2014-01-07 14:13:48 +01:00
Thomas Martitz
36e469db8b lcd-common: Remove direct style (line decorations) from lcd-puts* functions.
This logic is moved into apps (put_line()) which can better handle line
decorations with respect to scrolling, mulitline and other complications.

Firmware doesn't need this. The remaining drawing function know only one style,
that is foreground on background/backdrop (changing drawmode is still supported).

Change-Id: I707060edc388a7d723a7d09b0cf5cbda6ec56708
2014-01-07 14:13:48 +01:00
Thomas Martitz
ad0985ea1c lcd-common: Remove support for specifying y_offset from lcd_puts* functions.
This main (and only) purpose for it was to adjust the pixel position of the text
in otherwise linebased (scrolling) functions. With pixel-based scrolling
this isnt necessary anymore.

Change-Id: I2a45b8ca6a3f8f50aa2f6630201b30ce9ddfe043
2014-01-07 14:13:48 +01:00
Thomas Martitz
4978094480 lcd-common: Remove support for custom line heights from viewport.
Since scrolling is now pixel-based this is not necessary anymore. custom line
height is handled by put_line() but can also possible to implement with
lcd_puts_scroll_func().

Change-Id: Iee9b12bf99afac93d95d2a1a6f5d5b4db237b21c
2014-01-07 14:13:48 +01:00
Thomas Martitz
9a4686b563 lcd-common/scroll_engine: Remove unused functions lcd_puts_style_xyoffset() and lcd_puts_scroll_style_xyoffset().
With this functions removed there is no exported function in firmware left
that draws line decorations. Also no function supports specifying an y-offset
anymore (was used for pixel accurate positioning of otherwise strictly line-based
API calls).

Both should be handled in apps/ now.

Change-Id: Iba4b28ccc6e686c7db63e34b51ad4badae983fce
2014-01-07 14:13:48 +01:00
Thomas Martitz
775ebe4ff6 lcd-common/scroll_engine: Remove unused functions lcd_puts_scroll_style().
Change-Id: Ia4f943b3738ab6e66b0e3f1507c629b36d7eba94
2014-01-07 14:13:48 +01:00
Thomas Martitz
7cd07290e6 lcd-common: Remove unused function lcd_puts_style_offset().
Change-Id: I24da23d132f933fe647416dc58e8f50879715423
2014-01-07 14:13:48 +01:00
Thomas Martitz
1e324aac36 lcd-common: Remove unused function lcd_puts_style().
Change-Id: Id2c64c116f79b8e61a7af49b9072b3e884ffb455
2014-01-07 14:13:48 +01:00
Thomas Martitz
8f64625888 lcd-common: Remove unused function lcd_puts_offset().
Change-Id: I39749bf3db915e5a8ddb6e6f25eb201ea0aaf981
2014-01-07 14:13:48 +01:00
Thomas Martitz
a422604435 lcd-common/scroll_engine: Remove unused functions lcd_puts_scroll_offset() and lcd_puts_scroll_style_offset().
Change-Id: Ia84ae88020d06a1cb634942ab5e635fd5d10ac66
2014-01-07 14:13:48 +01:00
Thomas Martitz
2ef9aa51f3 test_gfx: Add benchmark for put_line().
Change-Id: I94cd5cec5ce169a4ddb60fcb3c09e2ffb50a3401
2014-01-07 14:13:41 +01:00
Thomas Martitz
5aa5a923f3 splitedit: Adapt put_line().
This plugin had a (broken) poor-mans list implementation which can be
better achieved through put_line().

Change-Id: I4ba92ba3a01b84a273b3f0a5d067b24c622ddc9e
2014-01-07 14:13:40 +01:00
Thomas Martitz
91ef65306b skin_engine: Adapt put_line().
This allows for code unification and removal of a workaround (STYLE_XY_PIXELS).

Change-Id: Ie92d377414cad943cdb06976af10b4f315f32710
2014-01-07 14:13:40 +01:00
Thomas Martitz
eec89a90ff lists: Adapt put_line().
This enables removing large portions of code, simplifiyng the drawing routine.
All of the removed code is functionaltiy now available through put_line().

Change-Id: Ib8e61772134189a8c3c6d22345c0b45e912bea76
2014-01-07 14:13:40 +01:00
Thomas Martitz
5d6974641b Introduce put_line().
This function is a fully-fletched, high-level pixel-based line printer, that
combines functionality of several firmware and list functions. It can
draw spacing, icons and text in a single call, in any order and each multiple
times. It can also apply line decorations at the same time.

It features printf-like semantics by accepting a format string that contain
format tags as well as inline text.

It's accessible directly, but also through the multi-screen api for plugins.

Change-Id: I70f5a77bbf4b0252521f2e47ead377b9d6d29b54
2014-01-07 14:13:17 +01:00
Thomas Martitz
5752d029fd icons: Provide accessors to the icon format (mono or native).
This is needed by the upcoming put_line() api to apply different drawmodes
depending on the format.

Change-Id: I626a7369a6e75c9c46af1ca5e4f1a9d401899b68
2014-01-07 11:49:53 +01:00
Thomas Martitz
bc9a45b05f icons: Remove automatic left padding if x == 0.
Since x is viewport-relative the icon isn't necessarily placed at the physical
display boundaries so that the padding isn't always useful. In fact it does
more harm if one wants to place an icon exactly at 0 of a (non-default)
viewport.

Calling code looks still mostly fine. I've only modified list drawer to include
the padding in the call-site.

Change-Id: I6b16b3d4377c3553234667b79837adde10e0edf2
2014-01-07 11:36:00 +01:00
Thomas Martitz
76476751d7 lcd-charcell: Correct get_icon_width() stub, everything is 1 char wide.
Change-Id: I2a76c306be8f11827cb8d1f12641d710f49274aa
2014-01-07 11:36:00 +01:00
Thomas Martitz
acee675a5e lcd-charcell: Add set_drawmode() wrapper to multi-screen API.
Change-Id: Idb6477aca8b19cb346ba2c2f5b91074e4679b0dd
2014-01-07 11:36:00 +01:00
Thomas Martitz
77836e5736 lcd-16bit: Introduce lcd_gradient_fillrect_part().
It is similar to lcd_gradient_fillrect(), except that it only draws a part
of the complete gradient. This can be used to draw only the bottom half
of a full gradient.

Change-Id: Ib47cc5237f6966e35ba07988bddbb00fd97adf96
2014-01-07 11:36:00 +01:00
Thomas Martitz
6630958533 lcd-common/scroll_engine: Introduce lcd_putsxy_scroll_func().
This function supports installing a custom scroll callback. This will be
called when the scrollengine redraws the line. It allows to draw extended
styles (or anything your can possible imagine) along with the text.

It is also strictly pixel-based, the first pixel-based function that supports
scrolling.

Change-Id: I57f81ac7b3d08b877aea4cb8afa882f175ebcdfc
2014-01-07 11:36:00 +01:00
Thomas Martitz
b8505222c0 scroll_engine: Change header inclusion
Change-Id: I033db3d3a838f0a950ce7707de6a0cd4b2595d93
2014-01-07 11:36:00 +01:00
Thomas Martitz
98d2121eaa bloat-o-meter.py: Now compatible to python 3.
Change-Id: Id617aa6304a5a9263ef6ceed7d9c3010b47e73a8
2014-01-07 10:35:59 +01:00
Frank Gevaerts
204668db89 Make sure usb class driver disconnect() functions are called properly.
disconnect() needs to be called exactly once per call to init_connection().
In case of bus resets, disconnect() was not called, which led to leaking
alloc_maximum() allocated buflib handles, which led to buflib running out
of memory to allocate.

Change-Id: I03025da578dc54e48b6de6bd3e3f40feae7220a6
2014-01-05 22:57:04 +01:00
Dominik Riebeling
1e1b21591d Bump Rockbox Utility version to 1.4.0.
Change-Id: I56cb05e2367a24341af6a8feb70f291628e78797
2014-01-05 21:44:28 +01:00
Frank Gevaerts
2a63502c09 Check that core_alloc_maximum() returned something useful, and panic if not
Change-Id: I7ae40db0f81d1d51742501936b13b387f94a25e5
2014-01-05 20:56:55 +01:00
Thomas Martitz
463d343102 Add missing kernel.h includes (hopefully all of them), take #3.
Change-Id: I68ed0e914239f0caf83082a41c2480a01b69285a
2014-01-05 20:51:25 +01:00
Thomas Martitz
22b33d6eb8 Add missing kernel.h includes (hopefully all of them), take #2.
Change-Id: I62cedf992bb096987050621cfc34f0432e9da170
2014-01-05 20:42:48 +01:00
Thomas Martitz
22a28f9caa Add missing kernel.h includes (hopefully all of them).
Change-Id: I9c1825296a788587b8d494d8514b3314847b0ff0
2014-01-05 20:32:09 +01:00
Thomas Martitz
2f4a94189d bmp.c: Undo debug stuff that got in by accident.
Change-Id: Ic37658ab8d81405e28a4097d38785900fd0951cd
2014-01-05 19:37:48 +01:00
Thomas Martitz
281d1fadb3 Do not include kernel.h in system.h.
system.h doesn't need it on its own and this change makes it less
dependant on Rockbox internals.

Change-Id: I4e1e4108a52a7b599627a829204eb82b392fc6d6
2014-01-05 19:35:23 +01:00
Thomas Martitz
dd7b141736 apps/bitmaps: Replace pseudo-native default icons with mono ones.
The old icons looked exactly like the mono version, and all >1 bpp drivers
support rendering mono bitmaps. Therefore a mono bitmap can be used which
requires less ram.

This affects only the builtin icons, not the ones used by cabbiev2.

Change-Id: I3b02b5b04fe8b4bcc69e83310871254d336b648a
2014-01-05 19:35:23 +01:00
Thomas Martitz
a17a7038c2 lcd: Fix certain drawmode combinations.
Some seldomly used drawmode combinations did not work in conjunction with
alpha bitmaps and backdrops. Now all should work (see comment added) by using
more bits.

Change-Id: I2bc96ecf471fa8c1a608a321a235b9c8527b3dc5
2014-01-05 19:35:23 +01:00
Dominik Riebeling
17a1867c9c Fix rm function on Windows once more.
Windows del doesn't handle a non-existing folder gracefully, so check for
existence first.

Change-Id: I9c401f3f3a3e1e01b80d29e335256fbf3db22d35
2014-01-05 17:08:50 +01:00
Dominik Riebeling
82b30de20f Fix rm function on Windows.
Windows del doesn't handle paths with / as separators, need to convert them
first.

Change-Id: Idb3efa96167aec5666517feabab67385ebd2db1a
2014-01-05 17:05:11 +01:00