GetDunne Wiki

Notes from the desk of Shane Dunne, software development consultant

User Tools

Site Tools


sarah_skinning

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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]
Line 3: Line 3:
  
 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 =====
Line 21: Line 26:
   - 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]].)
  
sarah_skinning.1506795798.txt.gz ยท Last modified: 2017/09/30 18:23 by shane