ShiftOS-C-/source/WindowsFormsApplication1/SkinEngine/skins.cs
MichaelTheShifter 84f689b91a Sort source code into folders.
It feels better to know what's responsible for what... Plus I removed
some un-needed C# stuff.
2016-06-25 08:10:03 -04:00

840 lines
No EOL
35 KiB
C#

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 Image BackgroundImage = null;
public string ImagePath = null;
}
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
{
LoadedNames = new NamePack();
}
}
else
{
LoadedNames = new NamePack();
}
}
else
{
LoadedNames = new NamePack();
}
}
else
{
LoadedNames = new NamePack();
}
}
/// <summary>
/// Loads background images for all desktop panels
/// </summary>
public static void LoadPanels()
{
foreach(var pnl in loadedSkin.DesktopPanels)
{
string dpath = Paths.LoadedSkin + "panels" + OSInfo.DirectorySeparator + pnl.ImagePath;
if (File.Exists(dpath))
{
pnl.BackgroundImage = Image.FromFile(dpath);
}
}
}
/// <summary>
/// Saves background images of panels
/// </summary>
public static void SavePanels()
{
string dir = Paths.LoadedSkin + "panels";
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
foreach (var pnl in loadedSkin.DesktopPanels)
{
if (pnl.BackgroundImage != null)
{
try
{
pnl.ImagePath = pnl.Position + loadedSkin.DesktopPanels.IndexOf(pnl).ToString();
string dpath = Paths.LoadedSkin + "panels" + OSInfo.DirectorySeparator + pnl.ImagePath;
pnl.BackgroundImage.Save(dpath);
pnl.BackgroundImage = null;
}
catch
{
pnl.ImagePath = null;
pnl.BackgroundImage = null;
}
}
}
}
/// <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);
LoadPanels();
}
loadimages();
LoadEmbeddedNamePack();
}
catch
{
//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
loadedSkin = new Skin();
loadedskin_images = new Images();
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
{
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
{
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);
SavePanels();
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);
}
}
}