From c0614c4f218d9ad071e8af3a2cad46d254a33b53 Mon Sep 17 00:00:00 2001
From: Michael <Michael@some.where>
Date: Sat, 20 May 2017 09:00:52 -0400
Subject: [PATCH] document skinengine

---
 ShiftOS_TheReturn/Skinning.cs | 90 ++++++++++++++++++++++++++++++++++-
 1 file changed, 88 insertions(+), 2 deletions(-)

diff --git a/ShiftOS_TheReturn/Skinning.cs b/ShiftOS_TheReturn/Skinning.cs
index c2f47fa..f5dd211 100644
--- a/ShiftOS_TheReturn/Skinning.cs
+++ b/ShiftOS_TheReturn/Skinning.cs
@@ -37,42 +37,71 @@ using System.Reflection;
 using ShiftOS.Engine.Scripting;
 namespace ShiftOS.Engine
 {
-
+    /// <summary>
+    /// Skinning API for Lua.
+    /// </summary>
     [Exposed("skinning")]
     public class SkinFunctions
     {
+        /// <summary>
+        /// Reload the current skin.
+        /// </summary>
         public void loadSkin()
         {
             SkinEngine.LoadSkin();
         }
 
+        /// <summary>
+        /// Get the current skin info.
+        /// </summary>
+        /// <returns>A proxy object containing all skin variables.</returns>
         public dynamic getSkin()
         {
             return SkinEngine.LoadedSkin;
         }
 
+        /// <summary>
+        /// Set the current skin to the specified <see cref="Skin"/> class. 
+        /// </summary>
+        /// <param name="skn">The <see cref="Skin"/> class to load.</param>
         public void setSkin(Skin skn)
         {
             Utils.WriteAllText(Paths.GetPath("skin.json"), JsonConvert.SerializeObject(skn));
             SkinEngine.LoadSkin();
         }
 
+        /// <summary>
+        /// Retrieves an image from the skin file.
+        /// </summary>
+        /// <param name="id">The skin image ID</param>
+        /// <returns>The loaded image, null (nil in Lua) if none is found.</returns>
         public dynamic getImage(string id)
         {
             return SkinEngine.GetImage(id);
         }
     }
 
-
+    /// <summary>
+    /// Skin engine management class.
+    /// </summary>
     public static class SkinEngine
     {
         private static ISkinPostProcessor processor = null;
 
+        /// <summary>
+        /// Load a new skin postprocessor into the engine.
+        /// </summary>
+        /// <param name="_processor">The postprocessor to load.</param>
         public static void SetPostProcessor(ISkinPostProcessor _processor)
         {
             processor = _processor;
         }
 
+        /// <summary>
+        /// Retrieve the user-specified image layout of a skin image.
+        /// </summary>
+        /// <param name="img">The skin image ID.</param>
+        /// <returns>The <see cref="ImageLayout"/> for the image.</returns>
         public static ImageLayout GetImageLayout(string img)
         {
             if (LoadedSkin.SkinImageLayouts.ContainsKey(img))
@@ -86,6 +115,11 @@ namespace ShiftOS.Engine
             }
         }
 
+        /// <summary>
+        /// Retrieves an image from the skin after postprocessing it.
+        /// </summary>
+        /// <param name="img">The image ID to search.</param>
+        /// <returns>The post-processed image, or null if none was found.</returns>
         public static System.Drawing.Image GetImage(string img)
         {
             var type = typeof(Skin);
@@ -111,11 +145,20 @@ namespace ShiftOS.Engine
             return null;
         }
 
+        /// <summary>
+        /// Set the engine's current icon prober.
+        /// </summary>
+        /// <param name="prober">The icon prober to use.</param>
         public static void SetIconProber(IIconProber prober)
         {
             _iconProber = prober;
         }
 
+        /// <summary>
+        /// Load a <see cref="Image"/> from a <see cref="byte"/> array.  
+        /// </summary>
+        /// <param name="image">The array to convert</param>
+        /// <returns>The resulting image.</returns>
         public static Image ImageFromBinary(byte[] image)
         {
             if (image == null)
@@ -126,6 +169,9 @@ namespace ShiftOS.Engine
 
         private static Skin loadedSkin = new Skin();
 
+        /// <summary>
+        /// Gets the currently loaded skin.
+        /// </summary>
         public static Skin LoadedSkin
         {
             get
@@ -138,6 +184,9 @@ namespace ShiftOS.Engine
             }
         }
 
+        /// <summary>
+        /// Initiates the skin engine.
+        /// </summary>
         public static void Init()
         {
             Application.ApplicationExit += (o, a) =>
@@ -160,8 +209,14 @@ namespace ShiftOS.Engine
             }
         }
 
