Theming in Qtractor

Forums

/ Edited: 17/01/2024 /
Topic for everything related to Qtractor theming.
Themes availables: https://sourceforge.net/projects/visualthemes-qtractor/
(Attach two starting approaches for two visual themes and a proposal for functionalities.)

Permalink

Thanks to all the great stuff produced by this thread, I've been fumbling around in an effort to create a "Grayscale" theme. Here's a preview followed by a question or two as well as another request to EOL of the midi & audio icons.

Full screen sequencer

Full screen mixer

Is the Mixer window not using the same Base color (or Window...... whatever it might be... I can't remember) as the Sequencer? It seems a tad lighter with maybe a hint of redness to it. I was wondering if it may have been the monitor but the image shows the difference.

I'm trying to move away from the whole green/yellow thing and you'll notice I set MIDI tracks to some kind of pink and some audio to some kind of blue. These wouldn't be the final colors but I wanted to see the beginnings of anything different. As I suspected, those hard-coded MIDI and Audio icons are just getting in the way. Can we get a toggle or something to hide them? Honestly, I don't even see the value in the information as it seems entirely redundant with the color strips. Even the icons present in the Audio menu of a Track Mixer Strip provide no real value at all when you think about it.

While I'm asking to hide things, how about the up and down arrows in the various input fields (time, tempo, pan, gain, etc)? I can't imagine ever clicking on these things as it's much easier to simply use the scroll wheel on a mouse, move a fader, or simply type in an exact value when known. I only ask to hide them because I believe they might be icons? If so, one wouldn't just be able to set a compatible color in a style sheet and call it a day.

Anyway, thanks for all the cool stuff in this thread. Very exciting!

OK... one more.... maybe an option to hide the "beat" icon in the Snap pulldown menu? Or actually.... just kill it? Again, it's not providing any value.

Not gonna lie, I kinda wish we had a "no icon" version. Not entirely sure how that would work but figured I'd share the random thought :)

First of all, I'm glad that someone else is encouraged to create themes.
_1
The color difference you indicate between the mixer window and the general one is due to the qss.

I assign a gradient to the main sequencer window.
In the current version 1.5 it is also applied to the midi editor window.

qtractorMainForm, /* Sequencer */
qtractorMidiEditorForm /* Midi Editor */ {
     background: qlineargradient(x1:0, y1:0, x2:1, y2:1,
     stop:0 #34363B,
     stop:1 #5C5650
   );
}

I consider that the mixer window for my topic does not require that gradient, because it is not a work area, but a tool.

You can delete the code.
Or add the mixer:

qtractorMainForm,
qtractorMidiEditorForm,
qtractorMixer /* Window Mixer */ {
     background: qlineargradient(x1:0, y1:0, x2:1, y2:1,
     stop:0 #34363B,
     stop:1 #5C5650
   );
}

This overwrites the "Window" color of the Color Theme.
That has advantages and disadvantages, it depends on what you want to achieve.

_2
"about the up and down arrows in the various input fields"
Fortunately it is possible to eliminate them from QSS. It took me a while to find a way, but I finally found it.
In version 1.5 of Tecnico I have eliminated them from the "information screens" of the potentiometers.

qtractorMixerStrip QAbstractSpinBox::up-button {
   width: 0;
   height: 0;
}
qtractorMixerStrip QAbstractSpinBox::down-button {
   width: 0;
   height: 0;
}

_3
Icons.
We must understand that QSS has limitations. For Qt it is not the main way to visually shape the interface (as happens in html with CSS), but rather a complementary tool.
Furthermore, if we compare it with CSS, it has many fewer options.

For example, modifying toolbar and menu icons is practically impossible.

Even so, there are solutions for what you propose.
We can't remove them with QSS, but we can create an icon theme where those icons you don't want are a transparent .png.

Of course, the icon space would still remain on the Mixer buses. It is not possible to resolve that.

As for the specific Midi and Audio icons, the inconsistency that arises when customizing the color for Midi and Audio (the icons still remain yellow and green) is easily solved. Create new icons without color coding, just white, black and gray.
Thus, these will only offer information coded in symbol, and the bars and volumeters will only offer information coded in color.
I do not consider it to be redundant but complementary.

It is true that having to compile to have our Qtractor to our liking is laborious, but it can be done.

Qtractor (and Qt aplications in general) is not designed to be able to use icon packs, and I think it is not an easy functionality to implement.

@G3N-es

I'm looking at 1.5 now in order to work these diffs out and go from there. I wanted to mention it would be better to zip up a directory named - rather than just . It allows the recipient to simply extract the directory in a non-clobbering manner side by side with the old version so they don't have to risk breaking something that was in a known state. Switching between the versions then gets handled with a symlink which all scripts, configs, etc are pointing to.

In reply to by windowsrefund

Permalink

The idea is to update in a simple way, I overwrite and that's it.
To see differences between codes, sf.net provides us with a better tool.
By the way, don't trust the version numbers, but rather the commit date. If there has been an error or a small change, it is not worth it for me to change the versions of the files.

This is the tool:
https://sourceforge.net/p/visualthemes-qtractor/code/ci/549efa12b133a3b…

Permalink

Thanks again! I'm going to play with these tweaks tonight and have really been enjoying this thread.

As for the icons, I wonder if we could swap them out for glyphs from the likes of nerdfonts? That might be a whacky suggestion though.

Permalink

Q. Is it time to start talking about the vertical bars like play-head, edit-head, and edit-tail?

A. sorry to tell, probably not: these are all hard-coded colors and not able to be addressed by style-sheets whatsoever and that, I'm afraid, won't change anytime soon, sorry again.

and again, may I ask, what's really the problem with that thinly red/blue lines anyhow? is it just a nitpick or is it something else in disguise that I can't grasp? ;)
cheers

