Difference between revisions of "GUI Themes/TODO"

Jump to navigation Jump to search
6,333 bytes added ,  19:13, 11 March 2016
→‎Dialogs: Showing hidden files is already possible.
(I fixed the cursor issue earlier today, without realizing it was mentioned here)
(→‎Dialogs: Showing hidden files is already possible.)
 
(42 intermediate revisions by 11 users not shown)
Line 1: Line 1:
{{Infobox_TODO|
taskname=GUI Themes TODO|
techcontact=The ScummVM Team|
subsystem=Generic|
}}
We plan to implement a new GUI look & feel in ScummVM, roughly based on the
We plan to implement a new GUI look & feel in ScummVM, roughly based on the
new look of our web site. Some concept drafts of the new look can be found here:
new look of our web site. Some concept drafts of the new look can be found here:
http://www.thekrest.de/wip/scummvm/
http://kressline.de/wip/scummvm/


You can also read the documentation on the [[GUI Themes]].
See also [[GUI Themes/Specs|specs]]


== To Do ==
== To Do ==
=== General ===
* Add tab-focus support, i.e. make it at least possible to use the "tab" key (and also "shift-tab" to cycle through the edit fields.
* Even nicer would be general "tab cycle" support, allowing tab to cycle the focus for all items where it makes sense (buttons, checkboxes, etc.), to make the GUI fully keyboard controllable
* SPEED: The GUI is relatively sluggish these days on my 1.5 GHz PowerBook :-/. I'll try to list some bottle necks and possible solutions:
** A lot of time is spent in ThemeModern::openDialog for dimming the screen.
*** The code calls a function pointer for each pixel of the screen, which results in code which the compiler can't properly optimize, essentially doing a couple hundred thousand tight read-call-write ops, which can't be inlined / improved upon.
*** Better: change _dialogShadingCallback to not work on a single pixel but on the whole better
*** Even better: Get rid of the _system->RGBToColor / _system->colorToRGB which are terrible for performance, too (can't be inlined). So, at least provide a 555 / 565 color mode version, which works efficient on targets using these color modes, and only fall back to the OSystem API if an unsupported color mode is in use
* Implemented better layouting code. It should be possible to layout widgets in a grid (typical example: a 2 by n "grid", each row contains a label on the left side (to be right aligned) and a widget on the right side (to be left aligned).
* Change the monolithic DrawStep struct into a class hierarchy. To this end, we probably should also change the XML format (which sadly closely mirrors this monolithic struct). Namely, replace the <drawstep> element by one element for each kind of drawstep. In each of these specialized "drawsteps", allow only those attributes that make sense.
=== Widgets ===
* EditableWidget: Make it possible to specify a min/max length for the text
* EditableWidget: Let setEditString filter the string it gets
* EditableWidget: Right now, custom filtering requires the user to subclass; it would be nice if there was simply a "validator hook" or so. Maybe take some inspiration from Java's Swing in this matter.
* List widget
* List widget
** get mock-up from Krest
** get mock-up from Krest
Line 11: Line 33:
* PopUp widget (aka drop-down list)
* PopUp widget (aka drop-down list)
** get mock-up from Krest
** get mock-up from Krest
* Scrollbar widget
* Scrollbar widget - The handle leaves trails in 320xY resolution. Possibly, the shadow of the handle is drawn too wide.
** The handle of the scrollbar widget leaves trails in 320xY resolution. Possibly, the shadow of the handle is drawn too wide.
** Can't replicate in latest git master. Fixed by 1b2485f4af2010f262bd4f6e149a8c2d96b893cc?
* Dialogs
* Add a new "BoxWidget" / "GroupBoxWidget", which can be used to group other widgets
** About dialog
** This widget makes it easy to group widgets and control them together; e.g. disable the box widget, and all children get disabled, too
*** looks bad. Probably add some shadows and text padding
** Here is the equivalent of this control in Qt: http://doc.trolltech.com/4.3/widgets-groupbox.html
*** fix glitch at the top of the dialog where part of the characters get stuck (see FIXME in about.cpp)
** (optionally) draws a border around itself
*** [Classic theme] Text seems to be drawn over the dialog frame. At least at the top of the dialog.
** (optionally) draws a title
*** The grey text (color 2, kStateDisabled) is hard to read in both the new and the classic theme.
** The ideal version of this would also support a checkbox in the title, and would automatically disable/enable all contained widgets if the checkbox gets activated (this is also demonstrated in the above Qt example)
** Chooser aka Add game dialog
** Clearly this widget would be of great use for the options dialogs, for the "Override XYZ" checkboxes
*** [Classic Theme] Adjust size and position of the chooser to Launcher
* ButtonWidget: Allow drawing the 'default' button in a visually distinct way
** Options dialog
 
*** Split Audio tab to Audio and Volume as in Edit game dialog
=== Wizards ===
*** Several texts, e.g. vcMusicText, have their alignment set to kTextAlignRight, but are still drawn as left-aligned.
* To make ScummVM as friendly as possible, we would like to introduce wizards that would help with essential tasks.
*** [Classic Theme] Adjust size and position of the "Options" dialog to Launcher
* No Games Wizard: when there are no games in the config file, a wizard will come up saying something like
*** It would be nice if you could select theme from the GUI. The "Graphics" tab, perhaps?
Welcome to ScummVM!
** Edit game dialog
 
*** MIDI tab: MIDI Gain draws out of bounds
Please tell us where your point and click games can be found:
**** Maybe place it under Volume?
 
***** In either case, keep position of MIDI gain consistent for "Edit game" and "Options" dialog PLEASE! :)
Path Edit Box
***** Couldn't we just reduce def_midiControlsSpacing, and put less space between the checkboxes?
 
***** But please, keep spacing uniform accross all dialogs too! :)
"Find My Games" button (uses Mass Add)
*** [Classic Theme] Adjust size and position of the "Edit game" dialog to Launcher
 
** The sliding action of the debug console takes a lot more CPU now than it used to. On my 450 MHz P3, I don't even see it slide in 2x mode. It seems to appear/disappear all at once.
"Cancel Wizard" button, "Don't show again" Checkbox
** The text "Norwegian Bokmål" isn't rendered correctly since our fonts do not have the letter "Å". See [http://sourceforge.net/tracker/index.php?func=detail&aid=1276480&group_id=37116&atid=418820 bug #1276480]
 
*** If we decide to use Latin-1 fonts instead, we should also update the About dialog to use accented characters where appropriate.
* Rare game options wizard: it was suggested that we implement a wizard to tell the user about rare options such as dithering in SCI games. For example, when an SCI0 game is added either directly or through mass add, we could show:
You have added an SCI0 game. This game can use the 'undithering' option to enhance the original look.
 
Checkbox "Turn this feature on"
 
Remember that you can turn this feature on or off through the XXXX tab.
 
OK button.
 
=== Dialogs ===
* About dialog
** looks bad. Probably add some shadows and text padding
** fix glitch at the top of the dialog where part of the characters get stuck (see FIXME in about.cpp)
** [Classic theme] Text seems to be drawn over the dialog frame. At least at the top of the dialog.
** The grey text (color 2, kStateDisabled) is hard to read in both the new and the classic theme.
*** Reported as {{Tracker|id=5833}}. Fixed in Modern by fee19d. Fix for classic still needed? i.e. make lighter there as background is black (as opposed to Modern, which has almost white background).
** Add a "fade" effect for the top/bottom text lines
** Maybe prerender all of the text into another surface, and then simply compose that over the screen surface in the right way.
* Options dialog
** There is currently no way to unset/reset-to-default the path settings from the GUIsettings.
*** To this end. maybe add an (optional) "reset to default" button to the browser dialog. (This would save space in the options dialog)
*** Alternatively, add "Reset to Default" buttons to each path setting, possible similar to the one used with the soundfont (which is a rather too cryptic, IMO)
** Several texts, e.g. vcMusicText, have their alignment set to kTextAlignRight, but are still drawn as left-aligned.
** Add ability to adjust debuglevel (int). Useful for command line less ports i.e. Android.
* Engine Options Dialog
** Currently only bool (checkbox) options are supported. Add support for int (slider) options. Needed for:
*** walkspeed (int)
*** gfx_details (int - SWORD2)
*** t7g_speed (int - GROOVIE)
** reverse_stereo (bool - SWORD2) is also currently missing. Make this a global option as it is likely to apply to a number of engines?
* The sliding action of the debug console takes a lot more CPU now than it used to. On my 450 MHz P3, I don't even see it slide in 2x mode. It seems to appear/disappear all at once.
* File browser dialog
** Right now we "visualize" that an entry is a folder/directory by appending a slash "/" to the name. This is not really intuitive for non-Unix users. Maybe we could add small file / directory icons? And maybe also an up-arrow for the "up" button.
 
=== Fonts ===
* The BDF fonts can have characters that are both wider and taller than expected. For instance, the letter Ã… extends one pixel above the top of the line. This can lead to glitches since we update the screen based on font height and character width, not bounding boxes. The List widget is one example of this.
* <s>Antialiased fonts</s>
** <s>This could be tricky, since the BDF fonts are bitmaps. Is it even possible, within this format, to store the alpha channel needed (?) to represent an anti-aliased glyph? One possibility might be to store a larger version of the font and scale it down to the desired size, but that seems wasteful.</s>
*** <s>BDF fonts aren't suitable here since they're 1bpp. It could be done if font data would be 8bpp and thus, contain just the alpha channel, i.e. shades of gray which will be blended on rendering stage.</s>
*** <s>It's *still* possible to use 1bpp fonts for antialiasing, by implementing oversampling: By downscaling a 4x fold or 8x too big character, one can compute & render the antialiased output on the fly -- this worked even on some old 90 MHz PowerPC Macs, so it should be doable. Main concern would be memory usage, and the need to have a big version of all fonts around. Or we switch to a vector based font system (TrueType plus [http://www.freetype.org/index2.html Freetype]), at the cost of resources and possibly some portability -- we would have to research this a bit. Another advantage of using FreeType: Unicode support in the GUI would be possible.</s>
 
=== Collaborative work with the OpenUsability Project ===
Given that usability is one of the primary driving forces behind the design of user interfaces, it seems logical to pay close to attention to it while redesigning ScummVM's GUI.
 
The OpenUsability project (http://openusability.org/) provides usability consulting and advice for open sourced applications. It would be a sensible opportunity to contact them, seeking assistance to improve ScummVM in the usability front.


== Some ideas about theme caching ==
== Some ideas about theme caching ==
178

edits

Navigation menu