Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
sarah_skinning [2017/09/30 18:23] shane |
sarah_skinning [2017/10/01 16:39] (current) shane [Thoughts on skinning] |
| |
The present version of SARAH provides for a minimalist skinning approach---just a single background image---the technique, limitations, and philosophy of which are discussed below. For details about how to create your own SARAH skin, go to https://github.com/getdunne/SARAH/tree/master/Skinning, and look in the //Skinning// folder in the source code. | The present version of SARAH provides for a minimalist skinning approach---just a single background image---the technique, limitations, and philosophy of which are discussed below. For details about how to create your own SARAH skin, go to https://github.com/getdunne/SARAH/tree/master/Skinning, and look in the //Skinning// folder in the source code. |
| |
| ===== Default GUI is vector-only ===== |
| If the user does not provide a //sarah.png// image in their //Desktop// folder at run-time, the present SARAH code defaults to generating a "pure-vector" GUI, where all elements are software-generated. This should work on any computer, and based on tidbits I have read, it should also scale automatically on Retina-screen Macs. Unfortunately I don't have a Retina Mac at the moment, so I can't test this. |
| |
| The code still includes support for a default background image, compiled in to the executable using JUCE's //BinaryData// mechanism. This will only be used if you change the default value of //useBackgroundImage// to //true// in the constructor in //PluginEditor.cpp//. |
| |
===== Raster vs. Vector graphics for GUIs ===== | ===== Raster vs. Vector graphics for GUIs ===== |
- Within each plugin GUI, users engaged in musical work tend to find their way around by memory---both visual and muscle-memory. Nicely detailed GUI designs facilitate visual memory. | - Within each plugin GUI, users engaged in musical work tend to find their way around by memory---both visual and muscle-memory. Nicely detailed GUI designs facilitate visual memory. |
| |
This is not to say that there are not good, bad, and downright ugly GUI designs around. But imagine if you will, a large screen full of plugin GUIs that all look like Windows apps from the 1980s. How would you find your way around? How could you tell one from another? | This is not to say that there are not good, bad, and downright ugly skeuomorphic GUI designs around. But imagine if you will, a large screen full of plugin GUIs that all look like Windows apps from the 1980s. How would you find your way around? How could you tell one from another? |
| |
==== Skinnability ==== | ==== Division of labour and "skinnability" ==== |
Building GUIs out of pre-rendered raster graphic images supports an efficient and sensible division of labour between //programmers//, whose primary concern is making software work, and //designers//, whose primary concern is making it look good. Taking the extra step to allow such images to be found and loaded at run-time makes a program or plugin //skinnable//, allowing ordinary users to further develop the GUI design. This is particularly beneficial in open-source and community-developed software, where the original developer's resources may be very limited, and enthusiastic users can contribute design ideas which the developer might never have thought of. | Building GUIs out of pre-rendered raster graphic images supports an efficient and sensible division of labour between //programmers//, whose primary concern is making software work, and //designers//, whose primary concern is making it look good. Taking the extra step to allow such images to be found and loaded at run-time makes a program or plugin //skinnable//, allowing ordinary users to further develop the GUI design. This is particularly beneficial in open-source and community-developed software, where the original developer's resources may be very limited, and enthusiastic users can contribute design ideas which the developer might never have thought of. |
| |
| ==== "Efficiency" ==== |
| It's easy to say that highly-detailed graphics need not burden the CPU of the host system, since modern GPUs have become so powerful, but it is quite another thing to program a system to ensure that this is the case. It's worth noting that in the world of interactive games---where CPU and GPU efficiency are pursued relentlessly---pre-rendered graphic "assets" are used extensively. |
| |
| Any discussion of "efficiency" must begin with careful consideration of //what we should aim to optimize//, which often comes down to //whose time// should be optimized. Software is expensive to develop and maintain, and there has been a very sensible trend to optimize programmer time, even at the expense of run-time CPU efficiency, because in relative terms, programmers are expensive and computer power is cheap. (See also [[api_guessing_game|The API Guessing Game]].) |
| |