aboutsummaryrefslogtreecommitdiff
path: root/source/WindowsFormsApplication1/skins.cs
diff options
context:
space:
mode:
Diffstat (limited to 'source/WindowsFormsApplication1/skins.cs')
-rw-r--r--source/WindowsFormsApplication1/skins.cs791
1 files changed, 791 insertions, 0 deletions
diff --git a/source/WindowsFormsApplication1/skins.cs b/source/WindowsFormsApplication1/skins.cs
new file mode 100644
index 0000000..ddac7fb
--- /dev/null
+++ b/source/WindowsFormsApplication1/skins.cs
@@ -0,0 +1,791 @@
+using System.IO;
+using System.Drawing;
+using Newtonsoft.Json;
+using System;
+using ShiftOS;
+using System.IO.Compression;
+using System.Windows.Forms;
+using System.Collections.Generic;
+using System.Drawing.Imaging;
+
+namespace Skinning
+{
+ public class Skin {
+ //Widget Positions
+ public string ALPosition = "Top";
+ public string PanelButtonPosition = "Top";
+ public string ClockPosition = "Top";
+
+ //WINDOW SETTINGS/IMAGES
+ //images
+ public int titlebarlayout = 3;
+ public int borderleftlayout = 3;
+ public int borderrightlayout = 3;
+ public int borderbottomlayout = 3;
+ public int closebtnlayout = 3;
+ public int rollbtnlayout = 3;
+ public int minbtnlayout = 3;
+ public int rightcornerlayout = 3;
+ public int leftcornerlayout = 3;
+ // Late entry: need to fix window code to include this
+ public int bottomleftcornerlayout = 3;
+ public int bottomrightcornerlayout = 3;
+ public Color bottomleftcornercolour = Color.Gray;
+
+ public Color bottomrightcornercolour = Color.Gray;
+
+ public bool enablebordercorners = false;
+ // settings
+ public Size closebtnsize = new Size(22, 22);
+ public Size rollbtnsize = new Size(22, 22);
+ public Size minbtnsize = new Size(22, 22);
+ public int titlebarheight = 30;
+ public int titlebariconsize = 16;
+ public int closebtnfromtop = 5;
+ public int closebtnfromside = 2;
+ public int rollbtnfromtop = 5;
+ public int rollbtnfromside = 26;
+ public int minbtnfromtop = 5;
+ public int minbtnfromside = 52;
+ public int borderwidth = 2;
+ public bool enablecorners = false;
+ public int titlebarcornerwidth = 5;
+ public int titleiconfromside = 4;
+ public int titleiconfromtop = 4;
+ //colours
+ public Color titlebarcolour = Color.Gray;
+ public Color borderleftcolour = Color.Gray;
+ public Color borderrightcolour = Color.Gray;
+ public Color borderbottomcolour = Color.Gray;
+ public Color closebtncolour = Color.Black;
+ public Color closebtnhovercolour = Color.Black;
+ public Color closebtnclickcolour = Color.Black;
+ public Color rollbtncolour = Color.Black;
+ public Color rollbtnhovercolour = Color.Black;
+ public Color rollbtnclickcolour = Color.Black;
+ public Color minbtncolour = Color.Black;
+ public Color minbtnhovercolour = Color.Black;
+ public Color minbtnclickcolour = Color.Black;
+ public Color rightcornercolour = Color.Gray;
+ public Color leftcornercolour = Color.Gray;
+ // Text
+ public string titletextfontfamily = "Microsoft Sans Serif";
+ public int titletextfontsize = 10;
+ public FontStyle titletextfontstyle = FontStyle.Bold;
+ public string titletextpos = "Left";
+ public int titletextfromtop = 3;
+ public int titletextfromside = 24;
+
+ public Color titletextcolour = Color.White;
+ //DESKTOP
+ public Color desktoppanelcolour = Color.Gray;
+ public Color desktopbackgroundcolour = Color.Black;
+ public int desktoppanelheight = 24;
+ public string desktoppanelposition = "Top";
+ public Color clocktextcolour = Color.Black;
+ public Color clockbackgroundcolor = Color.Gray;
+ public int panelclocktexttop = 3;
+ public int panelclocktextsize = 10;
+ public string panelclocktextfont = "Byington";
+ public FontStyle panelclocktextstyle = FontStyle.Bold;
+ public Color applauncherbuttoncolour = Color.Gray;
+ public Color applauncherbuttonclickedcolour = Color.Gray;
+ public Color applauncherbackgroundcolour = Color.Gray;
+ public Color applaunchermouseovercolour = Color.Gray;
+ public Color applicationsbuttontextcolour = Color.Black;
+ public int applicationbuttonheight = 24;
+ public int applicationbuttontextsize = 10;
+ public string applicationbuttontextfont = "Byington";
+ public FontStyle applicationbuttontextstyle = FontStyle.Bold;
+ public string applicationlaunchername = "Applications";
+ public string titletextposition = "Left";
+ public int applaunchermenuholderwidth = 100;
+ public int panelbuttonicontop = 3;
+ public int panelbuttoniconside = 4;
+ public int panelbuttoniconsize = 16;
+ public int panelbuttonheight = 20;
+ public int panelbuttonwidth = 185;
+ public Color panelbuttoncolour = Color.Black;
+ public Color panelbuttontextcolour = Color.White;
+ public int panelbuttontextsize = 10;
+ public string panelbuttontextfont = "Byington";
+ public FontStyle panelbuttontextstyle = FontStyle.Regular;
+ public int panelbuttontextside = 16;
+ public int panelbuttontexttop = 2;
+ public int panelbuttongap = 4;
+ public int panelbuttonfromtop = 2;
+
+ public int panelbuttoninitialgap = 8;
+ public int launcheritemsize = 10;
+ public string launcheritemfont = "Byington";
+ public FontStyle launcheritemstyle = FontStyle.Regular;
+
+ public Color launcheritemcolour = Color.Black;
+ // Images
+ public int desktoppanellayout = 3;
+ public int desktopbackgroundlayout = 3;
+ public int panelclocklayout = 3;
+ public int applauncherlayout = 3;
+
+ public int panelbuttonlayout = 3;
+
+ //Locations...
+
+ public int userTextboxX = 171;
+ public int userTextBoxY = 202;
+ public int passTextBoxX = 171;
+ public int passTextBoxY = 243;
+ public int loginbtnX = 268;
+ public int loginbtnY = 286;
+ public int shutdownbtnX = 1755;
+
+ public int shutdownbtnY = 979;
+
+ /* IMAGE PATHS
+ These tell ShiftOS where skin images are.
+ */
+
+ public string applauncherclickpath = null;
+ public string panelbuttonpath = null;
+ public string applaunchermouseoverpath = null;
+ public string applauncherpath = null;
+ public string panelclockpath = null;
+ public string desktopbackgroundpath = null;
+ public string desktoppanelpath = null;
+ public string minbtnhoverpath = null;
+ public string minbtnclickpath = null;
+ public string rightcornerpath = null;
+ public string titlebarpath = null;
+ public string borderrightpath = null;
+ public string borderleftpath = null;
+ public string borderbottompath = null;
+ public string closebtnpath = null;
+ public string closebtnhoverpath = null;
+ public string closebtnclickpath = null;
+ public string rollbtnpath = null;
+ public string rollbtnhoverpath = null;
+ public string rollbtnclickpath = null;
+ public string minbtnpath = null;
+ public string leftcornerpath = null;
+ public string bottomleftcornerpath = null;
+ public string bottomrightcornerpath = null;
+
+ //Menu Renderer Colors
+ public Color Menu_ButtonSelectedHighlight = Color.Black;
+ public Color Menu_ButtonSelectedHighlightBorder = Color.Black;
+ public Color Menu_ButtonPressedHighlight = Color.Black;
+ public Color Menu_ButtonPressedHighlightBorder = Color.Black;
+ public Color Menu_ButtonCheckedHighlight = Color.White;
+ public Color Menu_ButtonCheckedHighlightBorder = Color.White;
+ public Color Menu_ButtonPressedBorder = Color.Black;
+ public Color Menu_ButtonSelectedBorder = Color.Black;
+ public Color Menu_ButtonCheckedGradientBegin = Color.White;
+ public Color Menu_ButtonCheckedGradientMiddle = Color.White;
+ public Color Menu_ButtonCheckedGradientEnd = Color.White;
+ public Color Menu_ButtonSelectedGradientBegin = Color.Black;
+ public Color Menu_ButtonSelectedGradientMiddle = Color.Black;
+ public Color Menu_ButtonSelectedGradientEnd = Color.Black;
+ public Color Menu_ButtonPressedGradientBegin = Color.Black;
+ public Color Menu_ButtonPressedGradientMiddle = Color.Black;
+ public Color Menu_ButtonPressedGradientEnd = Color.Black;
+ public Color Menu_CheckBackground = Color.White;
+ public Color Menu_CheckSelectedBackground = Color.Gray;
+ public Color Menu_CheckPressedBackground = Color.White;
+ public Color Menu_ImageMarginGradientBegin = Color.Gray;
+ public Color Menu_ImageMarginGradientMiddle = Color.Gray;
+ public Color Menu_ImageMarginGradientEnd = Color.Gray;
+ public Color Menu_MenuStripGradientBegin = Color.Gray;
+ public Color Menu_MenuStripGradientEnd = Color.Gray;
+ public Color Menu_MenuItemSelected = Color.Black;
+ public Color Menu_MenuItemBorder = Color.Gray;
+ public Color Menu_MenuBorder = Color.Gray;
+ public Color Menu_MenuItemSelectedGradientBegin = Color.Black;
+ public Color Menu_MenuItemSelectedGradientEnd = Color.Black;
+ public Color Menu_MenuItemPressedGradientBegin = Color.Black;
+ public Color Menu_MenuItemPressedGradientMiddle = Color.Black;
+ public Color Menu_MenuItemPressedGradientEnd = Color.Black;
+ public Color Menu_RaftingContainerGradientBegin = Color.Black;
+ public Color Menu_RaftingContainerGradientEnd = Color.Gray;
+ public Color Menu_SeparatorDark = Color.Black;
+ public Color Menu_SeparatorLight = Color.Black;
+ public Color Menu_StatusStripGradientBegin = Color.Gray;
+ public Color Menu_StatusStripGradientEnd = Color.Gray;
+ public Color Menu_ToolStripBorder = Color.Gray;
+ public Color Menu_ToolStripDropDownBackground = Color.Gray;
+ public Color Menu_ToolStripGradientBegin = Color.Gray;
+ public Color Menu_ToolStripGradientMiddle = Color.Gray;
+ public Color Menu_ToolStripGradientEnd = Color.Gray;
+ public Color Menu_ToolStripContentPanelGradientBegin = Color.Gray;
+ public Color Menu_ToolStripContentPanelGradientEnd = Color.Gray;
+ public Color Menu_ToolStripPanelGradientBegin = Color.Gray;
+ public Color Menu_ToolStripPanelGradientEnd = Color.Gray;
+ public Color Menu_TextColor = Color.White;
+
+ //New
+ public Color TerminalTextColor = Color.White;
+ public Color TerminalBackColor = Color.Black;
+ public string TerminalFontStyle = OSInfo.GetMonospaceFont();
+
+ //Name Packs
+ public string EmbeddedNamePackPath = "names.npk";
+
+ //Desktop Icons
+ public Color IconTextColor = Color.White;
+
+ //Window Animation
+ public int WindowFadeTime = 1; //Interval between each decrease in opacity
+ public decimal WindowFadeSpeed = Convert.ToDecimal(0.1); //Speed of opacity decrease
+ public WindowAnimationStyle WindowCloseAnimation = WindowAnimationStyle.Fade; //Animation style for close
+ public WindowAnimationStyle WindowOpenAnimation = WindowAnimationStyle.Fade; //Animation style for open
+ public WindowDragEffect DragAnimation = WindowDragEffect.Fade;
+ public double DragFadeLevel = 0.5;
+ public double DragFadeSpeed = 0.1;
+ public int DragFadeInterval = 1;
+
+ //Shake
+ public int ShakeSpeed = 10;
+ public int ShakeMaxOffset = 250;
+ public int ShakeMinOffset = 0;
+
+ //Desktop Panel
+ public List<DesktopWidget> Widgets = new List<DesktopWidget>();
+ public List<DesktopPanel> DesktopPanels = new List<DesktopPanel>();
+ }
+
+ public class DesktopWidget
+ {
+ public string Name { get; set; }
+ public string Panel { get; set; } //either top or bottom
+ public string Icon { get; set; }
+ public int Width { get; set; }
+ public int XLocation { get; set; }
+ public WidgetType Type { get; set; }
+ public string Lua { get; set; }
+ }
+
+ public class ShiftOSIcon
+ {
+ /// <summary>
+ /// Creates a new icon
+ /// </summary>
+ /// <param name="id">New ID</param>
+ public ShiftOSIcon(string id)
+ {
+ SmallPath = id + "_small";
+ LargePath = id + "_large";
+ }
+
+ public string SmallPath { get; set; }
+ public string LargePath { get; set; }
+ }
+
+ public class DesktopPanel
+ {
+ public string Position = "Top";
+ public int Height = 24;
+ public Color BackgroundColor = Color.Gray;
+ }
+
+ public class PanelWidget
+ {
+ public string type = "applauncher";
+ }
+
+ public class NamePack
+ {
+ public string TerminalName = "Terminal";
+ public string ArtpadName = "Artpad";
+ public string TextpadName = "TextPad";
+ public string ShiftoriumName = "Shiftorium";
+ public string KnowledgeInputName = "Knowledge Input";
+ public string PongName = "Pong";
+ public string ShifterName = "Shifter";
+ public string FileSkimmerName = "File Skimmer";
+ public string SkinLoaderName = "Skin Loader";
+ public string ShutdownName = "Shut Down";
+ public string UnityName = "Unity Mode";
+ public string NameChangerName = "Name Changer";
+ }
+
+ public class IconSet
+ {
+ public Image Terminal = ShiftOS.Properties.Resources.iconTerminal;
+ public Image Artpad = ShiftOS.Properties.Resources.iconArtpad;
+ public Image Textpad = ShiftOS.Properties.Resources.iconTextPad;
+ public Image Shiftorium = ShiftOS.Properties.Resources.iconShiftorium;
+ public Image KnowledgeInput = ShiftOS.Properties.Resources.iconKnowledgeInput;
+ public Image Pong = ShiftOS.Properties.Resources.iconPong;
+ public Image Shifter = ShiftOS.Properties.Resources.iconShifter;
+ public Image FileSkimmer = ShiftOS.Properties.Resources.iconFileSkimmer;
+ public Image SkinLoader = ShiftOS.Properties.Resources.iconSkinLoader;
+ public Image Shutdown = ShiftOS.Properties.Resources.iconshutdown;
+ public Image Unity = ShiftOS.Properties.Resources.iconunitytoggle;
+ public Image NameChanger = ShiftOS.Properties.Resources.iconNameChanger;
+
+ }
+
+ public class IconPack
+ {
+ public string Terminal = "Terminal";
+ public string Artpad = "Artpad";
+ public string Textpad = "TextPad";
+ public string Shiftorium = "Shiftorium";
+ public string KnowledgeInput = "Knowledge Input";
+ public string Pong = "Pong";
+ public string Shifter = "Shifter";
+ public string FileSkimmer = "File Skimmer";
+ public string SkinLoader = "Skin Loader";
+ public string Shutdown = "Shut Down";
+ public string Unity = "Unity Mode";
+ public string NameChanger = "Name Changer";
+
+ }
+
+ public class Images
+ {
+ public Image applauncherclick = null;
+ public Image panelbutton = null;
+ public Image applaunchermouseover = null;
+ public Image applauncher = null;
+ public Image panelclock = null;
+ public Image desktopbackground = null;
+ public Image desktoppanel = null;
+ public Image minbtnhover = null;
+ public Image minbtnclick = null;
+ public Image rightcorner = null;
+ public Image titlebar = null;
+ public Image borderright = null;
+ public Image borderleft = null;
+ public Image borderbottom = null;
+ public Image closebtn = null;
+ public Image closebtnhover = null;
+ public Image closebtnclick = null;
+ public Image rollbtn = null;
+ public Image rollbtnhover = null;
+ public Image rollbtnclick = null;
+ public Image minbtn = null;
+ public Image leftcorner = null;
+ public Image bottomleftcorner = null;
+ public Image bottomrightcorner = null;
+ }
+ /// <summary>
+ /// ShiftOS 'Sharp' Skin Engine - Completely reworked ShiftOS skin system written in C# by Michael VanOverbeek
+ /// </summary>
+ public class Utilities {
+ public static Dictionary<string, Image> IconRegistry = new Dictionary<string, Image>();
+ public static Color globaltransparencycolour = Color.FromArgb(1, 0, 1);
+ public static NamePack LoadedNames = null;
+ public static Skin loadedSkin = null;
+ public static Images loadedskin_images = null;
+
+ /// <summary>
+ /// Load a bitmap from the skin.
+ /// </summary>
+ /// <param name="fileName">Bitmap name.</param>
+ /// <returns>The bitmap</returns>
+ public static Bitmap GetImage(string fileName)
+ {
+ Bitmap ret;
+ if (File.Exists(Paths.LoadedSkin + fileName))
+ {
+ using (Image img = Image.FromFile(Paths.LoadedSkin + fileName))
+ {
+ ret = new Bitmap(img);
+ }
+ } else
+ {
+ ret = null;
+ }
+ return ret;
+ }
+
+ /// <summary>
+ /// Load the name pack embedded in the skin.
+ /// </summary>
+ public static void LoadEmbeddedNamePack()
+ {
+ if(loadedSkin != null)
+ {
+ if(loadedSkin.EmbeddedNamePackPath != null)
+ {
+ if(File.Exists(Paths.LoadedSkin + loadedSkin.EmbeddedNamePackPath))
+ {
+ string json = File.ReadAllText(Paths.LoadedSkin + loadedSkin.EmbeddedNamePackPath);
+ LoadedNames = JsonConvert.DeserializeObject<NamePack>(json);
+ try {
+ //bug-check
+ if (LoadedNames.NameChangerName == null)
+ {
+ LoadedNames.NameChangerName = "Name Changer";
+ }
+ }
+ catch(Exception ex)
+ {
+ LoadedNames = new NamePack();
+ }
+ }
+ else
+ {
+ LoadedNames = new NamePack();
+ }
+ }
+ else
+ {
+ LoadedNames = new NamePack();
+ }
+ }
+ else
+ {
+ LoadedNames = new NamePack();
+ }
+ }
+
+ /// <summary>
+ /// Randomize some skin variables. Used for a virus.
+ /// </summary>
+ public static void Randomize()
+ {
+ Random rnd = new Random();
+ if (rnd.Next(0, 5000) == 25)
+ {
+ loadedSkin.desktoppanelheight = rnd.Next(2, 200);
+ switch (rnd.Next(0, 10))
+ {
+ case 1:
+ case 3:
+ case 5:
+ case 7:
+ case 9:
+ loadedSkin.desktoppanelposition = "Top";
+ break;
+ default:
+ loadedSkin.desktoppanelposition = "Bottom";
+ break;
+ }
+ API.CurrentSession.SetupDesktop();
+ API.UpdateWindows();
+ }
+ }
+
+ /// <summary>
+ /// Save the loaded name pack to the skin.
+ /// </summary>
+ public static void SaveEmbeddedNamePack()
+ {
+ if (loadedSkin != null)
+ {
+ if (loadedSkin.EmbeddedNamePackPath != null)
+ {
+ if (File.Exists(Paths.LoadedSkin + loadedSkin.EmbeddedNamePackPath))
+ {
+ string json = JsonConvert.SerializeObject(LoadedNames);
+ File.WriteAllText(Paths.LoadedSkin + loadedSkin.EmbeddedNamePackPath, json);
+ }
+ else
+ {
+ loadedSkin.EmbeddedNamePackPath = "names.npk";
+ string json = JsonConvert.SerializeObject(LoadedNames);
+ File.WriteAllText(Paths.LoadedSkin + loadedSkin.EmbeddedNamePackPath, json);
+ }
+ }
+
+ }
+ }
+
+ /// <summary>
+ /// Save a bitmap to the skin.
+ /// </summary>
+ /// <param name="img">Bitmap to save</param>
+ /// <param name="Name">New filename</param>
+ private static void saveimage(Image img, string Name)
+ {
+ string fullPath = Paths.LoadedSkin + Name;
+ if(File.Exists(fullPath))
+ {
+ File.Delete(fullPath);
+ }
+ if (img != null)
+ {
+ img.Save(fullPath, System.Drawing.Imaging.ImageFormat.Bmp);
+ }
+ }
+
+ /// <summary>
+ /// Load the skin.
+ /// </summary>
+ public static void loadskin()
+ {
+ if(Directory.Exists(Paths.LoadedSkin))
+ {
+ try
+ {
+ string rawData = File.ReadAllText(Paths.LoadedSkin + "data.json");
+ loadedSkin = JsonConvert.DeserializeObject<Skin>(rawData);
+ if (File.Exists(Paths.LoadedSkin + "panels.json"))
+ {
+ string panels = File.ReadAllText(Paths.LoadedSkin + "panels.json");
+ loadedSkin.DesktopPanels = JsonConvert.DeserializeObject<List<DesktopPanel>>(panels);
+ }
+ loadimages();
+ LoadEmbeddedNamePack();
+ }
+ catch (Exception ex)
+ {
+ //No skin to load.
+ loadedSkin = new Skin();
+ loadedskin_images = new Images();
+ saveskin();
+
+ }
+ } else
+ {
+ loadedSkin = new Skin();
+ loadedskin_images = new Images();
+ saveskin();
+ }
+ }
+
+ /// <summary>
+ /// Load skin from .skn file
+ /// </summary>
+ /// <param name="filepath">File to load.</param>
+ public static void loadsknfile(string filepath)
+ {
+ try
+ {
+ //Extract the .SKN
+ API.ExtractFile(filepath, Paths.LoadedSkin, true);
+ //OK, so the skin's been extracted.
+ //Now, let's load in the skin data.
+ string rawData = File.ReadAllText(Paths.LoadedSkin + "data.json");
+ loadedSkin = JsonConvert.DeserializeObject<Skin>(rawData);
+ //Now, images.
+ loadimages();
+ } catch(Exception ex)
+ {
+ API.CreateInfoboxSession("Error loading skin", "An error has occurred while loading the skin file. This could be because the skin file is no longer supported by this version of ShiftOS.", infobox.InfoboxMode.Info);
+ }
+ }
+
+ /// <summary>
+ /// Load images from the skin.
+ /// </summary>
+ public static void loadimages()
+ {
+ loadedskin_images = new Images();
+ loadedskin_images.applauncherclick = GetImage(loadedSkin.applauncherclickpath);
+ loadedskin_images.panelbutton = GetImage(loadedSkin.panelbuttonpath);
+ loadedskin_images.applaunchermouseover = GetImage(loadedSkin.applaunchermouseoverpath);
+ loadedskin_images.applauncher = GetImage(loadedSkin.applauncherpath);
+ loadedskin_images.panelclock = GetImage(loadedSkin.panelclockpath);
+ loadedskin_images.desktopbackground = GetImage(loadedSkin.desktopbackgroundpath);
+ loadedskin_images.desktoppanel = GetImage(loadedSkin.desktoppanelpath);
+ loadedskin_images.minbtnhover = GetImage(loadedSkin.minbtnhoverpath);
+ loadedskin_images.minbtnclick = GetImage(loadedSkin.minbtnclickpath);
+ loadedskin_images.rightcorner = GetImage(loadedSkin.rightcornerpath);
+ loadedskin_images.titlebar = GetImage(loadedSkin.titlebarpath);
+ loadedskin_images.borderright = GetImage(loadedSkin.borderrightpath);
+ loadedskin_images.borderleft = GetImage(loadedSkin.borderleftpath);
+ loadedskin_images.borderbottom = GetImage(loadedSkin.borderbottompath);
+ loadedskin_images.closebtn = GetImage(loadedSkin.closebtnpath);
+ loadedskin_images.closebtnhover = GetImage(loadedSkin.closebtnhoverpath);
+ loadedskin_images.closebtnclick = GetImage(loadedSkin.closebtnclickpath);
+ loadedskin_images.rollbtn = GetImage(loadedSkin.rollbtnpath);
+ loadedskin_images.rollbtnhover = GetImage(loadedSkin.rollbtnhoverpath);
+ loadedskin_images.rollbtnclick = GetImage(loadedSkin.rollbtnclickpath);
+ loadedskin_images.minbtn = GetImage(loadedSkin.minbtnpath);
+ loadedskin_images.leftcorner = GetImage(loadedSkin.leftcornerpath);
+ loadedskin_images.bottomleftcorner = GetImage(loadedSkin.bottomleftcornerpath);
+ loadedskin_images.bottomrightcorner = GetImage(loadedSkin.bottomrightcornerpath);
+ try
+ {
+ IconRegistry = new Dictionary<string, Image>();
+ foreach (var f in Directory.GetFiles(Paths.Icons))
+ {
+ var finf = new FileInfo(f);
+ byte[] fBytes = File.ReadAllBytes(finf.FullName);
+ MemoryStream fStream = new MemoryStream(fBytes);
+ IconRegistry.Add(finf.Name, Image.FromStream(fStream));
+ fStream.Close();
+ }
+ }
+ catch(Exception ex)
+ {
+ GenDefaultIconPack();
+ }
+ }
+
+ /// <summary>
+ /// Generates the default icon pack if none exists.
+ /// </summary>
+ public static void GenDefaultIconPack()
+ {
+ IconRegistry = new Dictionary<string, Image>();
+ if(Directory.Exists(Paths.Icons))
+ {
+ Directory.Delete(Paths.Icons, true);
+ }
+ Directory.CreateDirectory(Paths.Icons);
+ SaveIcon(ShiftOS.Properties.Resources.iconTerminal, "Terminal");
+ SaveIcon(ShiftOS.Properties.Resources.iconShiftorium, "Shiftorium");
+ SaveIcon(ShiftOS.Properties.Resources.iconShifter, "Shifter");
+ SaveIcon(ShiftOS.Properties.Resources.iconNameChanger, "NameChanger");
+ SaveIcon(ShiftOS.Properties.Resources.iconTextPad, "TextPad");
+ SaveIcon(ShiftOS.Properties.Resources.iconFileSkimmer, "FileSkimmer");
+ SaveIcon(ShiftOS.Properties.Resources.iconArtpad, "Artpad");
+ SaveIcon(ShiftOS.Properties.Resources.iconunitytoggle, "Unity");
+ SaveIcon(ShiftOS.Properties.Resources.iconshutdown, "Shutdown");
+ SaveIcon(ShiftOS.Properties.Resources.iconInfoBox_fw, "Infobox");
+ SaveIcon(ShiftOS.Properties.Resources.iconKnowledgeInput, "KI");
+ SaveIcon(ShiftOS.Properties.Resources.iconPong, "Pong");
+ SaveIcon(ShiftOS.Properties.Resources.iconSkinLoader, "SkinLoader");
+ SaveIcon(ShiftOS.Properties.Resources.iconIconManager, "IconManager");
+ SaveIcon(ShiftOS.Properties.Resources.fileicondirectory, "Folder");
+ SaveIcon(ShiftOS.Properties.Resources.fileicondoc, "TextFile");
+ SaveIcon(ShiftOS.Properties.Resources.fileiconnone, "UnrecognizedFile");
+ SaveIcon(ShiftOS.Properties.Resources.fileiconsaa, "SAAFile");
+ SaveIcon(ShiftOS.Properties.Resources.fileiconsetup, "SetupPackage");
+ SaveIcon(ShiftOS.Properties.Resources.skinfile, "SkinFile");
+ IconRegistry = new Dictionary<string, Image>();
+ foreach (var f in Directory.GetFiles(Paths.Icons))
+ {
+ var finf = new FileInfo(f);
+ byte[] fBytes = File.ReadAllBytes(finf.FullName);
+ MemoryStream fStream = new MemoryStream(fBytes);
+ IconRegistry.Add(finf.Name, Image.FromStream(fStream));
+ fStream.Close();
+ }
+ }
+
+ /// <summary>
+ /// Saves the icon to the registry.
+ /// </summary>
+ /// <param name="img">Icon to save</param>
+ /// <param name="title">Icon title</param>
+ public static void SaveIcon(Image img, string title)
+ {
+ img.Save(Paths.Icons + title, ImageFormat.Png);
+
+ }
+
+ /// <summary>
+ /// Saves all skin images
+ /// </summary>
+ public static void saveimages()
+ {
+ //Set image paths.
+ loadedSkin.applauncherclickpath = "applauncherclick";
+ loadedSkin.panelbuttonpath = "panelbutton";
+ loadedSkin.applaunchermouseoverpath = "applaunchermouseover";
+ loadedSkin.applauncherpath = "applauncher";
+ loadedSkin.panelclockpath = "panelclock";
+ loadedSkin.desktopbackgroundpath = "desktopbackground";
+ loadedSkin.desktoppanelpath = "desktoppanel";
+ loadedSkin.minbtnhoverpath = "minbtnhover";
+ loadedSkin.minbtnclickpath = "minbtnclick";
+ loadedSkin.rightcornerpath = "rightcorner";
+ loadedSkin.titlebarpath = "titlebar";
+ loadedSkin.borderrightpath = "borderright";
+ loadedSkin.borderleftpath = "borderleft";
+ loadedSkin.borderbottompath = "borderbottom";
+ loadedSkin.closebtnpath = "closebtn";
+ loadedSkin.closebtnhoverpath = "closebtnhover";
+ loadedSkin.closebtnclickpath = "closebtnclick";
+ loadedSkin.rollbtnpath = "rollbtn";
+ loadedSkin.rollbtnhoverpath = "rollbtnhover";
+ loadedSkin.rollbtnclickpath = "rollbtnclick";
+ loadedSkin.minbtnpath = "minbtn";
+ loadedSkin.leftcornerpath = "leftcornerpath";
+ loadedSkin.bottomleftcornerpath = "bottomleftcorner";
+ loadedSkin.bottomrightcornerpath = "bottomrightcorner";
+ //Save to new paths.
+ saveimage(loadedskin_images.applauncherclick, loadedSkin.applauncherclickpath);
+ saveimage(loadedskin_images.panelbutton, loadedSkin.panelbuttonpath);
+ saveimage(loadedskin_images.applaunchermouseover, loadedSkin.applaunchermouseoverpath);
+ saveimage(loadedskin_images.applauncher, loadedSkin.applauncherpath);
+ saveimage(loadedskin_images.panelclock, loadedSkin.panelclockpath);
+ saveimage(loadedskin_images.desktopbackground, loadedSkin.desktopbackgroundpath);
+ saveimage(loadedskin_images.desktoppanel, loadedSkin.desktoppanelpath);
+ saveimage(loadedskin_images.minbtnhover, loadedSkin.minbtnhoverpath);
+ saveimage(loadedskin_images.minbtnclick, loadedSkin.minbtnclickpath);
+ saveimage(loadedskin_images.rightcorner, loadedSkin.rightcornerpath);
+ saveimage(loadedskin_images.titlebar, loadedSkin.titlebarpath);
+ saveimage(loadedskin_images.borderright, loadedSkin.borderrightpath);
+ saveimage(loadedskin_images.borderleft, loadedSkin.borderleftpath);
+ saveimage(loadedskin_images.borderbottom, loadedSkin.borderbottompath);
+ saveimage(loadedskin_images.closebtn, loadedSkin.closebtnpath);
+ saveimage(loadedskin_images.closebtnhover, loadedSkin.closebtnhoverpath);
+ saveimage(loadedskin_images.closebtnclick, loadedSkin.closebtnclickpath);
+ saveimage(loadedskin_images.rollbtn, loadedSkin.rollbtnpath);
+ saveimage(loadedskin_images.rollbtnhover, loadedSkin.rollbtnhoverpath);
+ saveimage(loadedskin_images.rollbtnclick, loadedSkin.rollbtnclickpath);
+ saveimage(loadedskin_images.minbtn, loadedSkin.minbtnpath);
+ saveimage(loadedskin_images.leftcorner, loadedSkin.leftcornerpath);
+ saveimage(loadedskin_images.bottomleftcorner, loadedSkin.bottomleftcornerpath);
+ saveimage(loadedskin_images.bottomrightcorner, loadedSkin.bottomrightcornerpath);
+ foreach(KeyValuePair<string, Image> kv in IconRegistry)
+ {
+ if(kv.Value != null)
+ {
+ SaveIcon(kv.Value, kv.Key);
+ }
+ }
+
+ }
+
+ /// <summary>
+ /// Saves the skin to a new .skn file
+ /// </summary>
+ /// <param name="filePath">Target .skn file</param>
+ public static void saveskintofile(string filePath)
+ {
+ saveskin();
+ ZipFile.CreateFromDirectory(Paths.LoadedSkin, filePath);
+ }
+
+ /// <summary>
+ /// Saves the skin.
+ /// </summary>
+ public static void saveskin()
+ {
+ saveimages();
+ string rawjson = JsonConvert.SerializeObject(loadedSkin);
+ File.WriteAllText(Paths.LoadedSkin + "data.json", rawjson);
+ string panels = JsonConvert.SerializeObject(loadedSkin.DesktopPanels);
+ File.WriteAllText(Paths.LoadedSkin + "panels.json", panels);
+ SaveEmbeddedNamePack();
+ }
+ }
+
+ public class MyToolStripRenderer : ToolStripProfessionalRenderer
+ {
+ public MyToolStripRenderer() : base(new ShiftOSColorTable())
+ {
+
+ }
+
+ public MyToolStripRenderer(ProfessionalColorTable table) : base(table)
+ {
+
+ }
+
+ protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
+ {
+ if (e.Item.Text == API.CurrentSkin.applicationlaunchername)
+ {
+ e.TextColor = API.CurrentSkin.applicationsbuttontextcolour;
+ }
+ else {
+ e.TextColor = API.CurrentSkin.Menu_TextColor;
+ }
+ base.OnRenderItemText(e);
+ }
+
+ protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
+ {
+ //base.OnRenderToolStripBorder(e);
+ }
+
+
+ }
+} \ No newline at end of file