Difference between revisions of "Skinning"

From Second Life Wiki
Jump to navigation Jump to search
m (Shame on me for not previewing!)
 
(6 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{multi-lang}}
{{multi-lang}}
[[Category:Linden Lab Projects]]
{{See also|Skinning HowTo}}
< [[Viewer Roadmap]], [[User Interface Roadmap]]
< [[Viewer Roadmap]], [[User Interface Roadmap]]


== Overview ==
== Overview ==
'''Skinning''' refers broadly to the ability to customize the '''user interface'''. The '''Skinning''' project is part of the [[User Interface Roadmap]] and specifically describes a path to make the Second Life user interface entirely '''data driven''' and customizable by Linden Lab, 3rd party developers, and individuals, without requiring changes to the primary application source code, and maintainable across updates.
'''Skinning''' refers broadly to <onlyinclude>the ability to customize the Viewer '''user interface'''. The Skinning project is part of the [[User Interface Roadmap]] and specifically describes a path to make the Second Life user interface entirely '''data driven''' and customizable by Linden Lab, 3rd party developers, and individuals, without requiring changes to the primary application source code, and maintainable across updates.</onlyinclude>


== Priority ==
== Priority ==
Line 28: Line 28:
=== Phase 0 ===
=== Phase 0 ===
* The first phase is to implement Project [[Dazzle]], which is a first skin implementation and proof-of-needed-abstraction for changing the colors/look of the user interface.
* The first phase is to implement Project [[Dazzle]], which is a first skin implementation and proof-of-needed-abstraction for changing the colors/look of the user interface.
* Immediate priority to:
** {{Jira|VWR-5059}} Include the ability to change skins and restore the Classic skin


=== Phase 1 ===
=== Phase 1 - Widget Cleanup ===
'''Enable Packaging and Resident customizations'''
{{Jira|VWR-6027}}  Skinning Phase 1


*JIRA: {{Jira|VWR-6027}} Skinning - Phase 1
* '''Objectives:'''
** ''Objective:'' enable external developers and residents to preserve changes across updates and distribute custom UI layouts
** Make all widget constructors parameterized
*** Allow residents to save changes to a user local directory (i.e. Documents and Settings\User\Application Data\SecondLife\skins)
** Separate widget contents from layout
*** Define location to search for installed skin packages
** Remove hard coded art and layout
*** subtask: {{Jira|VWR-5059}} Include the ability to change skins and restore the original skin
** Additional UI cleanup
*** Specify XML files that modify only (translation strings) or override completely (user customizations)
** All XUI-specific logic should happen in postBuild() call
 
** {{Jira|VWR-1884}} Remove hard coded art and colors:
*JIRA: {{Jira|VWR-1883}} UI Texture Cache
** ''Objective:'' Make it easier to add and modify UI art
*** Separate pre-cached images with asset ids from UI images
*** Rename UI Images to use file names not asset ids
 
* JIRA: {{Jira|VWR-1884}} Remove hard coded art and colors  
** ''Objective:'' Remove any UI art from the code
*** Remove programmatic art with attributes, e.g. volume sliders
*** Remove programmatic art with attributes, e.g. volume sliders
*** Remove any backgrounds from icons, etc (use alpha)
*** Remove any backgrounds from icons, etc (use alpha)
Line 51: Line 46:
*** Allow specification of fixed size borders (i.e. so that button graphics with narrow boarders scale correctly)
*** Allow specification of fixed size borders (i.e. so that button graphics with narrow boarders scale correctly)
*** Enable additional attributes to widgets for colors, etc
*** Enable additional attributes to widgets for colors, etc
*** subtask: {{Jira|VWR-2447}} Text drop-shadow settings aren't configurable in XML
*** subtask: {{Jira|VWR-2447}} Text drop-shadow settings aren't configurable in XML, resulting in legibility issues
*** All panel/floater layout should be data driven
*** Move All UI Settings to XML - Colors, other global UI settings
*** Eliminate the unused (legacy) xml files in \xui\en-us
*** Make all existing floaters use LLUICtrlFactory properly


=== Phase 2 ===
'''Improve Localizations'''