Permalink

Regarding the mixer strip names, can we chop off anything after a newline? These 2 images show the current situation and when we think about it, the mixer strip is never going to really show (cleanly) any more than 3 or 4 characters anyway (depending on font size, etc). The hover feature can be used as needed to read the full text.

strip names
track names

Thanks in advance

File attachments

I've only seen it in screenshots.
I have to compile Qtractor again and I'll take the opportunity to test it.

If you give me permission I will include it on the VTQ page.
I'll just adapt the README.md a bit ans add de pre extensión _Colors and _Style.

I'm still devising the format, and I need it to be like this for concept reasons.

For example, before my README.md included a "Content" section. I'm going to change it to "Related". This would allow creating themes with mixed resources: Combine Colors from one theme with Images from another with Styles from another, to create a new theme.

In that case the theme would only contain one file, README.md, which is responsible for defining the theme, for create a relationship. Each relation is an individual with its own meaning, who when related creates another individual with its own meaning, the relationship.

I know that this generates dependencies, and I would have to investigate how to resolve them.
Including the url of the dependencies as you have done in your theme with the icons can be a solution.
(For me, reinventing the wheel makes sense)

I wanted to share with you something I discovered recently.
We can access the colors.conf directly from the qss.

Example:
#menuBar { background: palette(window); }

Search "PaletteRole" in
https://doc.qt.io/qt-6/stylesheet-reference.html
to see the colors you have access to.

This simplifies the construction of themes, and opens doors to making child themes easily.
For example, you can create a "light" child version of an originally "dark" theme without touching the qss.

Greetings

In reply to by G3N-es

Permalink

This sounds like it offers a ton of potential. I suspect the biggest challenge might come down to understanding what the keys used in the .conf file actually translate to. I'm talking about the Base, Mid, etc... keys... But yea, I completely see how cool this could be.

Permalink

Yea sure. Although, I'd suggest your VTQ suite of themes can certainly withstand maintaining their own file name conventions. After all, those conventions exist mainly for your development and corresponding documentation consistencies. In other words, an external (non-VTQ) theme can do whatever it wants so long as it succeeds in educating the end user how to get use of it.

I'm still working on this one and suspect it will evolve in due time. For example, I can't seem to figure out how to get rid of the gradient used on the "Beat" pull-down menu. There are probably some additional icons I'll want to "hide" as well that don't typically come up in my work flow.

Fun stuff!

Permalink

Of course, everyone can create the theme with the conventions they want.
The adaptation to my format is my responsibility, and if anyone else wants to use it.
Although I'm still shaping it, so I don't recommend anyone use its conventions, because they are subject to modification.

Thanks for allowing me to add it.

Permalink

I'm trying to make a custom theme based on other peoples works.
I noticed a lot of UI codes are inside C++ files. I can only do a few things using QSS.
I attached a screenshot I'm currently making.

I removed Sequencer Shadows and the Color of edit-head and edit-tail by changing some C++ code.
By the way, I'm not a computer programmer. I read a little bit of documentation at Qt website.

