Moving the skin update from gui_synclist_set_title to
gui_synclist_draw (c41beeb) had the inadvertent side
effect that, if gui_synclist_select_item was called in
between, it may have missed a configured skinlist that
only got enabled by the skin update. Which could lead
to a selection appearing off screen.
This was mainly an issue if you had popped an activity,
which resets the skinlist cfg to NULL, but didn't perform
a skin update before the call to gui_synclist_select_item.
Now that GUI_EVENT_ACTIONREDRAW can be used instead of
GUI_EVENT_ACTIONUPDATE to prevent the display from being
updated, we may as well update the skin immediately in
gui_synclist_set_title again.
Change-Id: Iaee98d670ffb8d7b6590bd2ba11827fef5fba5a8
This disables custom scroll bars when initializing lists
that are currently always un-skinned, in scenarios where
there is neither a new activity to be pushed, nor is the
theme toggled.
Change-Id: I1bb05fc9be956c71e1adb70e764094082d9bb904
Takes care of disabling scroll bars when the current activity
doesn't change, but the theme is toggled. Applies to confirmation
prompts, for example.
Since we're updating the skin immediately afterwards, the cfg
will be reset as needed.
Change-Id: I8a62b6b4ad0abf5176ab6b3e39281021108cb59f
Some themes, such as Themify, FreshOS, iPod reFresh, Jive,
iPodOS, iPone, iClassic, AbsoluteBlack320, and possibly
others, draw a mask over the album art on the foreground
layer, in order to add rounded corners or to apply a fake
camera perspective (instead of taking advantage of the
backdrop layer).
This results in rendering glitches that can be fixed by
drawing the album art first.
Change-Id: Ie373c51304ab0d0a09b8663a8adff343a32ae5bb
Allow setting context menu items
reuses WPS hotkey items
Runs the item
displays the item
Open plugin shows the item name
Pitch shows the pitch speed amount
add 'Show In Files' hotkey item
devices without a hotkey get an extra item
added Manual entries
Change-Id: I427e70e1cad15364ac5d2a7114032e97cc9eee1a
The skin engine is responsible for drawing custom
scroll bars, but isn't kept in sync with list redraws.
Change-Id: Ieb457a4eb8442d4521c67a46a94c4d2132814c64
Eliminate the somewhat circuitous skin_defer_rendering
and skin_render_deferred functions introduced in commit
c145d19e85.
skin_render (and thus skin_update and sb_skin_update),
along with skinlist_draw, list_draw (and thus
gui_synclist_draw), and quickscreen_draw, will never
update the screen anymore. Instead, the skin is only
marked as dirty now.
GUI_EVENT_ACTIONUPDATE redraws the skin as necessary,
and updates the screen afterwards, if the skin is dirty.
This event is sent from get_action, just like before.
A new event, GUI_EVENT_ACTIONREDRAW allows you to redraw
the skin without causing an immediate update at the same
time.
Change-Id: Ib20644853ead901e32f639000f044d6935135bae
- Eliminate separate display update for USB screen UI vp;
wait for skin_render instead
- Eliminate outer loop around handle_usb_events
- Use handle_usb_events in Simulator as well.
Fixes USB screen being dismissed by any button presses,
or by system events.
- When USB keypad mode is changed, only redraw the title viewport
- Delete unused MODE_NAME_LEN #define
- Hide "USB keypad mode:" prefix. Only display current mode setting,
which requires less scrolling and ensures that the new setting
is always visible immediately after it has been changed
- Change comment from:
/* Don't return until we get SYS_USB_DISCONNECTED or SYS_TIMEOUT */
to: /* Don't return until we get SYS_USB_DISCONNECTED */
which reflects existing behavior (comment may have been
copy-pasted from usb_wait_for_disconnect_w_tmo)
- Don't scroll USB keypad mode unless UI vp's width is > 1, since
some themes try to hide the USB viewport and display a custom UI
instead
Change-Id: I9b9703025b00ad807920ee60a843f269f414f6f9
small bug, /t as the last character should left justify without
adding spaces to the end of string
/t also added too many spaces to the end of tabbed lines
adds info comment for new usage
ifdef removes some functionality for the bootloader
Change-Id: Ia4ba80f631f8bac3a13441912a8560616fa2c784
chris_s reported that a vp width of 1 wpuld cause the trxt reflow to go into an endless loop
check for this and skip displaying the splash
add a warning to the sim for catching unintentional cases of this
Change-Id: I9e1c561f745b5bcf113d0a6cdff57a00cd190fd4
only split a long word across lines if it is larger than screen width
also consider \0 as a valid place to split so we still run through the space finding loop
make /t left justify the splash window (in RTL langs it right justifies)
Change-Id: Id2955878a178c66cb0a1c644e62f943247666d8b
Fixes issues with multiple spaces
adds support for \n and multiple \n
adds support for \t (only at start of line)
adds utf8 aware string splitting
locks to max width/height
adds \f to reset min width / height
larger buffer for units with ram > 8mb
make splash buffer static
Needs testing
Change-Id: I46915043719dce0d696c5ab0da3ed92e4755829c
Regression introduced in commit 7aca1d4.
Quickscreen kept redrawing itself over the USB screen,
because remove_event_ex was only called after returning
from it.
Change-Id: I8a187809781cef46d13ed45392efecb28435a9df
Slight optimization of c145d19. Not supposed to result in
any visible difference.
- if UI viewport is drawn for GUI_EVENT_NEED_UI_UPDATE,
it doesn't need to do a viewport update; skin_render
already updates the display
- skin_render_deferred shouldn't need to request that
the skin perform an immediate update
Change-Id: Id03cf89357eaf0d61af1e928c94942d8c4882dba
In part regression introduced in c145d19e85.
force_waiting not taking multiple screens into
account appears to be pre-existing issue.
Change-Id: Iabfc2933470145eb512c8f2763fb350e170cb1fa
Immediately redraw when skin engine does refresh, so
themes that draw over UI viewport don't cause visible
flickering
Change-Id: I6f314cdfbd1136c710b9fee7526673e2f8b98849
Based on commits ce33902 and 8990d52 (without PictureFlow)
from "Rockpod" fork by Nux Li (https://github.com/nuxcodes/rockpod),
with some adjustments.
Addresses flickering when:
- plugin is opened/closed
- activity changes
- theme is toggled
- QuickScreen is opened
In these cases, skin_render will not immediately update the display
anymore, but instead will wait until the UI viewport is ready to be
drawn as well, so we don't produce unnecessary visual glitches.
Change-Id: I8bed8f06221d3e767a32450f199e69d742bc61cd
Initialize a list's dirty_tick to last_dirty_tick instead of to the
current tick.
Issue probably only affects the sim:
To force a list to reinitialize using the GUI_EVENT_THEME_CHANGED
event, last_dirty_tick is set to the current tick.
list_is_dirty() checks whether the list viewport needs to be
re-initialized by comparing the list's dirty tick to last_dirty_tick,
and seeing if time has passed.
In some scenarios though, the list's vp may be initialized, become
immediately dirty, and list_is_dirty is called, all in the same tick.
Change-Id: Ia379117a07bbaf545e0a16d35e74888955893441
Themes like Adwaitapod, Themify, or FreshOS have
custom "lock screens" that are drawn on top of the
UI viewport.
Request a full skin update when unlocked, so you don't
have to press a button to make the hidden UI viewport
appear again.
Change-Id: Idf5023b4e12f7aea1cd7a2e9d9ab2f754387dc48
Stop the lock indicators on the SBS from lagging
behind their actual state when lock notifications
are disabled.
Request immediate skin update in button loop, so
the device doesn't feel laggy.
Change-Id: I42955f65d9ad4ca9196549d806538d1badb5f79d
* Funky macro-based definitions for memchr and strstr
which require an #undef before we use our own in codecs & plugins
* Return value of of strstr is const
Still have several more warnings and link failure with some plugins
but this is a good start.
Change-Id: Ife1f2d3e6f0e0629e3125a9058abc39c6102f452
We currently force a skin refresh when setting the
list title. This causes very noticeable flickering
of the list, if the SBS draws over the UI viewport,
when there is no displayable list content yet
(For an example, check out the Adwaitapod theme).
Instead, only mark the title as dirty. Later, when
drawing the list, register for a UI update callback
and ask the skin engine to render, so that we can
draw the list at the same time.
Note: Flickering related to display updates when
switching activities or when toggling the theme is
unrelated to this, and will still need to be addressed
in separate commits.
Change-Id: Icce899905aa311deccb0cc498aacce2866aaae8a
Limit these (less commonly used) "file handling" operations
to the File Browser while making it quicker to reveal the
file that is currently playing from the WPS.
"Open With" and "Delete" remain available as WPS shortcuts.
Change-Id: I91e582a45998160f07a3f7e16d475d770e8c5212
gui_usb_screen_run() is a do{} while(0) macro, resulting in an unused
variable warning in the "caller"
Change-Id: I4b4b00ef38decfb5cc9db0da3d81ad0c9a4207d1
add second argument to usb_acknowledge.
it can be used for more appropriate connection tracking that does not
rely on timeout in the future.
Change-Id: I8a44366b7c7a1f944524c4ba8ecd6d9673746a65
The WPS, or certain screens accessed directly from it,
may have displayed a title when they shouldn't have.
Change-Id: I655f58aa7c4ff3ff996d9798fdbe06c14f09c27b
Each time viewportmanager_theme_enable (or _undo) is called,
the SBS title is reset, even if the theme remains enabled.
Thus switching from one menu to another, if do_menu is called
again, briefly results in an empty title before the correct
one is displayed. Even unchanged titles will unnecessarily
flash for a moment. Other theme elements that are drawn using
conditions based on the title, may also appear glitchy.
This patch adds a way to make the status bar title persist by
copying it to a static buffer. Persistent titles are not reset
by toggle_theme (although scrolling will be stopped in
viewportmanager_theme_undo), so that the theme can immediately
display the appropriate title in do_menu, simplelist_show_list,
the yesno screen, or plugins that want to keep the theme enabled.
Change-Id: I1ec8f233b730321793eb7d3cad51496ee1b35440
When deleting files or directories, you will now see
the path's basename in the previously empty title of
an SBS, making it a bit easier to immediately know
whether you've selected the correct item.
Matching titles were also added everywhere else that
confirm_delete_yesno is used.
The full path of the item is still displayed below,
and continues to scroll, so that themes without a
title, such as the default cabbiev2, will look the
same.
Change-Id: I32422cfbbf6e680f58456237380176617789cac3
Later GCC versions are apparently more permissive than older versions
when it comes to variable declarations not part of a block (ie {} that
immediately follows a case statement.
This resulted in every non-simulator device target failing to build,
along with sim build on older compilers. I should have caught this in
the review; mea culpa.
Change-Id: Id32e085e34601cca7be273ed45711a4b8ee182a0
This new tag returns the position in the playlist as a percent. The main usecase for this is to use it as a bar tag, allowing themes to visually present playlist progress.
Change-Id: I0eb001e7458d97b8a0db39f3980d9c283bc8806b
If you try to rewind music at lrcplayer it
1. returns back to old time
2. play for some time (1-2 seconds)
3. only after that returns for new time
According to wps code audio_pre_ff_rewind function should be called
before any rewinding. It stops playback and automatically resumes it
after audio_ff_rewind call
Change-Id: Id3755bfe4deeb7cd5d889ad7d8e1dec45061fa5c
viewportmanager_theme_enable isn't balanced by
viewportmanager_theme_undo when connecting to USB
while simplelist is displayed.
Change-Id: Iad9408a52150934246c886a01a5d1efc8febd0fd
Fixes (at least) Shortcuts menu not stopping
a scrolling line after leaving menu for a
plugin in some situations.
Change-Id: I90b4cc71a63e557565d028aae27db082e2e1813f
Most notably for CD rips that use a track number of 0 for
the leadin.
Therefore change our "invalid track number" canary to -1 instead
of 0. Additionally don't try to parse an empty string.
In the process, get rid of redudant 'discnum = 0' as well.
NOTE: While not strictly necessary, we recommend rebuilding the
database to ensure files without track numbers are
updated with the new canary.
Change-Id: I543f98ca49cec7b5eeffa7c14c1eca57171f345a
Move the volume bar input handling to skin_touchsupport.c so
volume bars can be used in the .sbs as well as the .wps skin.
Change-Id: I018fa1c84f93b64d676b68e3bea63ddb9141e492
Fix the heuristic used for detecting a touch-enabled theme.
The old method assumes that volume bar and progress bar tags
are always auto-created, but this might not be true. Instead,
mark regions that originate from a %T tag as user-created and
check for those.
Change-Id: Iec732d299a2b4e298bef8069a68ff94e3b642703
This is necessary if you want to detect touches on the bar region
using %Tl conditionals. Suppressing the auto-created region and then
creating one manually using %T doesn't give exactly the same results
because user-defined touch regions can't yet specify padding.
Change-Id: I2f4bde8eb56ba89645c72f3cc9d4b2355b934abd
Simply knowing that a touchscreen is present isn't that useful for
themes. Having %Tp evaluate as true when in pointing mode and false
in 3x3 mode is better. For example, themes can change their layout
or hide touch UI elements when in 3x3 mode, or show a status icon.
Although a similar effect can be achieved with the %St tag it's
simpler to use %Tp for this purpose -- it can report the current
mode, not just the user preference.
Change-Id: Ie343c105970dca11864fa44c6a091ed8e9e35b3d