* Automated changelist generator for all releases
=== Phase 2 - Switchable Skins ===
* strings.xml - Global translation pairs for text not associated with a XUI file
* '''Objectives:'''
* Allow residents to package changes and easily distribute them for easy installation by other users
** Allow switching of skins without restarting the client
** Make it easier to see the effects of XUI edits
*** eg., Changing the language setting will reload all UI elements
** {{Jira|VWR-1885}} Dynamic Reloading of UI elements (Hot swapping):
*** Color definitions
*** LLUIImage should be able to swap texture assets on the fly
*** Allow reloading of XUI file for live floaters and panels, including the menus and overlay bar
*** {{Jira|VWR-1883}} Move different texture types into appropriate sub folders (OI Precache, etc) and use plaintext names
*** Ensure all floaters can handle missing UI elements and will behave reasonably or refuse to open with an appropriate message


=== Phase 3 ===
'''Cleaner XUI files'''


*JIRA: {{Jira|VWR-1882}}  Sparse XUI files
=== Phase 3 - XML Widget Layout ===
** ''Objective:'' Make the XUI files less verbose and more readable
* '''Objectives:'''
** Create 'templates.xml' file with default attributes for each widget type
** XUI Templates - Make all widet defaults data driven, allow additional templates for common widget subtypes
*** Other templates for common attribute sets can also be declared here
*** Put widget default values in XML
*** Widgets can declare a template (default to the default one for that type)
*** Put widget layout data in XML
** Remove all default values from the code (XML cleanup)
** {{Jira|VWR-1882}}  Sparse XUI files
*** Make the XUI files less verbose and more readable
*** Only include non default values in XUI files
*** Remove all default values from the code (XML cleanup)
*** Create a tool to process all existing XML files and write out only the non-default values
*** Create a tool to process all existing XML files and write out only the non-default values
*** Clean up the XML output at the same time
*** Clean up the XML output at the same time
** Automatically Save Floater Positions and Sizes
*** Include minimized position (not currently saved)
** Document the UI XML format
=== Phase 4 - a "Simple UI" Skin ===
* '''Objective:''' Enable a simplified interface for SL, as a custom skin to be packaged with the Viewer
** Make Advanced menus data driven
** Data Driven callbacks - UI Callbacks
*** Enable all menu items and overlay buttons to be entirely data driven
** {{Jira|VWR-1886}} Other simplification tasks TBD, such as:
*** Allow buttons to open floaters by name
*** Include support for opening a specific tab
*** Differentiate between toggling state of singletons, showing/focusing, and opening new instances
*** Allow menus to be expanded/collapsed for simple vs. advanced usage
**** Specify layout of overlay bar and menu bar in "viewer.xml"
**** Allow multiple "overlay bars" to be added so that side bars or corner panels with buttons can be added


* Automatically Save Floater Positions and Sizes
** Include minimized position (not currently saved)


* Document the UI XML format
== Future Phases  ==


=== Phase 4 ===
=== I18N ===
'''Data Driven Menus'''
* '''Objectives:'''
** Complete Internationalization of the SL Viewer
** Include translations of server messages from a downloadable XML file on login


* Menus and Overlay bar to become data driven


* JIRA: {{Jira|VWR-1885}} Dynamic Reloading of UI elements
=== Skin Packaging ===
** ''Objective:'' Make it easier to see the effects of XUI edits
{{Jira|VWR-7078}} Enable Packaging and Resident customizations
** Dynamic Reloading - Allow all UI elements to be reloaded without restarting the client
 
*** Enable reloading of all floaters including the menus and overlay bar
* '''Objectives:'''
*** Ensure all floaters can handle missing UI elements and will behave reasonably or refuse to open with an appropriate message
** Facilitate packaging and distribution of skins
** eg., Changing the language setting will reload all UI elements
** enable external developers and residents to preserve changes across updates and distribute custom UI layouts
** Consider web based distribution / download of skins, enabling "live" updates
** Specify files that modify only (translations) or override completely (user customizations)
** Automated changelist generator for all releases
*** Also useful for mass translation (e.g. "Second Life") and rough first pass translations
** Allow residents to package changes and easily distribute them for easy installation by other users
*** enhance options in Edit > Preferences > Skins
**** a) Add dropdown option to preferences
**** b) Fill options from an XML file
*** add support for reading skins from zip file
*** investigate skin installer for all platforms
 