It would be nice if I can make everything using QSS.
For now, I've to recompile qtractor every single time after I change something in CPP files.

I don't want to change codes inside cpp files. But currently it's the only way to make change that I want.

Oh...anybody know a way to change the color of Piano Roll? The Black & White Piano keys color?

File attachments

Welcome to customization :).

For me to be able to customize the UI, because it is part of the creative experience. Especially on a music show. (I also personalize my physical musical instruments).

In an image program, you create images, and therefore you want a visual environment with symbolic icons that is as neutral as possible, that does not contaminate the image you are creating.

In a text program you create concepts, so even icons are unnecessary there.

But music is emotional, and having a visual style that matches what you're trying to convey emotionally is helpful. It is no coincidence that the most elaborate, different, disruptive and innovative interfaces are found in musical software, (DAWs, synths, plugins...)
Sometimes calling on the tactile and physical world, visually emulating analog instruments and tools. Others building symbolic interfaces.

Thus one feels immersed in different environments, a recording studio, or in a band's garage, in a concert hall, on a conceptual plane with waves and pure colors of electronic music, etc.

Going back to Qtractor and QSS.
There are things that we cannot modify, and others that, although we can touch with QSS, it is not recommended because we lose functionalities.

For example, it is possible to change the backgrounds on the mixer tracks (create other gradients etc). However if you do this, you lose the functionality of highlighting if you select the track in the sequencer. If the mixer tracks had a "selected" state, it could be done, but I don't know if that state can be created for that specific Widget.

"TrackList" could be customizable if the list items were independent Widgets.
I don't know the complexity of making this possible.

Something similar happens with the track "color list" selector. It is a QComboBox type element. If you customize the generic properties of the QComboBox, it will also affect this one, and it may stop working as expected.

Do we have limitations? Yeah. It is logical, programs are not created to be customizable, but functional and efficient.
And all of us who use Qtractor as a DAW do so because both in terms of performance and ease of creating and applying workflows, it is a masterpiece.

Summarizing all the spiel I've given:
Within the limits there is much that can be done. :)

The article you share is interesting. Discovering that the mixing console was consolidated in 1970, somewhat before I was born, has impressed me.
I will comment on some points about all of this.

_1
"dunno if it matters here but, before the subject comes aloft, here goes my take:"

Of course it matters.
Why does this topic exist in this forum?
Why customize?
Is it just an aesthetic whim?

No. There are deep-rooted reasons why personalization makes sense.
Let's say it is a method to achieve ergonomics that transcends the physical.
It is getting the emotional and mental into the relationship.
It is making the tool yours, which fits with your being and intentions.

It is rare that a craftsman does not end up building or modifying his own tools.
Creating or adapting your own tools is part of the creative process.
Computer programs are still tools. Conceptual tools that require a physical interface.
That is touched on in the article you share, and I will return to the topic later on the hardware point.

_2
"beyond skeuomorphism..."
skeuomorphism Yes or no?
There is no one solution, but infinite ones.

We live in a social proposal that is imposed on us and teaches us from a young age that there is only one correct option.
For each option, a side must be created to go to "war."
That the options must fight among themselves until the winner is left.
And that unified winning tendency must govern globally.

It is a false approach, which has more to do with psychopathic thinking than with human thinking.
It is not a human thought, if humans follow it it is only because it is instilled in us from birth.
We are born into a brainwashed environment.

But that is not freedom. And here we are in a free software framework.

There is no one solution, but infinite ones.
If it makes sense to fulfill a specific and correct purpose, it is a solution.

Many complain about Linux fragmentation. They do not realize that fragmentation is implicit in freedom.
True, it makes the learning curve more difficult, but in exchange it gives much more knowledge.

There will be those who need skeuomorphism in their tool, for purposes of historical memory, didacticism, nostalgia, continuity with workflows already learned, etc.
And not in all of his tools, but only in those that skeuomorphism makes sense to him.

And there will also be those who never make sense of skeuomorphism, because it has no place in their way of creating.

Both cases can be correct

_3 Productivity
The social proposal that I indicated before also says that you have to produce a lot.
That what is produced and the way in which it is produced must satisfy the demands of an industry, and not of the artist.
That what is produced must be consumable, without importing the real value of what is produced.
(If it intellectually or emotionally enriches the creator, or the recipient, it is completely useless for the social proposal).

Unfortunately, the trends referred to above are set by software multinationals. And those tencencies end up being the main reference.

In a free model, the value of a creation is linked to the real physical, emotional and intellectual good it provides.

