* Bump submodule and generate std headers
* Commit submodule update
* Downgrade to earlier commit
Can be upgraded once a proper C++20 MinGW compiler
is available for the docker images.
* Downgrade to the correct commit
* Append mingw_stdthreads to EXTRA_LIBRARIES
Currently for this CMake version, it seems that there is no support to
link other targets to object libraries. I'll add it to EXTRA_LIBRARIES
instead.
* Add LMMS_ prefix to USE_MINGW_STD_THREADS
* Use built-in MINGW CMake variable
* Use lowercase rather than uppercase
Issue was caused by an obiwan (off-by-one)
The 'if (y > limit)' test was broken by an incorrect inequality,
should be >=, and a graphical adjustment made previously in the
'y = ...' statement. I perserved the graphical adjustment and
fixed the test to be 'if (y >= limit - 1) { break; }'
* Fixes bug from issue 6002
Since the refactoring of the Copy/Paste features, it was not
possible to paste inside the BBEditor (now Pattern Editor), as reported
on issue #6002. The reason for that is better explained in the issue
discussion.
This PR fixes this by allowing pasting inside the Pattern Editor
when the clipboard has a single Clip, which is what was allowed on the
previous workflow, while at the same time avoiding the unexpected
behavior of pasting multiple Clips that might invade the positions
reserved for different Pattern Tracks.
Add the comment "// namespace lmms" to the closing scope of the lmms
namespaces. The "scripted-checks" are quite strict. Perhaps they should
be renamed to "strict-checks". ;)
Include "cassert" in UpgradeExtendedNoteRange.cpp to hopefully fix the
mingw builds.
Extract the code that upgrades the extended note range into its own
class. This hides the helper functions that are related to the upgrade
from the other upgrade methods in DataFile.cpp.
The header file is put into the src/core directory as it is not part of
the public interface and therefore should not be included in the
"global" include directory. The whole thing is just an implementation
detail of the upgrade in DataFile.cpp.
Previously, the Lv2 controls were checked for control types in this
order:
integer?
enum?
toggle?
generic?
This is bad because it goes from generic (integer) to specific (toggle),
and then defaults to most generic. The order should be specific (toggle)
to generic (integer, generic), which is fixed by this PR.
This solves that controls which are marked "toggle" and "integer" were
being displayed as a spinbox (#6798).
Additional improvement: Only show search bar for more than 5 controls,
previously more than 2 (#6798).
Vertically zooming the piano roll caused highlighted semitones to drift from the actual note positions. This 2-line fix ensures the marked semitones are aligned with the grid lines and notes at all allowed vertical zoom levels.
Fix the base notes and automations of B+B tracks.
This fixes for example the problem that when a TripleOscillator had been
put into a B+B track, e.g. with version 1.2 that it sounded too high
when being loaded with a current master version. The cause seems to be
that the notes of the instrument pattern are corrected/transposed too
often (likely due to the collection of all tracks starting from the
song/document root).
The multiple correction of notes is fixed by traversing the song
structure in a more consise way. First all track containers of the song
are collected and for each of them the tracks are collected. These
tracks are then fixed one by one. B+B tracks are getting a special
handling while doing so. It is assumed that a B+B track cannot have
other B+B tracks inside and therefore all sub tracks of the B+B track
are searched for so that they can be fixed recursively.
Refactor some more functionality into static helper methods:
* Everything beneath a track is now fixed by the helper method
`fixTrack`.
* The fix of the base notes of the instruments themselves and the
extraction of the ids of automated base notes has been moved into
`fixInstrumentBaseNoteAndCollectIds`.
* The lambda `affected` has been converted into a static method because
it is must be accessible by one of the static helper methods.
* The code for fixing the automation tracks of a song has been moved
into the helper function `fixAutomationTracks`.
Fix the problem with the nested for loops that all had variables called
"i" by extracting a helper method with a corrected nesting. Due the
extraction we do not have to care anymore if the correction is running
beneath another for loop with potentially the same variable names.
Move the fix for the automated base notes to the code that fixes the
non-automated base notes.
Improve the fix for automation tracks and patterns by potentially
splitting them into two tracks:
* The original track which is adjusted to only contain patterns with
targets that are not base notes.
* A cloned track that only contains patterns with base note targets.
This is done by iterating over all automation tracks and checking which
types of automations they contain:
* Base note automations
* Automations of other targets
The result for each automation track are then evaluated as follows.
* If an automation track does not contain any base note automations it
is kept as it is, i.e. nothing is done.
* If an automation track only contains patterns with base note
automations its patterns are corrected in place.
* If an automation track contains patterns with base note automations
and other targets then the track is duplicated so that we can split it
as described above. This split and correction is done on a per pattern
level. Patterns that would become empty are removed.
Cloned tracks will keep the same names and attributes as their original
tracks.
TODOs
------
* Base notes are read as integers, corrected by an integer value of 12
and then stored back as an integer. In some files base notes have float
values, i.e. if the file was stored after the base notes have been
automated linearly.
* B&B tracks are not corrected although they can contain instruments
with (automated) base notes!
* Nested for-loops with "i" as their running variables. (Fix in a
separate commit)
Fix all base notes that are used in automations and their corresponding
automation values. Base notes that are automated are stored as elements
in the save file whereas non-automated base notes are stored as
attributes. So far the method `upgrade_extendedNoteRange` only upgraded
the non-automated base notes that are stored in attributes. This commit
fixes the automated ones which are stored in elements.
The fix works as follows:
* Collect all base note elements.
* Store their ids in a set so that we can later identify automations
that reference them.
* Collect all automation pattern and check if they reference a base
note.
* Adjust the values and out values of all automations that reference
base notes.
Note: for many older files the out values will be introduced by the
upgrade `method upgrade_automationNodes` and do not appear in the files
themselves!
Simplify the logic of the method Model::fullDisplayName.
Please note that this shows that with the current logic if the parent
model has a non-empty name like "parentmodel" and the name of the child
model is empty the result is the name "parentmodel >" which might not be
what's wanted.
Move the implementation of the Model methods into Model.cpp so that
recompiles after changes are much quicker. Make Model::
isDefaultConstructed const.
* Add confirm removal on mixer channels
Add confirm removal popup when the user calls the action "remove channel" on a mixer channel that is in use (receives audio from other channel or track). Set a config variable to keep track if the user don't want to be asked again. Adding a scroll on settings-general tab because there weren't enough space on the area.
* Core Mixer function channel in use
New core Mixer function to check if a given channel is in use (receives audio)
---------
Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
Co-authored-by: saker <sakertooth@Gmail.com>
* Add <QHash> to PluginFactory.h
* Handle one more deprecated QTextStream::endl
* Replace QLayout::setMargin with setContentsMargins
* Replace Qt::MidButton with Qt::MiddleButton
* Replace QPalette::Background with QPalette::Window
* Fix deprecation warnings in LcdFloatSpinBox
Introduce the new class SimpleTextFloat which simply shows a text and
that works like a pseudo tool tip with a narrow margin. It was extracted
from TextFloat to adhere to the single responsibility principle.
The new class is used by:
* Fader: display the current volume when moving the fader
* Knob: display the current value when the knob is moved
* PianoRoll: display the current value when setting the note volume and
panning
Add stylings for the new widget in style.css.