=== Phase 5 ===
=== Customization Support ===
'''Dynamic Layout'''
* '''Objective:''' Clean up XUI and simplify further Skinning development
** Automatically Save Floater Positions and Sizes - Eliminate need to explicitly list rect controls for floaters
*** Create layout.xml, store default in app/skins, custom values in user/skins
*** Include minimized position (not currently saved)
** XUI Documentation - Document the UI XML format
*** improve documentation at [[Skinning HowTo/Basics]]
** Consistent Widget Interfaces - Make all widget interfaces consistent, access widgets only through interfaces


* Improve the widget layout language and add auto sizing


* JIRA: {{Jira|VWR-1886}}
=== Dynamic Layout ===
** ''Objective:'' enable menus and overlay bar to be more easily customized
*** Allow buttons to open floaters by name
*** Include support for opening a specific tab
*** Differentiate between toggling state of singletons, showing/focusing, and opening new instances
** Allow menus to be expanded/collapsed for simple vs. advanced usage
** Specify layout of overlay bar and menu bar in "viewer.xml"
*** Allow multiple "overlay bars" to be added so that side bars or corner panels with buttons can be added


* JIRA: {{Jira|VWR-1887}}
* {{Jira|VWR-1887}} Improve the widget layout language and add auto sizing
** ''Objective:'' make it easier to change the XUI layout data
** ''Objective:'' make it easier to change the XUI layout data
*** Choose a standard model for the layout language (e.g. CSS? qt-like?)
*** Choose a standard model for the layout language (e.g. CSS? qt-like?)
Line 109: Line 140:
*** Auto layout elements when no layout information is provided
*** Auto layout elements when no layout information is provided


=== Specific Requests ===
 
=== Data Driven UI ===
* Make the entire UI data driven; only control flow logic should remain as code
 
 
=== Other Specific Requests ===
* Make iconic panels (i.e.. build tools) generally available
* Make iconic panels (i.e.. build tools) generally available
** Combination of fully iconic buttons and the ability for a button to open a specific tab in a floater
** Combination of fully iconic buttons and the ability for a button to open a specific tab in a floater
* Docking / Hosting - Make the 3D window a layout element and allow floaters to be docked
* Docking / Hosting - Make the 3D window a layout element and allow floaters to be docked
** Possibly allow floaters to exist outside application window
** Possibly allow floaters to exist outside application window
'''Bold text'''
 
 
[[Category:Skinning]]
[[Category:Skinning]]

Latest revision as of 07:51, 21 May 2024

< Viewer Roadmap, User Interface Roadmap

Overview

Skinning refers broadly to the ability to customize the Viewer user interface. The Skinning project is part of the User Interface Roadmap and specifically describes a path to make the Second Life user interface entirely data driven and customizable by Linden Lab, 3rd party developers, and individuals, without requiring changes to the primary application source code, and maintainable across updates.

Priority

See User Interface Roadmap

See Also

Objectives

  • Enable internal designers to more easily customize the look of Second Life
  • Enable external developers and residents to better serve their audiences, and save customizations and prepare skin "packages" that persist across viewer updates
    • "Skinning" can mean a lot of things. So for this project, skinning shall initially mean:
    1. A custom look using the same-sized images. (for example, Dazzle)
    2. Custom floaters that display HTML and can speak back to the client through SLURLS.
    3. Customizations or language customizations are retained across installs
    4. "Simpler" skins that allow parts of the UI to be removed
    5. Customized help links
  • Please use the 'discussion' page to raise constructive architecture considerations if you like.

Tasks

Skinning pwiki.jpg

Phase 0

  • The first phase is to implement Project Dazzle, which is a first skin implementation and proof-of-needed-abstraction for changing the colors/look of the user interface.
  • Immediate priority to:
    • VWR-5059 Include the ability to change skins and restore the Classic skin

Phase 1 - Widget Cleanup

VWR-6027 Skinning Phase 1

  • Objectives:
    • Make all widget constructors parameterized
    • Separate widget contents from layout
    • Remove hard coded art and layout
    • Additional UI cleanup
    • All XUI-specific logic should happen in postBuild() call
    • VWR-1884 Remove hard coded art and colors:
      • Remove programmatic art with attributes, e.g. volume sliders
      • Remove any backgrounds from icons, etc (use alpha)
      • Ensure that all images can be cropped and scaled
      • Allow specification of fixed size borders (i.e. so that button graphics with narrow boarders scale correctly)
      • Enable additional attributes to widgets for colors, etc
      • subtask: VWR-2447 Text drop-shadow settings aren't configurable in XML, resulting in legibility issues
      • All panel/floater layout should be data driven
      • Move All UI Settings to XML - Colors, other global UI settings
      • Eliminate the unused (legacy) xml files in \xui\en-us
      • Make all existing floaters use LLUICtrlFactory properly