So I think we should start having our purposes as our only reference.
And perhaps we should begin to consider customization as an essential functionality in the development of any free software.
That is, not only being able to modify it, but also allowing high interface customization without having to modify the core of the code.

Because customizing the tool is a natural part of the creative process.
Returning to the metaphor of war. A valid approach should not reign globally.
It is necessary to make it easier for any valid approach to be expressed. That is implicit in a free relational model.

_4 Hardware, physical and software interfaces.

No matter how much they try to insist, the "touch" tablet format is a failure.
It is a good complement, but imprecise for elaborate work.
Nobody uses them as a main tool, nor will they use them. It's imprecise.
The mouse has a precision of one pixel. You couldn't be more precise.

A finger at most has a precision of 50px x 50px. Click detections can be erratic. Not seeing the cursor doesn't help either.
Using a mixing app as a midi interface to control Qtractor can be useful, but you lose the feel of a real mixing console.

They call it touch, because you send information through touch, but you don't receive any touch feedback.
On the other hand, with the mouse (without entering a physical mixing console), you send information through touch.
By pressing or rolling the wheel, you receive the physical information from the button and the wheel.
We should change the name, because the mouse is more tactile than the tablet.

The electronic pen for tablets is not a solution either, because although it is precise for tracing, it is imprecise for clicking.
If you don't control the pressure you can make double or triple clicks, when what you intended was to drag.
You have to put on a "glove" if you don't want false clicks with the palm, etc.
The tactile sensation on the screen is unpleasant. Similar to the squeaking of a stone on a slate.
Much more subtle, of course, but there is that very subtle and irritating background sensation.

It is curious that he got it right the first time with the mouse, for now, it is irreplaceable.

Virtual reality glasses, presence detectors?
No. That they don't find out. We are sensitive beings and we underestimate touch. To interact we need to touch a physical object.

There are those who are incapable of writing on a keyboard if it is not spring-based, with its characteristic touch and sound.

It is evident that as a tool, glasses, tablets and other attempts to eliminate the tactile experience with the physical world do not work.
Those who develop these technologies know it. So perhaps its intention is not to provide new tools, but rather to desperately try to detach ourselves from the physical world.

_5 Artificial intelligence

Artificial intelligence is not mentioned in the article, because at that time it was not yet evident.
I'm just saying, what's the point of something creating music for me?
Will that music enrich me intellectually and emotionally? No. You just have to see the results with images.
Technically spectacular, but at the same time empty, disturbing and sordid.
My intention is to enjoy the experience of creating music myself.

If I want to listen to music that I haven't made, I don't need artificial intelligence.
Millions of humans created, create and will create excellent music to enrich me emotionally and intellectually.

Music is communication. What do I contact if it is generated by AI?

Artificial intelligence is a useless fireworks.

6_ Concluding:
Skeuomorphism can also make sense.
It is necessary to make it easier for any valid approach to be expressed. That is implicit in a free relational model.

It's ok. I'll just stick with REAPER. It's has nice themes.

A lot of UI elements of qtractor are inside cpp files.
I do not dare to change cpp codes. Uhh...actually...I did. But it's just for fun.
I just wanna know how much I can do using QSS only.

UI designs and color is taste. Everyone have different taste.
For me, personally...I perfer clean and modern looking theme.

I'm not even a Musician. By the way.
I'm a 3D, CGI guy. I just a bit tired...mentally...lately.

So uhmm...I take a break form 3D and Design works and I play around with music for about a week.
And I end up designing a UI concept for a software.

Add new comment

The content of this field is kept private and will not be shown publicly.

Markdown

  • Parses markdown and converts it to HTML.
  • Allowed HTML tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type='1 A I'> <li> <dl> <dt> <dd> <h2 id='jump-*'> <h3 id> <h4 id> <h5 id> <h6 id> <img src alt height width> <strike> <pre> <p> <br>
  • Lines and paragraphs break automatically.

Filtered HTML

  • Allowed HTML tags: <a href hreflang> <em> <strong> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <b> <i> <pre> <img src alt height width> <strike>
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.

Plain text

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.
File attachments
Unlimited number of files can be uploaded to this field.
2 MB limit.
Allowed types: jpg jpeg gif png txt doc docx xls xlsx pdf ppt pps odt ods odp zip gz bz2 xz patch diff wav ogg flac ogv mp4 qtz.
CAPTCHA
Enter the characters shown in the image.