aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.Modding.VB.LegacySkinConverter/Module1.vb
blob: 957658ed529a7d591fedd3b44b35a51b7ee3c238 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
Imports ShiftOS.Engine
Imports ShiftOS.Objects
Imports ShiftOS.Objects.ShiftFS
Imports System.IO
Imports System.IO.Compression
Imports System.Collections.Generic
Imports System.Drawing

Module Module1

    Sub Main()
        ShiftOS.WinForms.Program.Main()
    End Sub

End Module

<ShiftOS.Engine.Namespace("skinning")>
Public Class SkinConverterCommands


    <Command("convert", description:="Converts a specified legacy Skin File to a modern one usable in Skin Loader.")>
    <RequiresArgument("in")>
    <RequiresArgument("out")>
    <RequiresUpgrade("skinning")>
    Public Shared Function Convert(args As Dictionary(Of String, Object))
        Dim input = args("in").ToString()
        Dim output = args("out").ToString()

        Dim bytes As Byte() = Utils.ReadAllBytes(input)
        System.IO.File.WriteAllBytes("temp.skn", bytes)

        If System.IO.Directory.Exists("temp_skn") Then
            System.IO.Directory.Delete("temp_skn", True)
        End If
        Console.WriteLine("Cleaning environment...")
        System.IO.Directory.CreateDirectory("temp_skn")

        ZipFile.ExtractToDirectory("temp.skn", "temp_skn")
        Console.WriteLine("Extracted skin... loading it now.")
        loadimages()
        Dim skn = New Skin()

        'Get images.

        Console.Write("Processing images...")
        skn.DesktopBackgroundImage = SaveImageToBinary(desktopbackground)
        skn.DesktopPanelBackground = SaveImageToBinary(desktoppanel)
        skn.CloseButtonImage = SaveImageToBinary(closebtn)
        skn.MaximizeButtonImage = SaveImageToBinary(rollbtn)
        skn.MinimizeButtonImage = SaveImageToBinary(minbtn)
        skn.PanelButtonBG = SaveImageToBinary(panelbutton)
        skn.AppLauncherImage = SaveImageToBinary(applauncher)
        skn.TitleBarBackground = SaveImageToBinary(titlebar)
        skn.TitleLeftCornerWidth = titlebarcornerwidth
        skn.TitleRightCornerWidth = titlebarcornerwidth
        skn.ShowTitleCorners = True 'I don't know what the legacy version of this is.
        skn.TitleLeftBG = SaveImageToBinary(leftcorner)
        skn.TitleRightBG = SaveImageToBinary(rightcorner)
        skn.LeftBorderBG = SaveImageToBinary(borderleft)
        skn.RightBorderBG = SaveImageToBinary(borderright)
        skn.BottomBorderBG = SaveImageToBinary(borderbottom)
        skn.BottomLBorderBG = SaveImageToBinary(bottomleftcorner)
        skn.BottomRBorderBG = SaveImageToBinary(bottomrightcorner)

        Console.WriteLine(" ...done.")

        Console.Write("Converting desktop settings...")

        skn.AppLauncherText = Skins.applicationlaunchername
        skn.AppLauncherHolderSize = New Size(applaunchermenuholderwidth, desktoppanelheight)
        skn.AppLauncherFromLeft = New Point(0, 0)
        skn.DesktopPanelHeight = desktoppanelheight
        Select Case desktoppanelposition
            Case "Top"
                skn.DesktopPanelPosition = 0
            Case "Bottom"
                skn.DesktopPanelPosition = 1
        End Select
        skn.DesktopPanelColor = desktoppanelcolour
        skn.DesktopPanelClockBackgroundColor = clockbackgroundcolor
        skn.DesktopPanelClockColor = clocktextcolour
        skn.DesktopPanelClockFont = New Font(panelclocktextfont, panelclocktextsize, panelclocktextstyle)
        skn.PanelButtonColor = panelbuttoncolour
        skn.PanelButtonTextColor = panelbuttontextcolour
        skn.PanelButtonFont = New Font(panelbuttontextfont, panelbuttontextsize, panelbuttontextstyle)
        skn.PanelButtonHolderFromLeft = panelbuttoninitialgap
        skn.PanelButtonSize = New Size(panelbuttonwidth, panelbuttonheight)
        skn.PanelButtonFromLeft = New Point(panelbuttongap, panelbuttonfromtop)
        skn.DesktopPanelClockFromRight = New Point(0, 0)

        Console.WriteLine(" ...done")

        Utils.WriteAllText(output, skn.ToString())
        Infobox.Show("Skin converted!", "We have successfully converted your skin and saved it to " + output + ". Go ahead and load it!")
        Return True
    End Function


    Private Shared Function SaveImageToBinary(img As Image) As Byte()
        If img Is Nothing Then Return Nothing

        Using mStream As New MemoryStream
            img.Save(mStream, Imaging.ImageFormat.Png)
            Return mStream.ToArray()
        End Using
    End Function
End Class