Phase 2 - Switchable Skins

  • Objectives:
    • Allow switching of skins without restarting the client
    • Make it easier to see the effects of XUI edits
      • eg., Changing the language setting will reload all UI elements
    • VWR-1885 Dynamic Reloading of UI elements (Hot swapping):
      • Color definitions
      • LLUIImage should be able to swap texture assets on the fly
      • Allow reloading of XUI file for live floaters and panels, including the menus and overlay bar
      • VWR-1883 Move different texture types into appropriate sub folders (OI Precache, etc) and use plaintext names
      • Ensure all floaters can handle missing UI elements and will behave reasonably or refuse to open with an appropriate message


Phase 3 - XML Widget Layout

  • Objectives:
    • XUI Templates - Make all widet defaults data driven, allow additional templates for common widget subtypes
      • Put widget default values in XML
      • Put widget layout data in XML
    • VWR-1882 Sparse XUI files
      • Make the XUI files less verbose and more readable
      • Only include non default values in XUI files
      • Remove all default values from the code (XML cleanup)
      • Create a tool to process all existing XML files and write out only the non-default values
      • Clean up the XML output at the same time
    • Automatically Save Floater Positions and Sizes
      • Include minimized position (not currently saved)
    • Document the UI XML format


Phase 4 - a "Simple UI" Skin

  • Objective: Enable a simplified interface for SL, as a custom skin to be packaged with the Viewer
    • Make Advanced menus data driven
    • Data Driven callbacks - UI Callbacks
      • Enable all menu items and overlay buttons to be entirely data driven
    • VWR-1886 Other simplification tasks TBD, such as:
      • Allow buttons to open floaters by name
      • Include support for opening a specific tab
      • Differentiate between toggling state of singletons, showing/focusing, and opening new instances
      • Allow menus to be expanded/collapsed for simple vs. advanced usage
        • Specify layout of overlay bar and menu bar in "viewer.xml"
        • Allow multiple "overlay bars" to be added so that side bars or corner panels with buttons can be added


Future Phases

I18N

  • Objectives:
    • Complete Internationalization of the SL Viewer
    • Include translations of server messages from a downloadable XML file on login


Skin Packaging

VWR-7078 Enable Packaging and Resident customizations

  • Objectives:
    • Facilitate packaging and distribution of skins
    • enable external developers and residents to preserve changes across updates and distribute custom UI layouts
    • Consider web based distribution / download of skins, enabling "live" updates
    • Specify files that modify only (translations) or override completely (user customizations)
    • Automated changelist generator for all releases
      • Also useful for mass translation (e.g. "Second Life") and rough first pass translations
    • Allow residents to package changes and easily distribute them for easy installation by other users
      • enhance options in Edit > Preferences > Skins
        • a) Add dropdown option to preferences
        • b) Fill options from an XML file
      • add support for reading skins from zip file
      • investigate skin installer for all platforms


Customization Support

  • Objective: Clean up XUI and simplify further Skinning development
    • Automatically Save Floater Positions and Sizes - Eliminate need to explicitly list rect controls for floaters
      • Create layout.xml, store default in app/skins, custom values in user/skins
      • Include minimized position (not currently saved)
    • XUI Documentation - Document the UI XML format
    • Consistent Widget Interfaces - Make all widget interfaces consistent, access widgets only through interfaces


Dynamic Layout

  • VWR-1887 Improve the widget layout language and add auto sizing
    • Objective: make it easier to change the XUI layout data
      • Choose a standard model for the layout language (e.g. CSS? qt-like?)
      • Allow elements to be grouped for layout purposes
      • Auto layout elements when no layout information is provided


Data Driven UI

  • Make the entire UI data driven; only control flow logic should remain as code


Other Specific Requests

  • Make iconic panels (i.e.. build tools) generally available
    • Combination of fully iconic buttons and the ability for a button to open a specific tab in a floater
  • Docking / Hosting - Make the 3D window a layout element and allow floaters to be docked
    • Possibly allow floaters to exist outside application window