lmms icon indicating copy to clipboard operation
lmms copied to clipboard

Replace theme assets with SVGs

Open tresf opened this issue 9 months ago • 2 comments

Tracking the ability to use SVGs for theme assets.

Some related efforts:

  • #7667
  • #7708
  • Source artwork for default theme: https://github.com/LMMS/artwork/tree/master/Default%20Theme

Some unresolved issues:

  • [x] embed::getIconPixmap() quality is "stuck" at an SVGs "natural" resolution.
    • Fixed via #7769

High level tasks: (break these into finer tasks as needed)

  • [ ] Switch common assets from .png to .svg
  • [ ] Decide how to handle text (e.g. "ENVELOPE", "LFO")
  • [ ] Switch native effects plugins from .png to .svg
  • [ ] Decide how to handle instrument plugins

Initial team (gathered from Discord)

  • @StakeoutPunch
  • @rubiefawn
  • @Monospace-V
  • @SpomJ
  • @qnebra (this is not exhaustive, anyone feel free to chime in if you can help!)

tresf avatar Mar 13 '25 01:03 tresf

So one of the issues discovered in https://github.com/LMMS/lmms/pull/7769 was that most parts of the code use QPixmap.size() (.width(), .height()) to determine how big a UI component is, however with SVGs, the devicePixelRatio causes these values to be multiplied 2x, 3x, 4x, etc.

Qt6 introduced a new QPixmap::deviceIndependentSize(), quoting:

Returns the size of the pixmap in device independent pixels.

This value should be used when using the pixmap size in user interface size calculations.

The return value is equivalent to pixmap.size() / pixmap.devicePixelRatio()

This function was introduced in Qt 6.2.

The effect this has on the codebase is evident in #7781 here:

https://github.com/LMMS/lmms/blob/5f5834a7dfab4d433f801acc2a5f45f2d20203c3/src/gui/widgets/Fader.cpp#L83

My recommendation is to provide a QPixmap wrapper class that provide a backport for deviceIndependentSize for Qt versions older than 6.2.

tresf avatar Mar 15 '25 06:03 tresf

Plugins

If you want to work on any of these, please read the description for #3534 and use it as a reference in your design decisions.

  • [x] Amplifier #7770
  • [ ] AudioFileProcessor
  • [x] Bass Booster #7771
  • [ ] BitInvader #8122
  • [x] Bitcrush #7772
  • [ ] Compressor
  • [x] Crossover EQ #7781
  • [ ] Delay
  • [x] Dispersion #7773
  • [x] Dual Filter #7774
  • [ ] Dynamics Processor
  • [ ] EQ
  • [x] Flanger #7775
  • [ ] FreeBoy
  • [ ] Gig Player
  • [ ] Granular Pitch Shifter
  • [ ] Kicker
  • [ ] LOMM
  • [ ] Lb302
  • [ ] Monstro
  • [ ] Multitap Echo
  • [ ] Nes
  • [ ] OpulenZ
  • [ ] Organic
  • [ ] Patman
  • [x] Peak Controller #7776
  • [x] ReverbSC #7777
  • [ ] SoundFont Player (@rubiefawn will do this after #8072)
  • [ ] Sfxr
  • [ ] Sid
  • [ ] SlicerT
  • [ ] Spectrum Analyzer
  • [ ] Stereo Enhancer
  • [x] Stereo Matrix #7803
  • [ ] Mallets
  • [ ] Tap Tempo
  • [ ] Triple Oscillator (@rubiefawn will do this after #4369)
  • [ ] Vectorscope
  • [x] VeSTige #7791
  • [ ] Vibed
  • [ ] Watsyn
  • [ ] Waveshaper
  • [ ] ZynAddSubFX

rubiefawn avatar Mar 19 '25 18:03 rubiefawn