+        /// <summary>
+        /// Occurs when the skin is loaded.
+        /// </summary>
         public static event EmptyEventHandler SkinLoaded;
 
+        /// <summary>
+        /// Reload the current skin.
+        /// </summary>
         public static void LoadSkin()
         {
             LoadedSkin = JsonConvert.DeserializeObject<Skin>(Utils.ReadAllText(Paths.GetPath("skin.json")));
@@ -170,6 +225,9 @@ namespace ShiftOS.Engine
             Desktop.PopulateAppLauncher();
         }
 
+        /// <summary>
+        /// Save the skin loaded in memory to the filesystem.
+        /// </summary>
         public static void SaveSkin()
         {
             Utils.WriteAllText(Paths.GetPath("skin.json"), JsonConvert.SerializeObject(LoadedSkin, Formatting.Indented));
@@ -177,6 +235,11 @@ namespace ShiftOS.Engine
 
         private static IIconProber _iconProber = null;
 
+        /// <summary>
+        /// Retrieves the default icon for a given icon ID.
+        /// </summary>
+        /// <param name="id">The icon ID to search.</param>
+        /// <returns>The resulting icon image.</returns>
         public static Image GetDefaultIcon(string id)
         {
             if (_iconProber == null)
@@ -213,6 +276,11 @@ namespace ShiftOS.Engine
             }
         }
 
+        /// <summary>
+        /// Retrieves the user-defined icon for a specified icon ID.
+        /// </summary>
+        /// <param name="id">The icon ID to search.</param>
+        /// <returns>The resulting icon image.</returns>
         public static Image GetIcon(string id)
         {
             if (!LoadedSkin.AppIcons.ContainsKey(id))
@@ -231,11 +299,23 @@ namespace ShiftOS.Engine
         }
     }
 
+    /// <summary>
+    /// Interface for probing app icons.
+    /// </summary>
     public interface IIconProber
     {
+        /// <summary>
+        /// Retrieve the icon image from a <see cref="DefaultIconAttribute"/>. 
+        /// </summary>
+        /// <param name="attr">The attribute data</param>
+        /// <returns>The resulting image.</returns>
         Image GetIcon(DefaultIconAttribute attr);
     }
 
+    /// <summary>
+    /// Sets the default icon ID for a <see cref="IShiftOSWindow"/>. 
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Class, AllowMultiple =false)]
     public class DefaultIconAttribute : Attribute
     {
         public DefaultIconAttribute(string id)
@@ -246,6 +326,9 @@ namespace ShiftOS.Engine
         public string ID { get; private set; }
     }
 
+    /// <summary>
+    /// The data stored in any .skn file.
+    /// </summary>
     public class Skin
     {
         //borrowing from the discourse theme for the default skin
@@ -1372,6 +1455,9 @@ namespace ShiftOS.Engine
         public Font AdvALItemFont = SysFont2;
     }
 
+    /// <summary>
+    /// Marks a skin spec field as hidden from the Shifter.
+    /// </summary>
     public class ShifterHiddenAttribute : Attribute
     {