1) Enable scrub bar by default, to increase visibility of the new feature.
2) Add 'Enable/Disable Scrub Bar' to QP right click menu.
Did not remove Scrubbing from transport menu, as to do so disables scrubbing.
Vital feature of MixerBoard as the point is to be able to have large sliders.
The problem was that the slider background was cached in a bitmap, and that cached image was not being refreshed on a resize.
Restored Paul's original intention, which I inadvertently changed in my fix for Bug 1419. Moving into the scrub ruler shows the scrub indicator now even before we actually start scrubbing (or seeking). The tooltip is now seen as belonging to the scrub indicator rather than to the ruler. Additionally I show the indicator immediately on entry, rather than requiring a movement left or right first, which I think is better and I think the original version didn't.
Bug 1451 comment 6 asks for PlayHead to change too with the change in the button icon on up/down, making the action of the button clearer.
This change does not though change the icon on the button to red when recording. It stays green, though the PlayHead does change correctly.
Per comments in the bug, fixed by making the pinned/unpinned button more clearly a button.
This involved adding a new type of grabber that does not have the ribs for dragging it and acts as a spacer.
Also fixing grabber so that it does not have to be at position (0,0)
Also making the ruler 1 pixel higher.
Also changing the pin button to be a toggle button that changes from up to down on a click.
Also fixing AButton so that an image can be bigger than the button.
Before this change, an idle Audacity on a recent Linux laptop uses 6%
of CPU. This is because DrawOverlays() is called every 50ms through a
timer in TrackPanel, which instanciates a wxClientDC. This is quite
expensive and dominates the profiles: creating wxClientDCs is 84% of
the CPU audacity spends while idle, according to callgrind. With this
change, we avoid creating wxClientDCs when it's not necessary.
After this change, and idle Audacity consumes 1.6% of CPU, and most of
the time is spend in gtk/wxwidgets processing events.
Here are the perf stats of an idle Audacity before the change:
524.425485 task-clock (msec) # 0.060 CPUs utilized
825 context-switches # 0.002 M/sec
36 cpu-migrations # 0.069 K/sec
0 page-faults # 0.000 K/sec
1,198,433,346 cycles # 2.285 GHz
1,243,329,771 instructions # 1.04 insn per cycle
308,073,049 branches # 587.449 M/sec
5,801,494 branch-misses # 1.88% of all branches
8.808129958 seconds time elapsed
and after:
149.110455 task-clock (msec) # 0.016 CPUs utilized
908 context-switches # 0.006 M/sec
32 cpu-migrations # 0.215 K/sec
0 page-faults # 0.000 K/sec
313,372,582 cycles # 2.102 GHz
167,401,770 instructions # 0.53 insn per cycle
41,857,947 branches # 280.718 M/sec
1,189,566 branch-misses # 2.84% of all branches
9.076940003 seconds time elapsed
This is using the same idiom of only capturing if not capturing already. These cases in AutoDuck, Resizing, Grabber and TQP might have been latent ASSERTs. This based on precedent rather than actual elicited buggy behaviour.
Specifically in the area of closing a window. Added mDismissed member which can stop double dismissal. Perhaps more relevant (?) still do an EndModal IF IsModal() is true. These changes are in response to feedback from Paul that simply removing EndModal (which seems good on Windows) causes problems (in TimerRecord!) on Mac.
... Use Command+f5 to start VoiceOver, then control+alt+ left and right arrows
to navigate.
Much better now, but still we need to do something about sliders, meters, and
numeric text controls.
Previously you could double click on a slider such as the volume slider to get the expanded/dialog view of it, and then assert when you drag the slider. This was caused by wx3 error checking printf arguments. Presumably wx2 did not.
In commit 9c687f0, TimeEditors etc were generalized to handle both times and frequencies.
This fixes the accessibility names of cells to handle frequencies.
... Windows didn't need them, Preferences already navigated correctly between
the panes, but the new changes caused navigation to get trapped in radio
button groups.