Compare commits

...

43 Commits

Author SHA1 Message Date
Johannes Lorenz
835e1e7e20 Add version check 2025-03-22 18:24:06 +01:00
Johannes Lorenz
07de9f0a89 Fixup 2025-03-22 17:08:45 +01:00
Johannes Lorenz
07c8209e65 Fixup 2025-03-22 17:02:31 +01:00
Johannes Lorenz
884474b6e3 Refactor steps into action 2025-03-22 16:56:27 +01:00
Johannes Lorenz
db95ce2062 CI: Run LMMS
This runs `lmms --help` in the github CI. Further
checks, like importing an LMMS project to WAV via CLI, are conceivable.
2025-03-22 16:48:12 +01:00
regulus79
db9ccbeb56 Add Strum Tool to Piano Roll (#7725)
Adds a complex strum tool to the Piano Roll, allowing the user to take a selection of chords, and drag around the notes to shape the strum exactly how they want it.

---------

Co-authored-by: szeli1 <143485814+szeli1@users.noreply.github.com>
Co-authored-by: Sotonye Atemie <satemiej@gmail.com>
2025-03-22 05:54:40 -04:00
Fawn
91233e6a73 Enable CMAKE_EXPORT_COMPILE_COMMANDS (#7804)
This setting instructs CMake to generate compile_commands.json for use
with clangd.
2025-03-21 23:32:49 -04:00
Fawn
6af3ab5875 Fix missing update to mixer channel name when created (#7795)
Fixes a regression from 07baf9e27a, in
which a channel that was created through a tracks "Assign track to new
mixer channel" context menu would display an incorrect name until it was
renamed by a user.
2025-03-21 06:07:15 -04:00
StakeoutPunch
23efcf456b Update Classic Theme (#7799)
Created and replaced missing/mismatched assets, fixed mixer send arrows causing mixer height to be wrong, tweaked CSS stylesheet to fix active mixer channel being black
2025-03-20 12:20:03 -04:00
Fawn
953f6b7351 Rework Crossover EQ plugin GUI (#7781)
* Switches to SVG assets
* Fixes layout issues
* Refactors redundant code

---------

Co-authored-by: Tres Finocchiaro <tres.finocchiaro@gmail.com>
2025-03-20 01:30:29 -04:00
regulus79
b9cb343d8b Revert "Change tooltip window flags (#7613)" (#7761)
This reverts commit b21a2696a9.
2025-03-19 21:29:44 -04:00
Fawn
f09d56cdd0 Upgrade Dual Filter plugin PNG assets to SVG (#7774) 2025-03-19 15:16:05 -04:00
Fawn
fc29682b90 Upgrade Bitcrusher plugin PNG assets with SVG (#7772) 2025-03-19 15:12:00 -04:00
cyberrumor
fd32158861 Fix crash when switching opened projects (#7797)
* Fix crash when switching opened projects #7793

When the DAW is already running with an open project and you attempt to
open another project via File > Open, a segfault used to occur.

The crash seems to have been caused by model()->value(), which was
called in Fader::getModelValueAsDbString(). The model() function
looked like it should return a pointer to an AutomatableModel.

I suspect that when a model was dropped in favor of loading models for
a new project, the AutomatableModel pointer became a null pointer.

Add a check to the AutomatableModel pointer so getModelValueAsDbString
returns early (before accessing member functions) if the pointer is
null. This fixes the crash.
2025-03-19 13:23:53 -04:00
Fawn
5960a4e792 Upgrade Peak Controller plugin PNG assets to SVG (#7776) 2025-03-18 23:28:22 -04:00
Fawn
0b709dc1af Upgrade Flanger plugin PNG assets to SVG (#7775) 2025-03-18 23:15:26 -04:00
Fawn
953c6843cd Upgrade ReverbSC plugin PNG assets to SVG (#7777) 2025-03-18 23:07:02 -04:00
Fawn
10c428b7a0 Upgrade Bass Booster plugin PNG assets with SVG (#7771) 2025-03-18 23:04:10 -04:00
szeli1
f72ae32fd3 Ensure hidden full-screen windows are restored in the correct position (#7752)
Fix bug introduced with #7595 where drag-moving the MDI canvas background would break the show/hide behavior of a fullscreen window.

Closes #7751
2025-03-17 15:35:28 -04:00
Fawn
919f9a1c0a Upgrade Amplifier plugin PNG assets with SVG (#7770)
Replaces the .png raster assets for the native Amplifier plugin with .svg vector assets.
2025-03-16 18:04:53 -06:00
Johannes Lorenz
d4fe398fff Update CALF to 0.90.4 (#7783) 2025-03-15 22:15:31 +01:00
Andrew Wiltshire
b0f9480d3c Fix SVG Scaling; Allow SVGs to be rendered at sizes other than their natural size. (#7769)
Allow embed.cpp to load SVG assets at screen DPI by leveraging QPixmap::setDevicePixelRatio

---------

Co-authored-by: Tres Finocchiaro <tres.finocchiaro@gmail.com>
Co-authored-by: Fawn <rubiefawn@gmail.com>
2025-03-14 15:05:45 -04:00
John Hunt
2cd4810755 Optimize PNG images using ImageOptim (#7384) 2025-03-13 16:08:41 -04:00
Fawn
91f750d2c2 Fix track operations widget vertical alignment (#7765)
In #7708, the track operations widget was given a centered vertical alignment in order to fix an aesthetic layout issue. This is being reverted, since it is possible to resize tracks, and all the other track interface elements are top-aligned.
2025-03-13 11:12:33 -06:00
Tres Finocchiaro
768b3b253b Fix stk/rawwaves for msys2 (#7736) 2025-03-12 22:30:26 -04:00
Fawn
7f2761df9b Fix incorrect graph step size behavior (#7703)
The y-axis quantization for graph values was being calculated
incorrectly. This would have gone unnoticed since the only step sizes
currently used are 0 (continuous) or 1. Any other values produce
"sloped" quantization. This fix prevents this error from affecting
any future uses of graphModel.
2025-03-11 16:53:29 -06:00
Fawn
6233c5b9e4 Update mute and solo buttons, add them to instrument windows (#7708)
* Add mute and solo buttons to instrument windows
* Change mute and solo buttons to optimized CC0 SVG assets
* Icons provided by @StakeoutPunch, button backgrounds provided by
@RebeccaDeField

---------

Co-authored-by: Sotonye Atemie <sakertooth@gmail.com>
Co-authored-by: Rebecca Noel Ati <contactme@rebeccadefield.com>
Co-authored-by: Stakeout Punch <StakeoutPunch@users.noreply.github.com>
2025-03-11 14:30:04 -04:00
Michael Gregorius
8821d88c09 InstrumentSoundShaping refactoring (#7229)
* Accessors for volume, cutoff, resonance

Add private accessors for the volume, cutoff and resonance parameters (envelope and LFO).

This makes the code less technical and more readable as it for example removes lots of static casts. The casts are now done in a special helper method that returns the parameters for a given target.

* Remove EnvelopeAndLfoParameters array

Remove the `EnvelopeAndLfoParameters` array and use explicit instances for volume, cutoff, resonance. This simplifies construction and initialization of the instances.

Besides the array this also removes the `Target` enum and the `NumTargets` value.

To simplify storage and retrieval of the parameters three private methods have been added which provide the node names of the volume, cutoff and resonance parameters.

Adjust `InstrumentSoundShapingView` to the removed `NumTargets` property.

* Use references instead of pointers

Use references to the volume, cutoff and resonance parameters instead of pointers.

* Remove friend relationship

Remove the friend relationship between `InstrumentSoundShaping` and its related view by providing the models via getters.

* Get rid of targetNames

Get rid of `InstrumentSoundShaping::targetNames` by using translations and strings directly. Move the remaining stuff into `InstrumentSoundShapingView` until it is removed there as well.

* Explicit EnvelopeAndLfoViews

Remove the array of EnvelopeAndLfoViews and use dedicated instances instead.

This also enables the final removal of the remaining `targetNames`.

* Move the code of some getters

Move the code of some getters into the header file.

* Several code review changes

Apply some code review proposals.

Co-authored-by: Sotonye Atemie <sakertooth@gmail.com>

---------

Co-authored-by: Sotonye Atemie <sakertooth@gmail.com>
2025-03-09 11:25:00 +01:00
Sotonye Atemie
f44aa3edc3 Refactor OGG export and always use VBR (#7697)
Refactors `AudioFileOgg`, a class used to export to OGG files. There were problems reported of the exported OGG file failing to be played back on some systems. To fix this issue as well as to improve code quality, the class was refactored. In addition, VBR (variable bit rate) is always used, with the quality of the export being determined by a ratio of the selected bit rate and the maximum bit rate allowed. This change naturally occurred when refactoring, though the libvorbisenc documentation recommend VBR for improved audio quality.
2025-03-07 10:23:30 -05:00
regulus79
c12fd571f5 Allow cutting multiple notes at once in Piano Roll (#7715)
Adds the ability to cut multiple notes at once in the Piano Roll. Users can select the Knife tool and create a cut line by holding the mouse and dragging it across the notes that should be cut. This also allows cutting the notes at an angle. When releasing the mouse, the Shift key can be pressed to remove the shorter end of the notes that were cut. If any notes are selected, only they will be considered for the cut, even if the cut line covers more notes.
2025-03-02 18:29:29 -05:00
szeli1
5fa01e7dbc Navigate workspace in the main window by dragging the mouse (#7595)
The scroll bars shown in the main window were removed in favor of a new navigation feature that utilizes dragging the mouse instead. Users can now hold the mouse down on an empty part of the workspace and drag the mouse around to navigate where necessary.
2025-03-02 18:03:37 -05:00
Oskar Wallgren
ef1d86fa41 ExportProjectDialog: Remove arbitrary loop count limit (#7724)
Increases the number of max loops when exporting above 99
2025-03-02 20:37:26 +01:00
Andrew Wiltshire
9159533814 FileBrowser: "Open containing folder" automatically selects file in the OS's file manager (#7700)
Introduces a new class FileRevealer to manage file selection across different platforms (Windows, macOS, Linux, and other *nix operating systems with xdg). Includes methods to open and select files or directories using the default file manager on the respective platform.

---------

Co-authored-by: Tres Finocchiaro <tres.finocchiaro@gmail.com>
Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
Co-authored-by: Sotonye Atemie <sakertooth@gmail.com>
Co-authored-by: Dalton Messmer <messmer.dalton@gmail.com>
2025-03-01 19:38:51 -05:00
Rossmaxx
050df381b0 Fix Clang warning due to implicit conversion from int to float for the RAND_MAX macro (#7717)
* fix compiler warning due to implicit conversion

* fix warnings from plugins too
2025-03-01 16:48:37 -05:00
Michael Gregorius
3c3441bb0c Faders with a dB scale (instead of linear/percentage) (#7636)
* Use dbFS scale for the faders

Make the faders use a linear dbFS scale. They now also change position on first click and can then be dragged.

The `Fader` class now has a new property called `m_faderMinDb`. It's the minimum value before the amplification drops down fully to 0. It is needed because we cannot represent a scale from -inf to maxDB.

Rename `knobPosY` to `calculateKnobPosYFromModel` and move the implementation into the cpp file. The method now first converts the model's current amplification value to dbFS and then computes a ratio based on that values and the minimum and maximum dbFS values.

Add the method `setVolumeByLocalPixelValue` which takes a local y coordinate of the widget and sets the amplification of the model based on a dbFS scale.

Adjust `mousePressEvent` and `mouseMoveEvent` so that they mostly take the local y coordinate of the event and use that to adjust the model via `setVolumeByLocalPixelValue`.

Remove `m_moveStartPoint` and `m_startValue` and they are not needed anymore.

* Apply curve to faders

Apply a curve, i.e. the cube function and its inverse, to the fader
positions to that we have more space to work with in the "interesting"
areas around 0 dB and less space in the area where we tend to "-inf dB".

Set the minimum dB value of the fader to -120 dB to increase the potential
headroom.

* Support for dB models

Add support for models that are in dB.

There's a new member `m_modelIsLinear` which can be set via the
constructor. The default value in the constructor is `true`.

Add the method `modelIsLinear` which can be used to query the parameter.
It is used in `calculateKnobPosYFromModel` and
`setVolumeByLocalPixelValue`. Both methods got extended to deal with
models in dB. They were also refactored to extract code that is common
for both cases.

Ensure that the constructor of `Fader` is called with `false` for
`CrossoverEQControlDialog` and `EqFader` because these use models that
are in dB.

* Show current dB value of fader in tool tip

Show the current value of the fader in its tool tip. Please note that
this value is always shown in dB because the goal should be to get rid
of the linear values for the faders.

Some of the code is extracted into the new method
`Fader::getModelValueAsDbString` which is shared by
`Fader::modelValueChanged` (also new) and `Fader::updateTextFloat`.

Please note that `getModelValueAsDbString` will use "dB" instead of
"dBFS" as the unit and that it will format "-inf dB" instead of "-∞ dB".
These changes will also be visible in the text float that is used to
show the new values as the fader is being dragged.

* Let users enter values in dB

Let users enter values in dB in the dialog that opens with a double
click.

The minimum value that can be entered is the minimum value that the
fader allows to set, i.e. -120 dB. The maximum value is the maximum
value of the model converted to dB. As of now this is ~6 dB. The
current value is converted to dB. If it corresponds to "-inf dB", i.e.
if the amplification is 0 then the minimum value is used.

* Remove option "Display volume as dBFS"

Remove the option "Display volume as dBFS" from the settings dialog and
the check box option "Volume as dBFS" from the "View" menu. Volumes are
now always treated as dB, i.e. all evaluations of the property
"displaydbfs" have been removed which results in assuming that this
option is always true.

The upgrade code in `ConfigManager::upgrade_1_1_91` was left as is.
However, a note was added which informs the reader that the value of
"displaydbfs" is not evaluated anymore.

* Extend Fader::wheelEvent

Extend `Fader::wheelEvent` for the case where the model is not a dB
model (`modelIsLinear() == true`), e.g. for the mixer faders. In that
case it works as follows. Each step increments or decrements by 1 dB if
no modifier is pressed. With "Shift" pressed the increment value is 3 dB.
With "STRG" ("CTRL") pressed the increment value is reduced to 0.1 dB. If
the value goes below the minimum positive dB value that is allowed by the
fader then the fader is set to "-inf dB", i.e. zero amplification. If the
fader is set to "-inf dB" and the users want to increase the value then
it is first set to the minimum positive value that is allowed by the
fader.

If the model is a dB model then the same behavior as before is used.
Although it should be considered to adjust this case as well. These
models are used by the faders of the Crossover Equalizer, Equalizer,
Compressor and Delay and they are not very usable with the mouse wheel.

* Adjust the wheel behavior for faders with dB models

Make the faders of the Crossover Equalizer, Equalizer, Compressor and
Delay behave like the mixer faders, i.e. step in sizes of 3 dB, 1dB and
0.1 dB depending on whether a modifier key is pressed or not.

Extract some common code to do so and add some `const` keywords.

* Less "jumpy" knobs

Implement a more stable knob behavior.

Remove the jumping behavior if the users directly click on a volume
knob. By storing the offset from the knob center and taking it into
account during the changes it now also feels like the users are
dragging the knob.

Changes to the amplification are now only applied when the mouse is
moved. This makes the double click behavior much more stable, i.e. if
users click on the knob when it is at 0 dB the dialog will also show
0 dB and not something like 0.3 dB because the first click is already
registered as a change of volume.

If the users click next to the knob the amplification will still be
changed immediately to that value.

## Technical details

To make the knobs more stable a variable called `m_knobCenterOffset` was
introduced. It stores the offset of the click from the knob center so
that this value can be taken into account for in the method
`setVolumeByLocalPixelValue`.

* Make MSVC happy

Add an indication that a float value is assigned to a float variable.

* Introduce constexpr for scaling exponent

Introduce the `constexpr c_dBScalingExponent` which describes the
scaling exponent that's used to scale the dB scale in both directions.
This will simplify potential adjustments by keeping the values
consistent everywhere.

* Draw fader ticks

Draw fader ticks in case the model is a linear one. This means that for
now they should only be painted for the mixer faders but not for the
faders of the Compressor, Delay, etc.

Extract the computation of the scaled ratio between the maximum model dB
value and the minimum supported fader dB value into the new private
method `computeScaledRatio`. This is necessary because it is needed to
paint the fader knob at the correct position (using the knob bottom as
the reference) and to paint the fader ticks at the correct position
(using the knob center).

Introduce the private method `paintFaderTicks` which paints the fader
ticks.

Note: to paint some non-evenly spaced fader ticks replace the `for`
expression in `paintFaderTicks` with something like the following:
```
for (auto & i : {6.f, 0.f, -6.f, -12.f, -24.f, -36.f, -48.f, -60.f, -72.f, -84.f, -96.f, -108.f, -120.f})
```

* Fader adjustments via keyboard

Allow the adjustment of the faders via the keyboard. Using the up or
plus key will increment the fader value whereas the down or minus key
will decrement it. The same key modifiers as for the wheel event apply:
* No modifier: adjust by 1 dB
* Shift: adjust by 3 dB
* Control: adjust by 0.1 dB

Due to the very similar behavior of the mouse wheel and key press
handling some common functionality was factored out:
* Determinination of the (absolute) adjustment delta value by
  insprecting the modifier keys of an event. Factored into
  `determineAdjustmentDelta`.
* Adjustment of the model by a given dB delta value. Factored into
  `adjustModelByDBDelta`.

* Move the fader of the selected channel

Move the fader of the selected channel instead of the fader that has
focus when the up/plus or down/minus keys are pressed. Doing so also
feels more natural because users can already change the selected
channel via the left and right keys and now they can immediately adjust
the volume of the currently selected channel while doing so.

Key events are now handled in `MixerView::keyPressEvent` instead of
`Fader::keyPressEvent` and the latter is removed. `MixerChannelView`
now has a method called `fader` which provides the associated fader.
This is needed so that the event handler of `MixerView` can act upon
the currently selected fader.

## Changes in Fader
The `Fader` class provides two new public methods.

The `adjust` method takes the modifier key(s) and the adjustment
direction and then decides internally how the modifier keys are mapped
to increment values. This is done to keep the mapping between modifier
keys and increment values consistent across different clients, e.g. the
key event of the `MixerView` and the wheel event of the `Fader` itself.
The direction is provided by the client because the means to determine
the direction can differ between clients and cases, e.g. a wheel event
determines the direction differently than a key event does.

The method `adjustByDecibelDelta` simply adjusts the fader by the given
delta amount. It currently is not really used in a public way but it
still makes sense to provide this functionality in case a parent class
or client wants to manipulate the faders by its very own logic.

Because the `Fader` class does not react itself to key press events
anymore the call to `setFocusPolicy` is removed again.

* Enter fader value when space key pressed

Let the users enter the fader value via dialog when the space key is
pressed.

Extract the dialog logic into the new method `adjustByDialog` and call
it from `MixerView::keyPressEvent`.

Make `Fader::mouseDoubleClickEvent` delegate to `adjustByDialog` and
also fix the behavior by accepting the event.

* More prominent fader ticks around 0 dB

Make the fader ticks around 0 dB more prominent but drawing them
slightly wider and with a more opaque color.

* Work around a Qt bug

Work around a Qt bug in conjunction with the scroll wheel and the Alt
key. Simply return 0 for the fader delta as soon as Alt is pressed.

* Fix wheel events without any modifier

Fix the handling of wheel events without any modifier key being pressed.

Commit ff435d551b accidentally tested against Alt using a logical OR
instead of an AND.

* Code review changes

First set of code review changes:
* Use Doxygen style documentation comments
* Remove comment about `displaydbfs` from upgrade routine
* White-space changes for touched lines.

* Make minimum dB value a constexpr

Make the minimum dB value a constexpr in the implementation file because
currently it's an implementation detail that should not be of any
interest to any other client.

So `m_faderMinDb` becomes `c_faderMinDb`.

* More flexible painting of fader ticks

Paint the fader ticks in a more systematic and flexible way. This also
removes some "magic numbers", e.g. by using `c_faderMinDb` instead of
`-120.f` as the lower limit.

The upper limit, i.e. the "starting point" is now also computed using
the maximum value of the model so that the fader will still paint
correctly if it ever changes.

* Make the zero indicator bolder

Make the zero indicator tick of the fader bolder.

* Make rendering of fader ticks a preference

Make rendering of fader ticks a preference which is off by default.

Introduce the new option "Show fader ticks" to the setup dialog and save
it to the UI attribute `showfaderticks`.

The configuration value is currently evaluated in `Fader::paintEvent`.
If this leads to performance problems it might be better to introduce a
boolean member to the `Fader` class which caches that value.

* Move constexprs to anonymous namespace
2025-03-01 20:08:04 +01:00
regulus79
3417dfe86d Fix Envelope and LFO Graph Size on Resizeable Instruments (#7738) 2025-02-28 22:13:00 -05:00
Johannes Lorenz
3aa1a5dafa Rename AudioPort -> AudioBusHandle (#7712)
No functional changes.
2025-02-28 23:44:58 +01:00
regulus79
cf4b492292 Fix logarithmic behavior when dragging knobs and sliders (#7647)
* Initial fix

* Remove stray m_leftOver reference

* Fix shift-dragging

* Revert to relative mouse control. I realize now that the maths don't actually change.

* Change qRound to std::round

* Fix scrolling behavior

* Fix mouse relative position buildup at values < minValue

* Use approximatelyEqual
2025-02-28 17:02:52 -05:00
superpaik
a4c91f8ba0 Recursively unmute channels when soloing in the mixer (#6746)
* unmute related FX channels

When soled one FX channel, unmute send and receive channels, to allow complex FX channel routing (BUS, SENDs, etc.)

* Comment change

* SEND channels

Activate also SEND channels recursively

* Remove unnecessary whitespace

* Encapsulate mixer channel index

Make the mixer channel index `m_channelIndex` private and add getters and
setters. Also add a method to determine if the channel is the master
channel.

Move `m_channelIndex` to the end of the initialization list of the
`MixerChannel` constructor because it is now the last member in the
header.

Adjust all clients to make use of the new methods.

* Replace const int& getIndex() with int index() const

* Format changes

---------

Co-authored-by: Michael Gregorius <michael.gregorius.git@arcor.de>
Co-authored-by: Sotonye Atemie <sakertooth@gmail.com>
2025-02-28 09:52:41 -05:00
Kevin Zander
9b04e29c4e Remove song import global automation (#5229)
Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
2025-02-22 14:24:29 +05:30
Tres Finocchiaro
055e0ba576 Fix additional warnings when Carla is missing (#7722)
Fix additional warnings when Carla is missing
Adds new env var LMMS_EXCLUDE_LADSPA

---------

Co-authored-by: Dalton Messmer <messmer.dalton@gmail.com>
2025-02-21 00:56:04 -05:00
Sotonye Atemie
ea02b3aba0 Do not set Qt::WA_OpaquePaintEvent (#7643)
Attempts to fix child widgets -- such as clips from the song editor -- drawing on top on other
2025-02-19 19:24:27 -05:00
Tres Finocchiaro
b440a029df Update FLTK in the AppImage (#7710)
Bump fltk 1.3.x->1.4.1
Closes #5386
2025-02-18 18:41:28 -05:00
722 changed files with 2899 additions and 1630 deletions

View File

@@ -0,0 +1,47 @@
name: Extract Artifact
description: Waits for build, downloads and extracts the artifact
inputs:
check-name:
description: "Check name to wait for"
required: true
artifact-name:
description: "Name of the artifact to download"
required: true
github-token:
description: "GitHub token for authentication"
required: true
runs:
using: "composite"
steps:
- name: Wait for build
uses: lewagon/wait-on-check-action@v1.3.4
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
check-name: ${{ inputs.check-name }}
repo-token: ${{ inputs.github-token }}
wait-interval: 30
- name: Download workflow artifact
uses: dawidd6/action-download-artifact@v6
with:
workflow: build.yml
name: ${{ inputs.artifact-name }}
- name: Extract artifact (Linux)
if: runner.os == 'Linux'
shell: bash
run: |
chmod +x lmms-*.AppImage
./lmms-*.AppImage --appimage-extract
- name: Mount DMG (macOS)
if: runner.os == 'macOS'
shell: bash
run: |
hdiutil attach lmms-*.dmg -mountpoint ~/tmpvolume
cp -R ~/tmpvolume/LMMS.app /tmp/
# Windows: Not working because (1) #7732 and (2) the unzip failed
#- name: Unpack installer (Windows)
# if: runner.os == 'Windows'
# run: Start-Process @(gci build/lmms-*.exe)[0] -ArgumentList /S -Wait

View File

@@ -25,6 +25,13 @@ jobs:
with:
fetch-depth: 0
submodules: recursive
- name: Clone fltk
uses: actions/checkout@v4
with:
repository: fltk/fltk
path: fltk
ref: 27d991f046bdebb12bfd58f7c05a19f135979c29
fetch-depth: 1
- name: Configure winehq
run: |
sudo dpkg --add-architecture i386
@@ -37,8 +44,10 @@ jobs:
run: |
sudo apt-get update -y
sudo apt-get install -y --no-install-recommends \
$(xargs < .github/workflows/deps-ubuntu-24.04-gcc.txt)
$(xargs < .github/workflows/deps-ubuntu-24.04-gcc.txt)
sudo apt-get install -y --install-recommends g++-multilib gcc-multilib winehq-stable wine-stable-dev
sudo apt-get install -y --install-recommends \
$(xargs < .github/workflows/deps-ubuntu-24.04-fltk.txt)
- name: Cache ccache data
uses: actions/cache@v3
with:
@@ -47,6 +56,14 @@ jobs:
ccache-${{ github.job }}-${{ github.ref }}-
ccache-${{ github.job }}-
path: ~/.ccache
- name: Configure fltk
run: |
cmake -S fltk -B fltk/build -DFLTK_BUILD_SHARED_LIBS=ON -DFLTK_BACKEND_WAYLAND=ON \
-DFLTK_USE_LIBDECOR_GTK=OFF -DFLTK_BUILD_TEST=OFF -DFLTK_BUILD_GL=OFF
- name: Install fltk
run: |
cmake --build fltk/build
sudo cmake --install fltk/build --prefix /usr
- name: Configure
run: |
ccache --zero-stats
@@ -98,11 +115,20 @@ jobs:
with:
fetch-depth: 0
submodules: recursive
- name: Clone fltk
uses: actions/checkout@v4
with:
repository: fltk/fltk
path: fltk
ref: 27d991f046bdebb12bfd58f7c05a19f135979c29
fetch-depth: 1
- name: Install system packages
run: |
sudo apt-get update -y
sudo apt-get install -y --no-install-recommends \
$(xargs < .github/workflows/deps-ubuntu-24.04-gcc.txt)
sudo apt-get install -y --install-recommends \
$(xargs < .github/workflows/deps-ubuntu-24.04-fltk.txt)
- name: Cache ccache data
uses: actions/cache@v3
with:
@@ -111,6 +137,14 @@ jobs:
ccache-${{ github.job }}-${{ github.ref }}-
ccache-${{ github.job }}-
path: ~/.ccache
- name: Configure fltk
run: |
cmake -S fltk -B fltk/build -DFLTK_BUILD_SHARED_LIBS=ON -DFLTK_BACKEND_WAYLAND=ON \
-DFLTK_USE_LIBDECOR_GTK=OFF -DFLTK_BUILD_TEST=OFF -DFLTK_BUILD_GL=OFF
- name: Install fltk
run: |
cmake --build fltk/build
sudo cmake --install fltk/build --prefix /usr
- name: Configure
run: |
ccache --zero-stats

View File

@@ -0,0 +1,3 @@
libcairo2-dev
libpango1.0-dev
wayland-protocols

View File

@@ -11,7 +11,6 @@ g++
libasound2-dev
libc6-dev
libfftw3-dev
libfltk1.3-dev
libfluidsynth-dev
libgig-dev
libgtk2.0-0

63
.github/workflows/run-help.yml vendored Normal file
View File

@@ -0,0 +1,63 @@
---
name: run-help
'on': [push, pull_request]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
help-linux:
strategy:
fail-fast: false
matrix:
config:
- arch: 'x86_64'
runner: 'ubuntu-latest'
suffix: ''
- arch: 'arm64'
runner: 'ubuntu-24.04-arm'
suffix: '-arm64'
name: help-linux-${{ matrix.config.arch }}
runs-on: ${{ matrix.config.runner }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Extract artifact
uses: ./.github/actions/extract-artifact
with:
check-name: linux-${{ matrix.config.arch }}
artifact-name: linux${{ matrix.config.suffix }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Display help
run: |
cd squashfs-root/
./AppRun --help | grep "Usage: lmms"
help-macos:
strategy:
fail-fast: false
matrix:
config:
- arch: 'x86_64'
runner: 'macos-latest'
- arch: 'arm64'
runner: 'macos-latest'
name: help-macos-${{ matrix.config.arch }}
runs-on: ${{ matrix.config.runner }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Extract artifact
uses: ./.github/actions/extract-artifact
with:
check-name: macos-${{ matrix.config.arch }}
artifact-name: macos-${{ matrix.config.arch }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Display help
run: |
/tmp/LMMS.app/Contents/MacOS/lmms --help | grep "Usage: lmms"
# Windows (does not work due to actions/extract-artifact issues)
# - name: Display help
# run: >
# $result = & "${env:ProgramFiles${{ matrix.config.programfiles-suffix }}}/LMMS/lmms.exe" "--help" |
# Select-String "Usage: lmms";
# if($result.Matches.Count -eq 0) { exit 1 }

63
.github/workflows/run-version.yml vendored Normal file
View File

@@ -0,0 +1,63 @@
---
name: run-version
'on': [push, pull_request]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
version-linux:
strategy:
fail-fast: false
matrix:
config:
- arch: 'x86_64'
runner: 'ubuntu-latest'
suffix: ''
- arch: 'arm64'
runner: 'ubuntu-24.04-arm'
suffix: '-arm64'
name: version-linux-${{ matrix.config.arch }}
runs-on: ${{ matrix.config.runner }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Extract artifact
uses: ./.github/actions/extract-artifact
with:
check-name: linux-${{ matrix.config.arch }}
artifact-name: linux${{ matrix.config.suffix }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Display version
run: |
cd squashfs-root/
./AppRun --version | grep "Copyright (c) .* LMMS Developers"
version-macos:
strategy:
fail-fast: false
matrix:
config:
- arch: 'x86_64'
runner: 'macos-latest'
- arch: 'arm64'
runner: 'macos-latest'
name: version-macos-${{ matrix.config.arch }}
runs-on: ${{ matrix.config.runner }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Extract artifact
uses: ./.github/actions/extract-artifact
with:
check-name: macos-${{ matrix.config.arch }}
artifact-name: macos-${{ matrix.config.arch }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Display version
run: |
/tmp/LMMS.app/Contents/MacOS/lmms --version | grep "Usage: lmms"
# Windows (does not work due to actions/extract-artifact issues)
# - name: Display version
# run: >
# $result = & "${env:ProgramFiles${{ matrix.config.programfiles-suffix }}}/LMMS/lmms.exe" "--version" |
# Select-String -Pattern "Copyright \(c\) .* LMMS Developers";
# if($result.Matches.Count -eq 0) { exit 1 }

View File

@@ -1,4 +1,5 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.13)
SET(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Set the given policy to NEW. If it does not exist, it will not be set. If it
# is already set to NEW (most likely due to predating the minimum required CMake

View File

@@ -25,6 +25,7 @@ if command -v carla > /dev/null 2>&1; then
else
echo "[$ME] Carla does not appear to be installed, we'll remove it from the plugin listing." >&2
export "LMMS_EXCLUDE_PLUGINS=libcarla,${LMMS_EXCLUDE_PLUGINS}"
export "LMMS_EXCLUDE_LADSPA=libcarla,${LMMS_EXCLUDE_LADSPA}"
fi
# Additional workarounds for library conflicts

View File

@@ -14,7 +14,7 @@ if(STK_INCLUDE_DIRS)
list(GET STK_INCLUDE_DIRS 0 STK_INCLUDE_DIR)
find_path(STK_RAWWAVE_ROOT
NAMES silence.raw sinewave.raw
HINTS "${STK_INCLUDE_DIR}/.."
HINTS "${STK_INCLUDE_DIR}/.." "${STK_INCLUDE_DIR}/../.."
PATH_SUFFIXES share/stk/rawwaves share/libstk/rawwaves
)
endif()
@@ -22,6 +22,6 @@ endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(STK
REQUIRED_VARS STK_LIBRARY STK_INCLUDE_DIR
REQUIRED_VARS STK_LIBRARY STK_INCLUDE_DIR STK_RAWWAVE_ROOT
# STK doesn't appear to expose its version, so we can't pass it here
)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -96,24 +96,6 @@
</bbtrack>
</track>
</trackcontainer>
<track type="6" muted="0" name="Automation track" solo="0">
<automationtrack/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
</track>
<mixer visible="1" width="561" height="332" x="10" y="314" maximized="0" minimized="0">
<mixerchannel num="0" muted="0" volume="1" name="Master" soloed="0">
<fxchain numofeffects="0" enabled="0"/>

View File

@@ -214,24 +214,6 @@
</bbtrack>
</track>
</trackcontainer>
<track type="6" muted="0" name="Automation track" solo="0">
<automationtrack/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
</track>
<mixer visible="1" width="561" height="332" x="10" y="314" maximized="0" minimized="0">
<mixerchannel num="0" muted="0" volume="1" name="Master" soloed="0">
<fxchain numofeffects="0" enabled="0"/>

View File

@@ -113,24 +113,6 @@
</bbtrack>
</track>
</trackcontainer>
<track type="6" muted="0" name="Automation track" solo="0">
<automationtrack/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
</track>
<mixer visible="1" width="561" height="332" x="10" y="314" maximized="0" minimized="0">
<mixerchannel num="0" muted="0" volume="1" name="Master" soloed="0">
<fxchain numofeffects="0" enabled="0"/>

View File

@@ -4,19 +4,6 @@
<head timesig_denominator="4" bpm="140" masterpitch="0" mastervol="100" timesig_numerator="4"/>
<song>
<trackcontainer visible="1" width="600" height="300" type="song" x="6" y="5" maximized="0" minimized="0"/>
<track type="6" muted="0" name="Automation track" solo="0">
<automationtrack/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
</track>
<mixer visible="1" width="561" height="332" x="5" y="310" maximized="0" minimized="0">
<mixerchannel num="0" muted="0" volume="1" name="Master" soloed="0">
<fxchain numofeffects="0" enabled="0"/>

View File

@@ -282,24 +282,6 @@
</bbtrack>
</track>
</trackcontainer>
<track type="6" muted="0" name="Automation track" solo="0">
<automationtrack/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
</track>
<mixer visible="1" width="561" height="332" x="10" y="314" maximized="0" minimized="0">
<mixerchannel num="0" muted="0" volume="1" name="Master" soloed="0">
<fxchain numofeffects="0" enabled="0"/>

View File

@@ -52,24 +52,6 @@
<automationtrack/>
</track>
</trackcontainer>
<track muted="0" type="6" name="Automation track" solo="0">
<automationtrack/>
<automationpattern tens="1" mute="0" prog="0" name="Numerator" pos="0" len="192">
<object id="4975896"/>
</automationpattern>
<automationpattern tens="1" mute="0" prog="0" name="Denominator" pos="0" len="192">
<object id="6613237"/>
</automationpattern>
<automationpattern tens="1" mute="0" prog="0" name="Tempo" pos="0" len="192">
<object id="6054005"/>
</automationpattern>
<automationpattern tens="1" mute="0" prog="0" name="Master volume" pos="0" len="192">
<object id="1345820"/>
</automationpattern>
<automationpattern tens="1" mute="0" prog="0" name="Master pitch" pos="0" len="192">
<object id="5865711"/>
</automationpattern>
</track>
<mixer width="543" x="5" y="310" maximized="0" height="335" visible="1" minimized="0">
<mixerchannel num="0" muted="0" volume="1" name="Master" soloed="0">
<fxchain numofeffects="0" enabled="0"/>

View File

@@ -50,23 +50,6 @@
<bbtco usestyle="1" muted="0" name="Beat/Baseline 0" pos="0" len="1536" color="4282417407"/>
</track>
</trackcontainer>
<track type="6" muted="0" name="Automation track" solo="0">
<automationtrack/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192">
<time pos="0" value="140"/>
</automationpattern>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192">
<time pos="0" value="100"/>
</automationpattern>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192">
<time pos="0" value="0"/>
</automationpattern>
<automationpattern prog="0" mute="0" name="Numerator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Denominator" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Tempo" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master volume" pos="0" tens="1" len="192"/>
<automationpattern prog="0" mute="0" name="Master pitch" pos="0" tens="1" len="192"/>
</track>
<mixer visible="1" width="647" height="332" x="9" y="441" maximized="0" minimized="0">
<mixerchannel num="0" muted="0" volume="1" name="Master" soloed="0">
<fxchain numofeffects="0" enabled="0"/>

View File

@@ -1,4 +1,3 @@
INCLUDE(InstallHelpers)
INSTALL_DATA_SUBDIRS("themes" "*.png;*.css")
INSTALL_DATA_SUBDIRS("themes" "*.png;*.svg;*.css")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 959 B

After

Width:  |  Height:  |  Size: 859 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 816 B

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 818 B

After

Width:  |  Height:  |  Size: 728 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 810 B

After

Width:  |  Height:  |  Size: 620 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 839 B

After

Width:  |  Height:  |  Size: 697 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 B

After

Width:  |  Height:  |  Size: 218 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 787 B

After

Width:  |  Height:  |  Size: 630 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 575 B

After

Width:  |  Height:  |  Size: 458 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 B

After

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 487 B

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 B

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 B

After

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 615 B

After

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 466 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 405 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 519 B

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 517 B

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 545 B

After

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 296 B

After

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 B

After

Width:  |  Height:  |  Size: 128 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 689 B

After

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 339 B

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 348 B

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 900 B

After

Width:  |  Height:  |  Size: 802 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1000 B

After

Width:  |  Height:  |  Size: 698 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 614 B

After

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 B

After

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 B

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 B

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 369 B

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 840 B

After

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 947 B

After

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 414 B

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 B

After

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 B

After

Width:  |  Height:  |  Size: 103 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 566 B

After

Width:  |  Height:  |  Size: 352 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 619 B

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 614 B

After

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 549 B

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 832 B

After

Width:  |  Height:  |  Size: 622 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1002 B

After

Width:  |  Height:  |  Size: 731 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 B

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 611 B

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 917 B

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 865 B

After

Width:  |  Height:  |  Size: 719 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 B

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 B

After

Width:  |  Height:  |  Size: 188 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 565 B

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 B

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 815 B

After

Width:  |  Height:  |  Size: 711 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 780 B

After

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 330 B

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 B

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 313 B

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 B

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 B

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 B

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 600 B

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 719 B

After

Width:  |  Height:  |  Size: 588 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 625 B

After

Width:  |  Height:  |  Size: 518 B

Some files were not shown because too many files have changed in this diff Show More