public void btnidlebrowse_Click(object s, EventArgs a) { AppearanceManager.SetupDialog(new FileDialog(new[] { ".png", ".gif", ".jpg", ".bmp", ".pic" }, FileOpenerStyle.Open, new Action <string>((file) => { ImageAsBinary = Utils.ReadAllBytes(file); System.IO.File.WriteAllBytes("temp_bin.bmp", ImageAsBinary); Image = SkinEngine.ImageFromBinary(ImageAsBinary); Setup(); }))); }
public byte[] ProcessImage(byte[] original) { try { var img = SkinEngine.ImageFromBinary(original); var dithered = DitheringEngine.DitherImage(img); using (var mstr = new MemoryStream()) { dithered.Save(mstr, System.Drawing.Imaging.ImageFormat.Bmp); return(mstr.ToArray()); } } catch { return(original); } }
public Image GetImage(string id) { var type = typeof(ShiftOS.Engine.Skin); foreach (var field in type.GetFields(BindingFlags.Public | BindingFlags.Instance)) { foreach (var attrib in field.GetCustomAttributes(false)) { if (attrib is ImageAttribute) { var img = attrib as ImageAttribute; if (img.Name == id) { return(SkinEngine.ImageFromBinary((byte[])field.GetValue(LoadedSkin))); } } } } return(null); }
public Image GetImage(string img) { var type = typeof(Skin); foreach (var field in type.GetFields()) { foreach (var attr in field.GetCustomAttributes(false)) { if (attr is ImageAttribute) { var iattr = attr as ImageAttribute; if (iattr.Name == img) { byte[] image = (byte[])field.GetValue(LoadedSkin); return(SkinEngine.ImageFromBinary(image)); } } } } return(null); }
public void PopulateBody(string cat, string subcat) { flbody.Controls.Clear(); List <ShifterSetting> cats = new List <ShifterSetting>(); foreach (var c in this.settings) { if (c.SubCategory == subcat && c.Category == cat) { if (c.Field.FlagFullfilled(LoadedSkin)) { if (!cats.Contains(c)) { cats.Add(c); } } } } foreach (var c in cats) { var lbl = new Label(); int labelHeight = 0; lbl.AutoSize = true; lbl.Text = c.Name + ":"; flbody.Controls.Add(lbl); lbl.TextAlign = ContentAlignment.MiddleLeft; lbl.Show(); //Cool - label's in. if (c.Field.FieldType == typeof(Point)) { var width = new TextBox(); var height = new TextBox(); labelHeight = width.Height; //irony? width.Width = 30; height.Width = width.Width; width.Text = ((Point)c.Field.GetValue(this.LoadedSkin)).X.ToString(); height.Text = ((Point)c.Field.GetValue(this.LoadedSkin)).Y.ToString(); flbody.SetFlowBreak(height, true); ControlManager.SetupControl(width); ControlManager.SetupControl(height); flbody.Controls.Add(width); width.Show(); flbody.Controls.Add(height); height.Show(); EventHandler tc = (o, a) => { try { int x = Convert.ToInt32(width.Text); int y = Convert.ToInt32(height.Text); int oldx = ((Point)c.Field.GetValue(this.LoadedSkin)).X; int oldy = ((Point)c.Field.GetValue(this.LoadedSkin)).Y; if (x != oldx || y != oldy) { c.Field.SetValue(LoadedSkin, new Point(x, y)); CodepointValue += 200; } } catch { width.Text = ((Point)c.Field.GetValue(this.LoadedSkin)).X.ToString(); height.Text = ((Point)c.Field.GetValue(this.LoadedSkin)).Y.ToString(); } }; width.TextChanged += tc; height.TextChanged += tc; } else if (c.Field.FieldType == typeof(string)) { var str = new TextBox(); str.Width = 120; ControlManager.SetupControl(str); labelHeight = str.Height; str.Text = c.Field.GetValue(LoadedSkin).ToString(); flbody.SetFlowBreak(str, true); str.TextChanged += (o, a) => { c.Field.SetValue(LoadedSkin, str.Text); CodepointValue += 100; }; flbody.Controls.Add(str); str.Show(); } else if (c.Field.FieldType == typeof(byte[])) { //We'll assume that this is an image file. var color = new Button(); color.Width = 40; labelHeight = color.Height; //just so it's flat like the system. ControlManager.SetupControl(color); flbody.SetFlowBreak(color, true); color.BackgroundImage = SkinEngine.ImageFromBinary((byte[])c.Field.GetValue(this.LoadedSkin)); color.Click += (o, a) => { AppearanceManager.SetupDialog(new GraphicPicker(color.BackgroundImage, c.Name, GetLayout(c.Field.GetImageName()), new Action <byte[], Image, ImageLayout>((col, gdiImg, layout) => { c.Field.SetValue(LoadedSkin, col); color.BackgroundImage = SkinEngine.ImageFromBinary(col); color.BackgroundImageLayout = layout; LoadedSkin.SkinImageLayouts[c.Field.GetImageName()] = layout; CodepointValue += 700; }))); }; flbody.Controls.Add(color); color.Show(); } else if (c.Field.FieldType == typeof(Size)) { var width = new TextBox(); var height = new TextBox(); width.Width = 30; height.Width = width.Width; labelHeight = width.Height; flbody.SetFlowBreak(height, true); width.Text = ((Size)c.Field.GetValue(this.LoadedSkin)).Width.ToString(); height.Text = ((Size)c.Field.GetValue(this.LoadedSkin)).Height.ToString(); ControlManager.SetupControl(width); ControlManager.SetupControl(height); flbody.Controls.Add(width); width.Show(); flbody.Controls.Add(height); height.Show(); EventHandler tc = (o, a) => { try { int x = Convert.ToInt32(width.Text); int y = Convert.ToInt32(height.Text); int oldx = ((Size)c.Field.GetValue(this.LoadedSkin)).Width; int oldy = ((Size)c.Field.GetValue(this.LoadedSkin)).Height; if (x != oldx || y != oldy) { c.Field.SetValue(LoadedSkin, new Size(x, y)); CodepointValue += 200; } } catch { width.Text = ((Size)c.Field.GetValue(this.LoadedSkin)).Width.ToString(); height.Text = ((Size)c.Field.GetValue(this.LoadedSkin)).Height.ToString(); } }; width.TextChanged += tc; height.TextChanged += tc; } else if (c.Field.FieldType == typeof(bool)) { var check = new CheckBox(); check.Checked = ((bool)c.Field.GetValue(LoadedSkin)); labelHeight = check.Height; check.CheckedChanged += (o, a) => { c.Field.SetValue(LoadedSkin, check.Checked); CodepointValue += 50; }; flbody.SetFlowBreak(check, true); flbody.Controls.Add(check); check.Show(); } else if (c.Field.FieldType == typeof(Font)) { var name = new ComboBox(); var size = new TextBox(); var style = new ComboBox(); name.Width = 120; labelHeight = name.Height; size.Width = 40; style.Width = 80; flbody.SetFlowBreak(style, true); ControlManager.SetupControl(name); ControlManager.SetupControl(size); ControlManager.SetupControl(style); //populate the font name box foreach (var font in FontFamily.Families) { name.Items.Add(font.Name); } name.Text = ((Font)c.Field.GetValue(LoadedSkin)).Name; size.Text = ((Font)c.Field.GetValue(LoadedSkin)).Size.ToString(); //populate the style box foreach (var s in (FontStyle[])Enum.GetValues(typeof(FontStyle))) { style.Items.Add(s.ToString()); } style.Text = ((Font)c.Field.GetValue(LoadedSkin)).Style.ToString(); name.SelectedIndexChanged += (o, a) => { var en = (FontStyle[])Enum.GetValues(typeof(FontStyle)); var f = en[style.SelectedIndex]; c.Field.SetValue(LoadedSkin, new Font(name.Text, (float)Convert.ToInt32(size.Text), f)); CodepointValue += 100; }; style.SelectedIndexChanged += (o, a) => { var en = (FontStyle[])Enum.GetValues(typeof(FontStyle)); var f = en[style.SelectedIndex]; c.Field.SetValue(LoadedSkin, new Font(name.Text, (float)Convert.ToInt32(size.Text), f)); CodepointValue += 50; }; size.TextChanged += (o, a) => { try { var en = (FontStyle[])Enum.GetValues(typeof(FontStyle)); var f = en[style.SelectedIndex]; c.Field.SetValue(LoadedSkin, new Font(name.Text, (float)Convert.ToInt32(size.Text), f)); } catch { size.Text = ((Font)c.Field.GetValue(LoadedSkin)).Size.ToString(); } CodepointValue += 50; }; flbody.Controls.Add(name); flbody.Controls.Add(size); flbody.Controls.Add(style); name.Show(); size.Show(); style.Show(); } else if (c.Field.FieldType == typeof(Color)) { var color = new Button(); color.Width = 40; labelHeight = color.Height; //just so it's flat like the system. ControlManager.SetupControl(color); color.BackColor = ((Color)c.Field.GetValue(LoadedSkin)); color.BackColorChanged += (o, a) => { c.Field.SetValue(LoadedSkin, color.BackColor); }; color.Click += (o, a) => { AppearanceManager.SetupDialog(new ColorPicker(color.BackColor, c.Name, new Action <Color>((col) => { color.BackColor = col; CodepointValue += 300; }))); }; flbody.SetFlowBreak(color, true); flbody.Controls.Add(color); color.Show(); } else if (c.Field.FieldType == typeof(int)) { if (c.Field.HasShifterEnumMask()) { var name = new ComboBox(); name.Width = 120; ControlManager.SetupControl(name); string[] items = c.Field.GetShifterEnumMask(); foreach (var item in items) { name.Items.Add(item); } name.SelectedIndex = (int)c.Field.GetValue(LoadedSkin); name.SelectedIndexChanged += (o, a) => { c.Field.SetValue(LoadedSkin, name.SelectedIndex); CodepointValue += 75; }; labelHeight = name.Height; flbody.Controls.Add(name); name.Show(); flbody.SetFlowBreak(name, true); } else { var width = new TextBox(); width.Width = 30; width.Text = ((int)c.Field.GetValue(this.LoadedSkin)).ToString(); ControlManager.SetupControl(width); labelHeight = width.Height; flbody.Controls.Add(width); width.Show(); EventHandler tc = (o, a) => { try { int x = Convert.ToInt32(width.Text); int oldx = ((int)c.Field.GetValue(this.LoadedSkin)); if (x != oldx) { c.Field.SetValue(LoadedSkin, x); CodepointValue += 75; } } catch { width.Text = ((int)c.Field.GetValue(this.LoadedSkin)).ToString(); } }; width.TextChanged += tc; flbody.SetFlowBreak(width, true); } } lbl.AutoSize = false; lbl.Width = (int)this.CreateGraphics().MeasureString(lbl.Text, SkinEngine.LoadedSkin.MainFont).Width + 15; lbl.Height = labelHeight; lbl.TextAlign = ContentAlignment.MiddleLeft; if (!string.IsNullOrWhiteSpace(c.Description)) { var desc = new Label(); flbody.SetFlowBreak(desc, true); desc.Text = c.Description; desc.AutoSize = true; flbody.Controls.Add(desc); desc.Show(); } } }