diff --git a/changelog.txt b/changelog.txt
new file mode 100644
index 0000000..d42c992
--- /dev/null
+++ b/changelog.txt
@@ -0,0 +1,27 @@
+================================================
+Version 0.9.1 - Alpha (May 8 - 2012)
+================================================
+[ADDED] a new object: image button
+[ADDED] a new skin: Orange
+[ADDED] a new column list row method: SetTextPos(x, y)
+[ADDED] a new column list row method: SetFont(font)
+[ADDED] a new column list row method: GetFont()
+[ADDED] a new column list row method: GetColorIndex()
+[ADDED] a new column list row method: SetTextColor(color)
+[ADDED] a new debug function: SkinSelector()
+[ADDED] license.txt
+[ADDED] changelog.txt
+
+[CHANGED] the name of the default skin to Blue
+[CHANGED] the drawing system of the image object, the image object will now draw it's image from it's skin function instead of it's internal drawing function
+[CHANGED] argument type for adding an image to a tab in tabs:AddTab(), the image argument can now be either an image object or a string containg the path to an image
+[CHANGED] the look of the debug overlay
+[CHANGED] some of the code within the default skins to improve performance (as suggested by kikito)
+
+[REMOVED] license.html
+[REMOVED] loveframes.graphics and graphics.lua
+
+================================================
+Version 0.9 - Alpha (May 5 - 2012)
+================================================
+Initial commit
\ No newline at end of file
diff --git a/debug.lua b/debug.lua
index ef817e5..5ece23f 100644
--- a/debug.lua
+++ b/debug.lua
@@ -36,125 +36,58 @@ function loveframes.debug.draw()
-- font for debug text
love.graphics.setFont(font)
- love.graphics.setLine(1, "smooth")
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Library Information", 6, 6)
+ love.graphics.setColor(0, 0, 0, 150)
+ love.graphics.rectangle("fill", 5, 5, 200, 250)
+
+ love.graphics.setColor(0, 0, 0, 50)
+ love.graphics.rectangle("fill", 10, 10, 190, 20)
love.graphics.setColor(255, 0, 0, 255)
- love.graphics.print("Library Information", 5, 5)
+ love.graphics.print("Library Information", 15, 15)
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.line(6, 21, 190, 21)
love.graphics.setColor(255, 255, 255, 255)
- love.graphics.line(5, 20, 190, 20)
-
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Author: " ..loveframes.info.author, 6, 26)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("Author: " ..loveframes.info.author, 5, 25)
-
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Version: " ..loveframes.info.version, 6, 36)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("Version: " ..loveframes.info.version, 5, 35)
-
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Stage: " ..loveframes.info.stage, 6, 46)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("Stage: " ..loveframes.info.stage, 5, 45)
-
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Base Directory: " ..loveframes.config["DIRECTORY"], 6, 56)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("Base Directory: " ..loveframes.config["DIRECTORY"], 5, 55)
+ love.graphics.print("Author: " ..loveframes.info.author, 15, 30)
+ love.graphics.print("Version: " ..loveframes.info.version, 15, 40)
+ love.graphics.print("Stage: " ..loveframes.info.stage, 15, 50)
+ love.graphics.print("Base Directory: " ..loveframes.config["DIRECTORY"], 15, 60)
-- object information box
-
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Object Information", 6, 81)
+ love.graphics.setColor(0, 0, 0, 50)
+ love.graphics.rectangle("fill", 10, 80, 190, 20)
love.graphics.setColor(255, 0, 0, 255)
- love.graphics.print("Object Information", 5, 80)
+ love.graphics.print("Object Information", 15, 85)
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.line(6, 96, 190, 96)
love.graphics.setColor(255, 255, 255, 255)
- love.graphics.line(5, 95, 190, 95)
if numcols > 0 then
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Type: " ..topcol.type, 6, 101)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("Type: " ..topcol.type, 5, 100)
+ love.graphics.print("Type: " ..topcol.type, 15, 100)
else
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Type: none", 6, 101)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("Type: none", 5, 100)
+ love.graphics.print("Type: none", 10, 100)
end
if topcol.children then
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("# of children: " .. #topcol.children, 6, 111)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("# of children: " .. #topcol.children, 5, 110)
+ love.graphics.print("# of children: " .. #topcol.children, 15, 110)
else
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("# of children: 0", 6, 111)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("# of children: 0", 5, 110)
+ love.graphics.print("# of children: 0", 15, 110)
end
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("X: " ..topcol.x, 6, 121)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("X: " ..topcol.x, 5, 120)
-
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Y: " ..topcol.y, 6, 131)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("Y: " ..topcol.y, 5, 130)
-
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Width: " ..topcol.width, 6, 141)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("Width: " ..topcol.width, 5, 140)
-
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Height: " ..topcol.height, 6, 151)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("Height: " ..topcol.height, 5, 150)
+ love.graphics.print("X: " ..topcol.x, 15, 120)
+ love.graphics.print("Y: " ..topcol.y, 15, 130)
+ love.graphics.print("Width: " ..topcol.width, 15, 140)
+ love.graphics.print("Height: " ..topcol.height, 15, 150)
-- Miscellaneous box
-
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Miscellaneous: ", 6, 191)
+ love.graphics.setColor(0, 0, 0, 50)
+ love.graphics.rectangle("fill", 10, 190, 190, 20)
love.graphics.setColor(255, 0, 0, 255)
- love.graphics.print("Miscellaneous", 5, 190)
+ love.graphics.print("Miscellaneous", 15, 195)
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.line(6, 206, 190, 206)
love.graphics.setColor(255, 255, 255, 255)
- love.graphics.line(5, 205, 190, 205)
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("LOVE Version: " ..love._version, 6, 211)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("LOVE Version: " ..love._version, 5, 210)
-
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("FPS: " ..love.timer.getFPS(), 6, 221)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("FPS: " ..love.timer.getFPS(), 5, 220)
-
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Delta Time: " ..love.timer.getDelta(), 6, 231)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("Delta Time: " ..love.timer.getDelta(), 5, 230)
-
- love.graphics.setColor(0, 0, 0, 255)
- love.graphics.print("Total Objects: " ..#objects, 6, 241)
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.print("Total Objects: " ..#objects, 5, 240)
+ love.graphics.print("LOVE Version: " ..love._version, 15, 210)
+ love.graphics.print("FPS: " ..love.timer.getFPS(), 15, 220)
+ love.graphics.print("Delta Time: " ..love.timer.getDelta(), 15, 230)
+ love.graphics.print("Total Objects: " ..#objects, 15, 240)
-- outline the object that the mouse is hovering over
love.graphics.setColor(255, 204, 51, 255)
@@ -170,8 +103,8 @@ function loveframes.debug.ExamplesMenu()
------------------------------------
local examplesframe = loveframes.Create("frame")
examplesframe:SetName("Examples List")
- examplesframe:SetSize(200, love.graphics.getHeight() - 265)
- examplesframe:SetPos(5, 260)
+ examplesframe:SetSize(200, love.graphics.getHeight() - 330)
+ examplesframe:SetPos(5, 325)
------------------------------------
-- examples list
@@ -221,6 +154,7 @@ function loveframes.debug.ExamplesMenu()
local frame1 = loveframes.Create("frame")
frame1:SetName("Checkbox")
frame1:Center()
+ frame1:SetHeight(85)
local checkbox1 = loveframes.Create("checkbox", frame1)
checkbox1:SetText("Checkbox 1")
@@ -251,6 +185,7 @@ function loveframes.debug.ExamplesMenu()
frame1:Center()
local panel1 = loveframes.Create("panel")
+ panel1:SetHeight(230)
local collapsiblecategory1 = loveframes.Create("collapsiblecategory", frame1)
collapsiblecategory1:SetPos(5, 30)
@@ -327,6 +262,26 @@ function loveframes.debug.ExamplesMenu()
end
exampleslist:AddItem(imageexample)
+ ------------------------------------
+ -- image button example
+ ------------------------------------
+ local imagebuttonexample = loveframes.Create("button")
+ imagebuttonexample:SetText("Image Button")
+ imagebuttonexample.OnClick = function(object1, x, y)
+
+ local frame1 = loveframes.Create("frame")
+ frame1:SetName("Image Button")
+ frame1:SetSize(138, 163)
+ frame1:Center()
+
+ local imagebutton1 = loveframes.Create("imagebutton", frame1)
+ imagebutton1:SetImage("resources/images/carlsagan.png")
+ imagebutton1:SetPos(5, 30)
+ imagebutton1:SizeToImage()
+
+ end
+ exampleslist:AddItem(imagebuttonexample)
+
------------------------------------
-- list example
------------------------------------
@@ -486,12 +441,12 @@ function loveframes.debug.ExamplesMenu()
local frame1 = loveframes.Create("frame")
frame1:SetName("Slider")
- frame1:SetSize(300, 100)
+ frame1:SetSize(300, 70)
frame1:Center()
local slider1 = loveframes.Create("slider", frame1)
slider1:SetPos(5, 30)
- slider1:SetSize(290, 500)
+ slider1:SetWidth(290)
slider1:SetMinMax(0, 100)
end
@@ -513,10 +468,22 @@ function loveframes.debug.ExamplesMenu()
tabs1:SetPos(5, 30)
tabs1:SetSize(490, 265)
+ local images = {"accept.png", "add.png", "application.png", "building.png", "bin.png", "database.png", "box.png", "brick.png"}
+
for i=1, 20 do
- local text1 = loveframes.Create("text")
+
+ local panel1 = loveframes.Create("panel")
+ panel1.Draw = function()
+ end
+
+ local text1 = loveframes.Create("text", panel1)
text1:SetText("Tab " ..i)
- tabs1:AddTab("Tab " ..i, text1, "Tab " ..i)
+ tabs1:AddTab("Tab " ..i, panel1, "Tab " ..i, "resources/images/" ..images[math.random(1, #images)])
+ text1:SetAlwaysUpdate(true)
+ text1.Update = function(object, dt)
+ object:Center()
+ end
+
end
end
@@ -540,10 +507,9 @@ function loveframes.debug.ExamplesMenu()
list1:SetPadding(5)
list1:SetSpacing(5)
- for i=1, 20 do
+ for i=1, 5 do
local text1 = loveframes.Create("text")
text1:SetText(loremipsum)
- --text1:SetColor({math.random(1, 255), math.random(1, 255), math.random(1, 255), 255})
list1:AddItem(text1)
end
@@ -569,4 +535,27 @@ function loveframes.debug.ExamplesMenu()
end
exampleslist:AddItem(textinputexample)
+end
+
+function loveframes.debug.SkinSelector()
+
+ local skins = loveframes.skins.available
+
+ local frame = loveframes.Create("frame")
+ frame:SetName("Skin Selector")
+ frame:SetSize(200, 60)
+ frame:SetPos(5, 260)
+
+ local skinslist = loveframes.Create("multichoice", frame)
+ skinslist:SetPos(5, 30)
+ skinslist:SetWidth(190)
+ skinslist:SetChoice("Choose a skin")
+ skinslist.OnChoiceSelected = function(object, choice)
+ loveframes.util.SetActiveSkin(choice)
+ end
+
+ for k, v in pairs(skins) do
+ skinslist:AddChoice(v.name)
+ end
+
end
\ No newline at end of file
diff --git a/init.lua b/init.lua
index c3f65f3..dece2bb 100644
--- a/init.lua
+++ b/init.lua
@@ -9,16 +9,16 @@ loveframes = {}
-- library info
loveframes.info = {}
loveframes.info.author = "Nikolai Resokav"
-loveframes.info.version = "0.9"
+loveframes.info.version = "0.9.1"
loveframes.info.stage = "Alpha"
-- library configurations
loveframes.config = {}
loveframes.config["DIRECTORY"] = "libraries/loveframes"
-loveframes.config["DEFAULTSKIN"] = "Default"
-loveframes.config["ACTIVESKIN"] = "Default"
+loveframes.config["DEFAULTSKIN"] = "Blue"
+loveframes.config["ACTIVESKIN"] = "Blue"
loveframes.config["INDEXSKINIMAGES"] = true
-loveframes.config["DEBUG"] = false
+loveframes.config["DEBUG"] = true
-- drawcount
loveframes.drawcount = 0
diff --git a/license.html b/license.html
deleted file mode 100644
index 9b6af9f..0000000
--- a/license.html
+++ /dev/null
@@ -1,470 +0,0 @@
-
-
-
-
-
-
-
-
License for Löve Frames By Nikolai Resokav
-
-
-
- Löve Frames is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license.
- Below is the entire legal code for the license. For more information on this license, please visit this web page:
-
Licence URL
-
-
-
-
-
License
-
-
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS
- OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR
- "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER
- APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
- AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS
- PROHIBITED.
-
-
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU
- ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE.
- TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A
- CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE
- IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
- CONDITIONS.
-
-
1. Definitions
-
-
- - "Adaptation" means a work based upon
- the Work, or upon the Work and other pre-existing works,
- such as a translation, adaptation, derivative work,
- arrangement of music or other alterations of a literary
- or artistic work, or phonogram or performance and
- includes cinematographic adaptations or any other form in
- which the Work may be recast, transformed, or adapted
- including in any form recognizably derived from the
- original, except that a work that constitutes a
- Collection will not be considered an Adaptation for the
- purpose of this License. For the avoidance of doubt,
- where the Work is a musical work, performance or
- phonogram, the synchronization of the Work in
- timed-relation with a moving image ("synching") will be
- considered an Adaptation for the purpose of this
- License.
-
- - "Collection" means a collection of
- literary or artistic works, such as encyclopedias and
- anthologies, or performances, phonograms or broadcasts,
- or other works or subject matter other than works listed
- in Section 1(f) below, which, by reason of the selection
- and arrangement of their contents, constitute
- intellectual creations, in which the Work is included in
- its entirety in unmodified form along with one or more
- other contributions, each constituting separate and
- independent works in themselves, which together are
- assembled into a collective whole. A work that
- constitutes a Collection will not be considered an
- Adaptation (as defined below) for the purposes of this
- License.
-
- - "Creative Commons Compatible
- License" means a license that is listed at
- http://creativecommons.org/compatiblelicenses that has
- been approved by Creative Commons as being essentially
- equivalent to this License, including, at a minimum,
- because that license: (i) contains terms that have the
- same purpose, meaning and effect as the License Elements
- of this License; and, (ii) explicitly permits the
- relicensing of adaptations of works made available under
- that license under this License or a Creative Commons
- jurisdiction license with the same License Elements as
- this License.
-
- - "Distribute" means to make available
- to the public the original and copies of the Work or
- Adaptation, as appropriate, through sale or other
- transfer of ownership.
-
- - "License Elements" means the
- following high-level license attributes as selected by
- Licensor and indicated in the title of this License:
- Attribution, ShareAlike.
-
- - "Licensor" means the individual,
- individuals, entity or entities that offer(s) the Work
- under the terms of this License.
-
- - "Original Author" means, in the case
- of a literary or artistic work, the individual,
- individuals, entity or entities who created the Work or
- if no individual or entity can be identified, the
- publisher; and in addition (i) in the case of a
- performance the actors, singers, musicians, dancers, and
- other persons who act, sing, deliver, declaim, play in,
- interpret or otherwise perform literary or artistic works
- or expressions of folklore; (ii) in the case of a
- phonogram the producer being the person or legal entity
- who first fixes the sounds of a performance or other
- sounds; and, (iii) in the case of broadcasts, the
- organization that transmits the broadcast.
-
- - "Work" means the literary and/or
- artistic work offered under the terms of this License
- including without limitation any production in the
- literary, scientific and artistic domain, whatever may be
- the mode or form of its expression including digital
- form, such as a book, pamphlet and other writing; a
- lecture, address, sermon or other work of the same
- nature; a dramatic or dramatico-musical work; a
- choreographic work or entertainment in dumb show; a
- musical composition with or without words; a
- cinematographic work to which are assimilated works
- expressed by a process analogous to cinematography; a
- work of drawing, painting, architecture, sculpture,
- engraving or lithography; a photographic work to which
- are assimilated works expressed by a process analogous to
- photography; a work of applied art; an illustration, map,
- plan, sketch or three-dimensional work relative to
- geography, topography, architecture or science; a
- performance; a broadcast; a phonogram; a compilation of
- data to the extent it is protected as a copyrightable
- work; or a work performed by a variety or circus
- performer to the extent it is not otherwise considered a
- literary or artistic work.
-
- - "You" means an individual or entity
- exercising rights under this License who has not
- previously violated the terms of this License with
- respect to the Work, or who has received express
- permission from the Licensor to exercise rights under
- this License despite a previous violation.
-
- - "Publicly Perform" means to perform
- public recitations of the Work and to communicate to the
- public those public recitations, by any means or process,
- including by wire or wireless means or public digital
- performances; to make available to the public Works in
- such a way that members of the public may access these
- Works from a place and at a place individually chosen by
- them; to perform the Work to the public by any means or
- process and the communication to the public of the
- performances of the Work, including by public digital
- performance; to broadcast and rebroadcast the Work by any
- means including signs, sounds or images.
-
- - "Reproduce" means to make copies of
- the Work by any means including without limitation by
- sound or visual recordings and the right of fixation and
- reproducing fixations of the Work, including storage of a
- protected performance or phonogram in digital form or
- other electronic medium.
-
-
-
2. Fair Dealing Rights. Nothing in this
- License is intended to reduce, limit, or restrict any uses
- free from copyright or rights arising from limitations or
- exceptions that are provided for in connection with the
- copyright protection under copyright law or other
- applicable laws.
-
-
3. License Grant. Subject to the terms
- and conditions of this License, Licensor hereby grants You
- a worldwide, royalty-free, non-exclusive, perpetual (for
- the duration of the applicable copyright) license to
- exercise the rights in the Work as stated below:
-
-
- - to Reproduce the Work, to incorporate the Work into
- one or more Collections, and to Reproduce the Work as
- incorporated in the Collections;
-
- - to create and Reproduce Adaptations provided that any
- such Adaptation, including any translation in any medium,
- takes reasonable steps to clearly label, demarcate or
- otherwise identify that changes were made to the original
- Work. For example, a translation could be marked "The
- original work was translated from English to Spanish," or
- a modification could indicate "The original work has been
- modified.";
-
- - to Distribute and Publicly Perform the Work including
- as incorporated in Collections; and,
-
- - to Distribute and Publicly Perform Adaptations.
-
- -
-
For the avoidance of doubt:
-
-
- - Non-waivable Compulsory License
- Schemes. In those jurisdictions in which the
- right to collect royalties through any statutory or
- compulsory licensing scheme cannot be waived, the
- Licensor reserves the exclusive right to collect such
- royalties for any exercise by You of the rights
- granted under this License;
-
- - Waivable Compulsory License
- Schemes. In those jurisdictions in which the
- right to collect royalties through any statutory or
- compulsory licensing scheme can be waived, the
- Licensor waives the exclusive right to collect such
- royalties for any exercise by You of the rights
- granted under this License; and,
-
- - Voluntary License Schemes. The
- Licensor waives the right to collect royalties,
- whether individually or, in the event that the
- Licensor is a member of a collecting society that
- administers voluntary licensing schemes, via that
- society, from any exercise by You of the rights
- granted under this License.
-
-
-
-
-
The above rights may be exercised in all media and
- formats whether now known or hereafter devised. The above
- rights include the right to make such modifications as are
- technically necessary to exercise the rights in other media
- and formats. Subject to Section 8(f), all rights not
- expressly granted by Licensor are hereby reserved.
-
-
4. Restrictions. The license granted in
- Section 3 above is expressly made subject to and limited by
- the following restrictions:
-
-
- - You may Distribute or Publicly Perform the Work only
- under the terms of this License. You must include a copy
- of, or the Uniform Resource Identifier (URI) for, this
- License with every copy of the Work You Distribute or
- Publicly Perform. You may not offer or impose any terms
- on the Work that restrict the terms of this License or
- the ability of the recipient of the Work to exercise the
- rights granted to that recipient under the terms of the
- License. You may not sublicense the Work. You must keep
- intact all notices that refer to this License and to the
- disclaimer of warranties with every copy of the Work You
- Distribute or Publicly Perform. When You Distribute or
- Publicly Perform the Work, You may not impose any
- effective technological measures on the Work that
- restrict the ability of a recipient of the Work from You
- to exercise the rights granted to that recipient under
- the terms of the License. This Section 4(a) applies to
- the Work as incorporated in a Collection, but this does
- not require the Collection apart from the Work itself to
- be made subject to the terms of this License. If You
- create a Collection, upon notice from any Licensor You
- must, to the extent practicable, remove from the
- Collection any credit as required by Section 4(c), as
- requested. If You create an Adaptation, upon notice from
- any Licensor You must, to the extent practicable, remove
- from the Adaptation any credit as required by Section
- 4(c), as requested.
-
- - You may Distribute or Publicly Perform an Adaptation
- only under the terms of: (i) this License; (ii) a later
- version of this License with the same License Elements as
- this License; (iii) a Creative Commons jurisdiction
- license (either this or a later license version) that
- contains the same License Elements as this License (e.g.,
- Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons
- Compatible License. If you license the Adaptation under
- one of the licenses mentioned in (iv), you must comply
- with the terms of that license. If you license the
- Adaptation under the terms of any of the licenses
- mentioned in (i), (ii) or (iii) (the "Applicable
- License"), you must comply with the terms of the
- Applicable License generally and the following
- provisions: (I) You must include a copy of, or the URI
- for, the Applicable License with every copy of each
- Adaptation You Distribute or Publicly Perform; (II) You
- may not offer or impose any terms on the Adaptation that
- restrict the terms of the Applicable License or the
- ability of the recipient of the Adaptation to exercise
- the rights granted to that recipient under the terms of
- the Applicable License; (III) You must keep intact all
- notices that refer to the Applicable License and to the
- disclaimer of warranties with every copy of the Work as
- included in the Adaptation You Distribute or Publicly
- Perform; (IV) when You Distribute or Publicly Perform the
- Adaptation, You may not impose any effective
- technological measures on the Adaptation that restrict
- the ability of a recipient of the Adaptation from You to
- exercise the rights granted to that recipient under the
- terms of the Applicable License. This Section 4(b)
- applies to the Adaptation as incorporated in a
- Collection, but this does not require the Collection
- apart from the Adaptation itself to be made subject to
- the terms of the Applicable License.
-
- - If You Distribute, or Publicly Perform the Work or
- any Adaptations or Collections, You must, unless a
- request has been made pursuant to Section 4(a), keep
- intact all copyright notices for the Work and provide,
- reasonable to the medium or means You are utilizing: (i)
- the name of the Original Author (or pseudonym, if
- applicable) if supplied, and/or if the Original Author
- and/or Licensor designate another party or parties (e.g.,
- a sponsor institute, publishing entity, journal) for
- attribution ("Attribution Parties") in Licensor's
- copyright notice, terms of service or by other reasonable
- means, the name of such party or parties; (ii) the title
- of the Work if supplied; (iii) to the extent reasonably
- practicable, the URI, if any, that Licensor specifies to
- be associated with the Work, unless such URI does not
- refer to the copyright notice or licensing information
- for the Work; and (iv) , consistent with Ssection 3(b),
- in the case of an Adaptation, a credit identifying the
- use of the Work in the Adaptation (e.g., "French
- translation of the Work by Original Author," or
- "Screenplay based on original Work by Original Author").
- The credit required by this Section 4(c) may be
- implemented in any reasonable manner; provided, however,
- that in the case of a Adaptation or Collection, at a
- minimum such credit will appear, if a credit for all
- contributing authors of the Adaptation or Collection
- appears, then as part of these credits and in a manner at
- least as prominent as the credits for the other
- contributing authors. For the avoidance of doubt, You may
- only use the credit required by this Section for the
- purpose of attribution in the manner set out above and,
- by exercising Your rights under this License, You may not
- implicitly or explicitly assert or imply any connection
- with, sponsorship or endorsement by the Original Author,
- Licensor and/or Attribution Parties, as appropriate, of
- You or Your use of the Work, without the separate,
- express prior written permission of the Original Author,
- Licensor and/or Attribution Parties.
-
- - Except as otherwise agreed in writing by the Licensor
- or as may be otherwise permitted by applicable law, if
- You Reproduce, Distribute or Publicly Perform the Work
- either by itself or as part of any Adaptations or
- Collections, You must not distort, mutilate, modify or
- take other derogatory action in relation to the Work
- which would be prejudicial to the Original Author's honor
- or reputation. Licensor agrees that in those
- jurisdictions (e.g. Japan), in which any exercise of the
- right granted in Section 3(b) of this License (the right
- to make Adaptations) would be deemed to be a distortion,
- mutilation, modification or other derogatory action
- prejudicial to the Original Author's honor and
- reputation, the Licensor will waive or not assert, as
- appropriate, this Section, to the fullest extent
- permitted by the applicable national law, to enable You
- to reasonably exercise Your right under Section 3(b) of
- this License (right to make Adaptations) but not
- otherwise.
-
-
-
5. Representations, Warranties and
- Disclaimer
-
-
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN
- WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO
- REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE
- WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING,
- WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
- FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE
- ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE
- PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE.
- SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED
- WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
-
-
6. Limitation on Liability. EXCEPT TO
- THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL
- LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY
- SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY
- DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK,
- EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGES.
-
-
7. Termination
-
-
- - This License and the rights granted hereunder will
- terminate automatically upon any breach by You of the
- terms of this License. Individuals or entities who have
- received Adaptations or Collections from You under this
- License, however, will not have their licenses terminated
- provided such individuals or entities remain in full
- compliance with those licenses. Sections 1, 2, 5, 6, 7,
- and 8 will survive any termination of this License.
-
- - Subject to the above terms and conditions, the
- license granted here is perpetual (for the duration of
- the applicable copyright in the Work). Notwithstanding
- the above, Licensor reserves the right to release the
- Work under different license terms or to stop
- distributing the Work at any time; provided, however that
- any such election will not serve to withdraw this License
- (or any other license that has been, or is required to
- be, granted under the terms of this License), and this
- License will continue in full force and effect unless
- terminated as stated above.
-
-
-
8. Miscellaneous
-
-
- - Each time You Distribute or Publicly Perform the Work
- or a Collection, the Licensor offers to the recipient a
- license to the Work on the same terms and conditions as
- the license granted to You under this License.
-
- - Each time You Distribute or Publicly Perform an
- Adaptation, Licensor offers to the recipient a license to
- the original Work on the same terms and conditions as the
- license granted to You under this License.
-
- - If any provision of this License is invalid or
- unenforceable under applicable law, it shall not affect
- the validity or enforceability of the remainder of the
- terms of this License, and without further action by the
- parties to this agreement, such provision shall be
- reformed to the minimum extent necessary to make such
- provision valid and enforceable.
-
- - No term or provision of this License shall be deemed
- waived and no breach consented to unless such waiver or
- consent shall be in writing and signed by the party to be
- charged with such waiver or consent.
-
- - This License constitutes the entire agreement between
- the parties with respect to the Work licensed here. There
- are no understandings, agreements or representations with
- respect to the Work not specified here. Licensor shall
- not be bound by any additional provisions that may appear
- in any communication from You. This License may not be
- modified without the mutual written agreement of the
- Licensor and You.
-
- - The rights granted under, and the subject matter
- referenced, in this License were drafted utilizing the
- terminology of the Berne Convention for the Protection of
- Literary and Artistic Works (as amended on September 28,
- 1979), the Rome Convention of 1961, the WIPO Copyright
- Treaty of 1996, the WIPO Performances and Phonograms
- Treaty of 1996 and the Universal Copyright Convention (as
- revised on July 24, 1971). These rights and subject
- matter take effect in the relevant jurisdiction in which
- the License terms are sought to be enforced according to
- the corresponding provisions of the implementation of
- those treaty provisions in the applicable national law.
- If the standard suite of rights granted under applicable
- copyright law includes additional rights not granted
- under this License, such additional rights are deemed to
- be included in the License; this License is not intended
- to restrict the license of any rights under applicable
- law.
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/license.txt b/license.txt
new file mode 100644
index 0000000..666c2a1
--- /dev/null
+++ b/license.txt
@@ -0,0 +1,484 @@
+Löve Frames is licensed under the Creative
+Commons Attribution-ShareAlike 3.0 Unported (CC
+BY-SA 3.0) license. Below is the entire legal code
+for the license. For more information on this
+license, please visit this web page:
+http://creativecommons.org/licenses/by-sa/3.0/
+
+License
+
+THE WORK (AS DEFINED BELOW) IS
+PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS
+PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK
+IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE
+LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED
+UNDER THIS LICENSE OR COPYRIGHT LAW IS
+PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE
+WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE
+BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT
+THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT,
+THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE
+IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS
+AND CONDITIONS.
+
+1. Definitions
+
+
+"Adaptation" means a work based upon the Work,
+or upon the Work and other pre-existing works,
+such as a translation, adaptation, derivative
+work, arrangement of music or other alterations of
+a literary or artistic work, or phonogram or
+performance and includes cinematographic
+adaptations or any other form in which the Work
+may be recast, transformed, or adapted including
+in any form recognizably derived from the
+original, except that a work that constitutes a
+Collection will not be considered an Adaptation
+for the purpose of this License. For the avoidance
+of doubt, where the Work is a musical work,
+performance or phonogram, the synchronization of
+the Work in timed-relation with a moving image
+("synching") will be considered an Adaptation
+for the purpose of this License.
+
+"Collection" means a collection of literary or
+artistic works, such as encyclopedias and
+anthologies, or performances, phonograms or
+broadcasts, or other works or subject matter other
+than works listed in Section 1(f) below, which, by
+reason of the selection and arrangement of their
+contents, constitute intellectual creations, in
+which the Work is included in its entirety in
+unmodified form along with one or more other
+contributions, each constituting separate and
+independent works in themselves, which together
+are assembled into a collective whole. A work that
+constitutes a Collection will not be considered an
+Adaptation (as defined below) for the purposes of
+this License.
+ "Creative Commons Compatible
+License" means a license that is listed at
+http://creativecommons.org/compatiblelicenses that
+has been approved by Creative Commons as being
+essentially equivalent to this License, including,
+at a minimum, because that license: (i) contains
+terms that have the same purpose, meaning and
+effect as the License Elements of this License;
+and, (ii) explicitly permits the relicensing of
+adaptations of works made available under that
+license under this License or a Creative Commons
+jurisdiction license with the same License
+Elements as this License.
+ "Distribute"
+means to make available to the public the original
+and copies of the Work or Adaptation, as
+appropriate, through sale or other transfer of
+ownership.
+ "License Elements" means the
+following high-level license attributes as
+selected by Licensor and indicated in the title of
+this License: Attribution, ShareAlike.
+
+"Licensor" means the individual, individuals,
+entity or entities that offer(s) the Work under
+the terms of this License.
+ "Original
+Author" means, in the case of a literary or
+artistic work, the individual, individuals, entity
+or entities who created the Work or if no
+individual or entity can be identified, the
+publisher; and in addition (i) in the case of a
+performance the actors, singers, musicians,
+dancers, and other persons who act, sing, deliver,
+declaim, play in, interpret or otherwise perform
+literary or artistic works or expressions of
+folklore; (ii) in the case of a phonogram the
+producer being the person or legal entity who
+first fixes the sounds of a performance or other
+sounds; and, (iii) in the case of broadcasts, the
+organization that transmits the broadcast.
+
+"Work" means the literary and/or artistic work
+offered under the terms of this License including
+without limitation any production in the literary,
+scientific and artistic domain, whatever may be
+the mode or form of its expression including
+digital form, such as a book, pamphlet and other
+writing; a lecture, address, sermon or other work
+of the same nature; a dramatic or
+dramatico-musical work; a choreographic work or
+entertainment in dumb show; a musical composition
+with or without words; a cinematographic work to
+which are assimilated works expressed by a process
+analogous to cinematography; a work of drawing,
+painting, architecture, sculpture, engraving or
+lithography; a photographic work to which are
+assimilated works expressed by a process analogous
+to photography; a work of applied art; an
+illustration, map, plan, sketch or
+three-dimensional work relative to geography,
+topography, architecture or science; a
+performance; a broadcast; a phonogram; a
+compilation of data to the extent it is protected
+as a copyrightable work; or a work performed by a
+variety or circus performer to the extent it is
+not otherwise considered a literary or artistic
+work.
+ "You" means an individual or entity
+exercising rights under this License who has not
+previously violated the terms of this License with
+respect to the Work, or who has received express
+permission from the Licensor to exercise rights
+under this License despite a previous violation.
+
+ "Publicly Perform" means to perform public
+recitations of the Work and to communicate to the
+public those public recitations, by any means or
+process, including by wire or wireless means or
+public digital performances; to make available to
+the public Works in such a way that members of the
+public may access these Works from a place and at
+a place individually chosen by them; to perform
+the Work to the public by any means or process and
+the communication to the public of the
+performances of the Work, including by public
+digital performance; to broadcast and rebroadcast
+the Work by any means including signs, sounds or
+images.
+ "Reproduce" means to make copies of
+the Work by any means including without limitation
+by sound or visual recordings and the right of
+fixation and reproducing fixations of the Work,
+including storage of a protected performance or
+phonogram in digital form or other electronic
+medium.
+
+2. Fair Dealing Rights. Nothing in this
+License is intended to reduce, limit, or restrict
+any uses free from copyright or rights arising
+from limitations or exceptions that are provided
+for in connection with the copyright protection
+under copyright law or other applicable
+laws.
+
+3. License Grant. Subject to the terms
+and conditions of this License, Licensor hereby
+grants You a worldwide, royalty-free,
+non-exclusive, perpetual (for the duration of the
+applicable copyright) license to exercise the
+rights in the Work as stated below:
+
+ to
+Reproduce the Work, to incorporate the Work into
+one or more Collections, and to Reproduce the Work
+as incorporated in the Collections;
+ to create
+and Reproduce Adaptations provided that any such
+Adaptation, including any translation in any
+medium, takes reasonable steps to clearly label,
+demarcate or otherwise identify that changes were
+made to the original Work. For example, a
+translation could be marked "The original work
+was translated from English to Spanish," or a
+modification could indicate "The original work
+has been modified.";
+ to Distribute and
+Publicly Perform the Work including as
+incorporated in Collections; and,
+ to
+Distribute and Publicly Perform Adaptations.
+
+
+ For the avoidance of doubt:
+ Non-waivable
+Compulsory License Schemes. In those jurisdictions
+in which the right to collect royalties through
+any statutory or compulsory licensing scheme
+cannot be waived, the Licensor reserves the
+exclusive right to collect such royalties for any
+exercise by You of the rights granted under this
+License;
+ Waivable Compulsory License
+Schemes. In those jurisdictions in which the right
+to collect royalties through any statutory or
+compulsory licensing scheme can be waived, the
+Licensor waives the exclusive right to collect
+such royalties for any exercise by You of the
+rights granted under this License; and,
+
+Voluntary License Schemes. The Licensor waives the
+right to collect royalties, whether individually
+or, in the event that the Licensor is a member of
+a collecting society that administers voluntary
+licensing schemes, via that society, from any
+exercise by You of the rights granted under this
+License.
+
+The above rights may be exercised in
+all media and formats whether now known or
+hereafter devised. The above rights include the
+right to make such modifications as are
+technically necessary to exercise the rights in
+other media and formats. Subject to Section 8(f),
+all rights not expressly granted by Licensor are
+hereby reserved.
+
+4. Restrictions. The license
+granted in Section 3 above is expressly made
+subject to and limited by the following
+restrictions:
+
+ You may Distribute or
+Publicly Perform the Work only under the terms of
+this License. You must include a copy of, or the
+Uniform Resource Identifier (URI) for, this
+License with every copy of the Work You Distribute
+or Publicly Perform. You may not offer or impose
+any terms on the Work that restrict the terms of
+this License or the ability of the recipient of
+the Work to exercise the rights granted to that
+recipient under the terms of the License. You may
+not sublicense the Work. You must keep intact all
+notices that refer to this License and to the
+disclaimer of warranties with every copy of the
+Work You Distribute or Publicly Perform. When You
+Distribute or Publicly Perform the Work, You may
+not impose any effective technological measures on
+the Work that restrict the ability of a recipient
+of the Work from You to exercise the rights
+granted to that recipient under the terms of the
+License. This Section 4(a) applies to the Work as
+incorporated in a Collection, but this does not
+require the Collection apart from the Work itself
+to be made subject to the terms of this License.
+If You create a Collection, upon notice from any
+Licensor You must, to the extent practicable,
+remove from the Collection any credit as required
+by Section 4(c), as requested. If You create an
+Adaptation, upon notice from any Licensor You
+must, to the extent practicable, remove from the
+Adaptation any credit as required by Section 4(c),
+as requested.
+ You may Distribute or Publicly
+Perform an Adaptation only under the terms of: (i)
+this License; (ii) a later version of this License
+with the same License Elements as this License;
+(iii) a Creative Commons jurisdiction license
+(either this or a later license version) that
+contains the same License Elements as this License
+(e.g., Attribution-ShareAlike 3.0 US)); (iv) a
+Creative Commons Compatible License. If you
+license the Adaptation under one of the licenses
+mentioned in (iv), you must comply with the terms
+of that license. If you license the Adaptation
+under the terms of any of the licenses mentioned
+in (i), (ii) or (iii) (the "Applicable
+License"), you must comply with the terms of the
+Applicable License generally and the following
+provisions: (I) You must include a copy of, or the
+URI for, the Applicable License with every copy of
+each Adaptation You Distribute or Publicly
+Perform; (II) You may not offer or impose any
+terms on the Adaptation that restrict the terms of
+the Applicable License or the ability of the
+recipient of the Adaptation to exercise the rights
+granted to that recipient under the terms of the
+Applicable License; (III) You must keep intact all
+notices that refer to the Applicable License and
+to the disclaimer of warranties with every copy of
+the Work as included in the Adaptation You
+Distribute or Publicly Perform; (IV) when You
+Distribute or Publicly Perform the Adaptation, You
+may not impose any effective technological
+measures on the Adaptation that restrict the
+ability of a recipient of the Adaptation from You
+to exercise the rights granted to that recipient
+under the terms of the Applicable License. This
+Section 4(b) applies to the Adaptation as
+incorporated in a Collection, but this does not
+require the Collection apart from the Adaptation
+itself to be made subject to the terms of the
+Applicable License.
+ If You Distribute, or
+Publicly Perform the Work or any Adaptations or
+Collections, You must, unless a request has been
+made pursuant to Section 4(a), keep intact all
+copyright notices for the Work and provide,
+reasonable to the medium or means You are
+utilizing: (i) the name of the Original Author (or
+pseudonym, if applicable) if supplied, and/or if
+the Original Author and/or Licensor designate
+another party or parties (e.g., a sponsor
+institute, publishing entity, journal) for
+attribution ("Attribution Parties") in
+Licensor's copyright notice, terms of service or
+by other reasonable means, the name of such party
+or parties; (ii) the title of the Work if
+supplied; (iii) to the extent reasonably
+practicable, the URI, if any, that Licensor
+specifies to be associated with the Work, unless
+such URI does not refer to the copyright notice or
+licensing information for the Work; and (iv) ,
+consistent with Ssection 3(b), in the case of an
+Adaptation, a credit identifying the use of the
+Work in the Adaptation (e.g., "French translation
+of the Work by Original Author," or "Screenplay
+based on original Work by Original Author"). The
+credit required by this Section 4(c) may be
+implemented in any reasonable manner; provided,
+however, that in the case of a Adaptation or
+Collection, at a minimum such credit will appear,
+if a credit for all contributing authors of the
+Adaptation or Collection appears, then as part of
+these credits and in a manner at least as
+prominent as the credits for the other
+contributing authors. For the avoidance of doubt,
+You may only use the credit required by this
+Section for the purpose of attribution in the
+manner set out above and, by exercising Your
+rights under this License, You may not implicitly
+or explicitly assert or imply any connection with,
+sponsorship or endorsement by the Original Author,
+Licensor and/or Attribution Parties, as
+appropriate, of You or Your use of the Work,
+without the separate, express prior written
+permission of the Original Author, Licensor and/or
+Attribution Parties.
+ Except as otherwise
+agreed in writing by the Licensor or as may be
+otherwise permitted by applicable law, if You
+Reproduce, Distribute or Publicly Perform the Work
+either by itself or as part of any Adaptations or
+Collections, You must not distort, mutilate,
+modify or take other derogatory action in relation
+to the Work which would be prejudicial to the
+Original Author's honor or reputation. Licensor
+agrees that in those jurisdictions (e.g. Japan),
+in which any exercise of the right granted in
+Section 3(b) of this License (the right to make
+Adaptations) would be deemed to be a distortion,
+mutilation, modification or other derogatory
+action prejudicial to the Original Author's honor
+and reputation, the Licensor will waive or not
+assert, as appropriate, this Section, to the
+fullest extent permitted by the applicable
+national law, to enable You to reasonably exercise
+Your right under Section 3(b) of this License
+(right to make Adaptations) but not
+otherwise.
+
+5. Representations, Warranties and
+Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO
+BY THE PARTIES IN WRITING, LICENSOR OFFERS THE
+WORK AS-IS AND MAKES NO REPRESENTATIONS OR
+WARRANTIES OF ANY KIND CONCERNING THE WORK,
+EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
+INCLUDING, WITHOUT LIMITATION, WARRANTIES OF
+TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR
+PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
+OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF
+ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE.
+SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF
+IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT
+APPLY TO YOU.
+
+6. Limitation on Liability.
+EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW,
+IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY
+LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL,
+CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
+ARISING OUT OF THIS LICENSE OR THE USE OF THE
+WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+
+ This License and the rights granted hereunder
+will terminate automatically upon any breach by
+You of the terms of this License. Individuals or
+entities who have received Adaptations or
+Collections from You under this License, however,
+will not have their licenses terminated provided
+such individuals or entities remain in full
+compliance with those licenses. Sections 1, 2, 5,
+6, 7, and 8 will survive any termination of this
+License.
+ Subject to the above terms and
+conditions, the license granted here is perpetual
+(for the duration of the applicable copyright in
+the Work). Notwithstanding the above, Licensor
+reserves the right to release the Work under
+different license terms or to stop distributing
+the Work at any time; provided, however that any
+such election will not serve to withdraw this
+License (or any other license that has been, or is
+required to be, granted under the terms of this
+License), and this License will continue in full
+force and effect unless terminated as stated
+above.
+
+8. Miscellaneous
+
+ Each time You
+Distribute or Publicly Perform the Work or a
+Collection, the Licensor offers to the recipient a
+license to the Work on the same terms and
+conditions as the license granted to You under
+this License.
+ Each time You Distribute or
+Publicly Perform an Adaptation, Licensor offers to
+the recipient a license to the original Work on
+the same terms and conditions as the license
+granted to You under this License.
+ If any
+provision of this License is invalid or
+unenforceable under applicable law, it shall not
+affect the validity or enforceability of the
+remainder of the terms of this License, and
+without further action by the parties to this
+agreement, such provision shall be reformed to the
+minimum extent necessary to make such provision
+valid and enforceable.
+ No term or provision
+of this License shall be deemed waived and no
+breach consented to unless such waiver or consent
+shall be in writing and signed by the party to be
+charged with such waiver or consent.
+ This
+License constitutes the entire agreement between
+the parties with respect to the Work licensed
+here. There are no understandings, agreements or
+representations with respect to the Work not
+specified here. Licensor shall not be bound by any
+additional provisions that may appear in any
+communication from You. This License may not be
+modified without the mutual written agreement of
+the Licensor and You.
+ The rights granted
+under, and the subject matter referenced, in this
+License were drafted utilizing the terminology of
+the Berne Convention for the Protection of
+Literary and Artistic Works (as amended on
+September 28, 1979), the Rome Convention of 1961,
+the WIPO Copyright Treaty of 1996, the WIPO
+Performances and Phonograms Treaty of 1996 and the
+Universal Copyright Convention (as revised on July
+24, 1971). These rights and subject matter take
+effect in the relevant jurisdiction in which the
+License terms are sought to be enforced according
+to the corresponding provisions of the
+implementation of those treaty provisions in the
+applicable national law. If the standard suite of
+rights granted under applicable copyright law
+includes additional rights not granted under this
+License, such additional rights are deemed to be
+included in the License; this License is not
+intended to restrict the license of any rights
+under applicable law.
+
diff --git a/objects/base.lua b/objects/base.lua
index e1992a9..3f4f32a 100644
--- a/objects/base.lua
+++ b/objects/base.lua
@@ -57,11 +57,21 @@ end
--]]---------------------------------------------------------
function base:mousepressed(x, y, button)
+ if self.visible == false then
+ return
+ end
+
if self.children then
for k, v in ipairs(self.children) do
v:mousepressed(x, y, button)
end
end
+
+ if self.internals then
+ for k, v in ipairs(self.internals) do
+ v:mousepressed(x, y, button)
+ end
+ end
end
@@ -71,11 +81,21 @@ end
--]]---------------------------------------------------------
function base:mousereleased(x, y, button)
+ if self.visible == false then
+ return
+ end
+
if self.children then
for k, v in ipairs(self.children) do
v:mousereleased(x, y, button)
end
end
+
+ if self.internals then
+ for k, v in ipairs(self.internals) do
+ v:mousereleased(x, y, button)
+ end
+ end
end
@@ -85,11 +105,21 @@ end
--]]---------------------------------------------------------
function base:keypressed(key, unicode)
+ if self.visible == false then
+ return
+ end
+
if self.children then
for k, v in ipairs(self.children) do
v:keypressed(key, unicode)
end
end
+
+ if self.internals then
+ for k, v in ipairs(self.internals) do
+ v:keypressed(key, unicode)
+ end
+ end
end
@@ -99,11 +129,21 @@ end
--]]---------------------------------------------------------
function base:keyreleased(key)
+ if self.visible == false then
+ return
+ end
+
if self.children then
for k, v in ipairs(self.children) do
v:keyreleased(key)
end
end
+
+ if self.internals then
+ for k, v in ipairs(self.internals) do
+ v:keyreleased(key)
+ end
+ end
end
diff --git a/objects/button.lua b/objects/button.lua
index a9cd42c..3a9f298 100644
--- a/objects/button.lua
+++ b/objects/button.lua
@@ -18,7 +18,6 @@ function button:initialize()
self.width = 80
self.height = 25
self.internal = false
- self.hover = false
self.down = false
self.clickable = true
self.enabled = true
diff --git a/objects/image.lua b/objects/image.lua
index 16ffe59..0a0b43e 100644
--- a/objects/image.lua
+++ b/objects/image.lua
@@ -71,17 +71,6 @@ function image:draw()
skin.DrawImage(self)
end
- local image = self.image
- local color = self.imagecolor
-
- if color then
- love.graphics.setColor(unpack(color))
- love.graphics.draw(image)
- else
- love.graphics.setColor(255, 255, 255, 255)
- love.graphics.draw(image, self.x, self.y)
- end
-
end
--[[---------------------------------------------------------
diff --git a/objects/imagebutton.lua b/objects/imagebutton.lua
new file mode 100644
index 0000000..fce2570
--- /dev/null
+++ b/objects/imagebutton.lua
@@ -0,0 +1,228 @@
+--[[------------------------------------------------
+ -- LÖVE Frames --
+ -- By Nikolai Resokav --
+--]]------------------------------------------------
+
+-- imagebutton clas
+imagebutton = class("imagebutton", base)
+imagebutton:include(loveframes.templates.default)
+
+--[[---------------------------------------------------------
+ - func: initialize()
+ - desc: initializes the object
+--]]---------------------------------------------------------
+function imagebutton:initialize()
+
+ self.type = "imagebutton"
+ self.text = "Image Button"
+ self.width = 50
+ self.height = 50
+ self.internal = false
+ self.down = false
+ self.clickable = true
+ self.enabled = true
+ self.image = nil
+ self.OnClick = nil
+
+end
+
+--[[---------------------------------------------------------
+ - func: update(deltatime)
+ - desc: updates the object
+--]]---------------------------------------------------------
+function imagebutton:update(dt)
+
+ if self.visible == false then
+ if self.alwaysupdate == false then
+ return
+ end
+ end
+
+ self:CheckHover()
+
+ -- move to parent if there is a parent
+ if self.parent ~= loveframes.base then
+ self.x = self.parent.x + self.staticx
+ self.y = self.parent.y + self.staticy
+ end
+
+ if self.Update then
+ self.Update(self, dt)
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: draw()
+ - desc: draws the object
+--]]---------------------------------------------------------
+function imagebutton:draw()
+
+ if self.visible == false then
+ return
+ end
+
+ loveframes.drawcount = loveframes.drawcount + 1
+ self.draworder = loveframes.drawcount
+
+ -- skin variables
+ local index = loveframes.config["ACTIVESKIN"]
+ local defaultskin = loveframes.config["DEFAULTSKIN"]
+ local selfskin = self.skin
+ local skin = loveframes.skins.available[selfskin] or loveframes.skins.available[index] or loveframes.skins.available[defaultskin]
+
+ if self.Draw ~= nil then
+ self.Draw(self)
+ else
+ skin.DrawImageButton(self)
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: mousepressed(x, y, imagebutton)
+ - desc: called when the player presses a mouse imagebutton
+--]]---------------------------------------------------------
+function imagebutton:mousepressed(x, y, imagebutton)
+
+ if self.visible == false then
+ return
+ end
+
+ if self.hover == true and imagebutton == "l" then
+
+ local baseparent = self:GetBaseParent()
+
+ if baseparent and baseparent.type == "frame" then
+ baseparent:MakeTop()
+ end
+
+ self.down = true
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: mousereleased(x, y, imagebutton)
+ - desc: called when the player releases a mouse imagebutton
+--]]---------------------------------------------------------
+function imagebutton:mousereleased(x, y, imagebutton)
+
+ if self.visible == false then
+ return
+ end
+
+ local hover = self.hover
+ local down = self.down
+ local clickable = self.clickable
+ local enabled = self.enabled
+
+ if hover == true and down == true and imagebutton == "l" and clickable == true then
+ if enabled == true then
+ if self.OnClick then
+ self.OnClick(self, x, y)
+ end
+ end
+ end
+
+ self.down = false
+
+end
+
+--[[---------------------------------------------------------
+ - func: SetText(text)
+ - desc: sets the object's text
+--]]---------------------------------------------------------
+function imagebutton:SetText(text)
+
+ self.text = text
+
+end
+
+--[[---------------------------------------------------------
+ - func: GetText()
+ - desc: gets the object's text
+--]]---------------------------------------------------------
+function imagebutton:GetText()
+
+ return self.text
+
+end
+
+--[[---------------------------------------------------------
+ - func: SetClickable(bool)
+ - desc: sets whether the object can be clicked or not
+--]]---------------------------------------------------------
+function imagebutton:SetClickable(bool)
+
+ self.clickable = bool
+
+end
+
+--[[---------------------------------------------------------
+ - func: GetClickable(bool)
+ - desc: gets whether the object can be clicked or not
+--]]---------------------------------------------------------
+function imagebutton:GetClickable()
+
+ return self.clickable
+
+end
+
+--[[---------------------------------------------------------
+ - func: SetClickable(bool)
+ - desc: sets whether the object is enabled or not
+--]]---------------------------------------------------------
+function imagebutton:SetEnabled(bool)
+
+ self.enabled = bool
+
+end
+
+--[[---------------------------------------------------------
+ - func: GetEnabled()
+ - desc: gets whether the object is enabled or not
+--]]---------------------------------------------------------
+function imagebutton:GetEnabled()
+
+ return self.enabled
+
+end
+
+--[[---------------------------------------------------------
+ - func: SetImage(image)
+ - desc: sets the object's image
+--]]---------------------------------------------------------
+function imagebutton:SetImage(image)
+
+ if type(image) == "string" then
+ self.image = love.graphics.newImage(image)
+ else
+ self.image = image
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: GetImage()
+ - desc: gets whether the object is enabled or not
+--]]---------------------------------------------------------
+function imagebutton:GetImage()
+
+ return self.image
+
+end
+
+--[[---------------------------------------------------------
+ - func: SizeToImage()
+ - desc: makes the object the same size as it's image
+--]]---------------------------------------------------------
+function imagebutton:SizeToImage()
+
+ if self.image then
+ self.width = self.image:getWidth()
+ self.height = self.image:getHeight()
+ end
+
+end
\ No newline at end of file
diff --git a/objects/internal/columnlist/columnlist-listarea.lua b/objects/internal/columnlist/columnlist-listarea.lua
index 5a9fd88..5c02d0b 100644
--- a/objects/internal/columnlist/columnlist-listarea.lua
+++ b/objects/internal/columnlist/columnlist-listarea.lua
@@ -181,38 +181,6 @@ function columnlistarea:mousereleased(x, y, button)
end
---[[---------------------------------------------------------
- - func: keypressed(key)
- - desc: called when the player presses a key
---]]---------------------------------------------------------
-function columnlistarea:keypressed(key, unicode)
-
- for k, v in ipairs(self.internals) do
- v:keypressed(key, unicode)
- end
-
- for k, v in ipairs(self.children) do
- v:keypressed(key, unicode)
- end
-
-end
-
---[[---------------------------------------------------------
- - func: keyreleased(key)
- - desc: called when the player releases a key
---]]---------------------------------------------------------
-function columnlistarea:keyreleased(key)
-
- for k, v in ipairs(self.internals) do
- v:keyreleased(key)
- end
-
- for k, v in ipairs(self.children) do
- v:keyreleased(key)
- end
-
-end
-
--[[---------------------------------------------------------
- func: CalculateSize()
- desc: calculates the size of the object's children
diff --git a/objects/internal/columnlist/columnlist-row.lua b/objects/internal/columnlist/columnlist-row.lua
index efea9ef..9f95046 100644
--- a/objects/internal/columnlist/columnlist-row.lua
+++ b/objects/internal/columnlist/columnlist-row.lua
@@ -17,8 +17,11 @@ function columnlistrow:initialize(parent, data)
self.parent = parent
self.colorindex = self.parent.rowcolorindex
self.font = love.graphics.newFont(12)
+ self.textcolor = {0, 0, 0, 255}
self.width = 80
self.height = 25
+ self.textx = 5
+ self.texty = 5
self.internal = true
self.columndata = data
@@ -76,11 +79,12 @@ function columnlistrow:draw()
end
local cwidth, cheight = self:GetParent():GetParent():GetColumnSize()
- local x = 5
+ local x = self.textx
+ local textcolor = self.textcolor
for k, v in ipairs(self.columndata) do
- local height = self.font:getHeight("a")
- love.graphics.print(v, self.x + x, self.y + self.height/2 - height/2)
+ love.graphics.setColor(unpack(textcolor))
+ love.graphics.print(v, self.x + x, self.y + self.texty)
x = x + cwidth
end
@@ -132,25 +136,52 @@ function columnlistrow:mousereleased(x, y, button)
end
--[[---------------------------------------------------------
- - func: keypressed(key)
- - desc: called when the player presses a key
+ - func: SetTextPos(x, y)
+ - desc: sets the positions of the object's text
--]]---------------------------------------------------------
-function columnlistrow:keypressed(key, unicode)
+function columnlistrow:SetTextPos(x, y)
+
+ self.textx = x
+ self.texty = y
- if self.visible == false then
- return
- end
-
end
--[[---------------------------------------------------------
- - func: keyreleased(key)
- - desc: called when the player releases a key
+ - func: SetFont(font)
+ - desc: sets the object's font
--]]---------------------------------------------------------
-function columnlistrow:keyreleased(key)
+function columnlistrow:SetFont(font)
- if self.visible == false then
- return
- end
+ self.font = font
+
+end
+
+--[[---------------------------------------------------------
+ - func: GetFont()
+ - desc: gets the object's font
+--]]---------------------------------------------------------
+function columnlistrow:GetFont()
+
+ return self.font
+
+end
+
+--[[---------------------------------------------------------
+ - func: GetColorIndex()
+ - desc: gets the object's color index
+--]]---------------------------------------------------------
+function columnlistrow:GetColorIndex()
+
+ return self.colorindex
+
+end
+
+--[[---------------------------------------------------------
+ - func: SetTextColor(color)
+ - desc: sets the object's text color
+--]]---------------------------------------------------------
+function columnlistrow:SetTextColor(color)
+
+ self.textcolor = color
end
\ No newline at end of file
diff --git a/objects/internal/columnlist/coulmnlist-header.lua b/objects/internal/columnlist/coulmnlist-header.lua
index 34d815d..d8a1a80 100644
--- a/objects/internal/columnlist/coulmnlist-header.lua
+++ b/objects/internal/columnlist/coulmnlist-header.lua
@@ -142,21 +142,4 @@ function columnlistheader:mousereleased(x, y, button)
self.down = false
-end
-
---[[---------------------------------------------------------
- - func: keypressed(key)
- - desc: called when the player presses a key
---]]---------------------------------------------------------
-function columnlistheader:keypressed(key, unicode)
-
-end
-
---[[---------------------------------------------------------
- - func: keyreleased(key)
- - desc: called when the player releases a key
---]]---------------------------------------------------------
-function columnlistheader:keyreleased(key)
-
-
end
\ No newline at end of file
diff --git a/objects/internal/tabbutton.lua b/objects/internal/tabbutton.lua
index 7e3794f..a5d02c1 100644
--- a/objects/internal/tabbutton.lua
+++ b/objects/internal/tabbutton.lua
@@ -166,6 +166,10 @@ end
--]]---------------------------------------------------------
function tabbutton:SetImage(image)
- self.image = image
+ if type(image) == "string" then
+ self.image = love.graphics.newImage(image)
+ else
+ self.image = image
+ end
end
\ No newline at end of file
diff --git a/skins/Blue/images/arrow-down.png b/skins/Blue/images/arrow-down.png
new file mode 100644
index 0000000..14e3918
Binary files /dev/null and b/skins/Blue/images/arrow-down.png differ
diff --git a/skins/Blue/images/arrow-left.png b/skins/Blue/images/arrow-left.png
new file mode 100644
index 0000000..7aff59e
Binary files /dev/null and b/skins/Blue/images/arrow-left.png differ
diff --git a/skins/Blue/images/arrow-right.png b/skins/Blue/images/arrow-right.png
new file mode 100644
index 0000000..159cd41
Binary files /dev/null and b/skins/Blue/images/arrow-right.png differ
diff --git a/skins/Blue/images/arrow-up.png b/skins/Blue/images/arrow-up.png
new file mode 100644
index 0000000..20d04c7
Binary files /dev/null and b/skins/Blue/images/arrow-up.png differ
diff --git a/skins/Blue/images/close.png b/skins/Blue/images/close.png
new file mode 100644
index 0000000..0825add
Binary files /dev/null and b/skins/Blue/images/close.png differ
diff --git a/skins/Blue/images/multichoice-arrow.png b/skins/Blue/images/multichoice-arrow.png
new file mode 100644
index 0000000..c7294cb
Binary files /dev/null and b/skins/Blue/images/multichoice-arrow.png differ
diff --git a/skins/Blue/skin.lua b/skins/Blue/skin.lua
new file mode 100644
index 0000000..012bcc5
--- /dev/null
+++ b/skins/Blue/skin.lua
@@ -0,0 +1,1208 @@
+--[[------------------------------------------------
+ -- LÖVE Frames --
+ -- By Nikolai Resokav --
+--]]------------------------------------------------
+
+-- skin table
+local skin = {}
+
+-- skin info (you always need this in a skin)
+skin.name = "Blue"
+skin.author = "Nikolai Resokav"
+skin.version = "1.0"
+
+local smallfont = love.graphics.newFont(10)
+local imagebuttonfont = love.graphics.newFont(15)
+local bordercolor = {143, 143, 143, 255}
+
+-- controls
+skin.controls = {}
+
+-- frame
+skin.controls.frame_border_color = bordercolor
+skin.controls.frame_body_color = {255, 255, 255, 150}
+skin.controls.frame_top_color = {102, 194, 255, 255}
+skin.controls.frame_name_color = {255, 255, 255, 255}
+skin.controls.frame_name_font = smallfont
+
+-- button
+skin.controls.button_border_down_color = bordercolor
+skin.controls.button_border_nohover_color = bordercolor
+skin.controls.button_border_hover_color = bordercolor
+skin.controls.button_body_down_color = {128, 204, 255, 255}
+skin.controls.button_body_nohover_color = {255, 255, 255, 255}
+skin.controls.button_body_hover_color = {153, 214, 255, 255}
+skin.controls.button_text_down_color = {255, 255, 255, 255}
+skin.controls.button_text_nohover_color = {0, 0, 0, 200}
+skin.controls.button_text_hover_color = {255, 255, 255, 255}
+skin.controls.button_text_font = smallfont
+
+-- image button
+skin.controls.imagebutton_text_down_color = {255, 255, 255, 255}
+skin.controls.imagebutton_text_nohover_color = {0, 0, 0, 200}
+skin.controls.imagebutton_text_hover_color = {255, 255, 255, 255}
+skin.controls.imagebutton_text_font = imagebuttonfont
+
+-- close button
+skin.controls.closebutton_body_down_color = {255, 255, 255, 255}
+skin.controls.closebutton_body_nohover_color = {255, 255, 255, 255}
+skin.controls.closebutton_body_hover_color = {255, 255, 255, 255}
+
+-- progress bar
+skin.controls.progressbar_border_color = bordercolor
+skin.controls.progressbar_body_color = {255, 255, 255, 255}
+skin.controls.progressbar_bar_color = {0, 255, 0, 255}
+skin.controls.progressbar_text_color = {0, 0, 0, 255}
+skin.controls.progressbar_text_font = smallfont
+
+-- list
+skin.controls.list_border_color = bordercolor
+skin.controls.list_body_color = {232, 232, 232, 255}
+
+-- scrollbar
+skin.controls.scrollbar_border_down_color = bordercolor
+skin.controls.scrollbar_border_hover_color = bordercolor
+skin.controls.scrollbar_border_nohover_color = bordercolor
+skin.controls.scrollbar_body_down_color = {128, 204, 255, 255}
+skin.controls.scrollbar_body_nohover_color = {255, 255, 255, 255}
+skin.controls.scrollbar_body_hover_color = {153, 214, 255, 255}
+
+-- scrollarea
+skin.controls.scrollarea_body_color = {200, 200, 200, 255}
+skin.controls.scrollarea_border_color = bordercolor
+
+-- scrollbody
+skin.controls.scrollbody_body_color = {0, 0, 0, 0}
+
+-- panel
+skin.controls.panel_body_color = {232, 232, 232, 255}
+skin.controls.panel_border_color = bordercolor
+
+-- tab panel
+skin.controls.tabpanel_body_color = {232, 232, 232, 255}
+skin.controls.tabpanel_border_color = bordercolor
+
+-- tab button
+skin.controls.tab_border_nohover_color = bordercolor
+skin.controls.tab_border_hover_color = bordercolor
+skin.controls.tab_body_nohover_color = {255, 255, 255, 255}
+skin.controls.tab_body_hover_color = {153, 214, 255, 255}
+skin.controls.tab_text_nohover_color = {0, 0, 0, 200}
+skin.controls.tab_text_hover_color = {255, 255, 255, 255}
+skin.controls.tab_text_font = smallfont
+
+-- multichoice
+skin.controls.multichoice_body_color = {240, 240, 240, 255}
+skin.controls.multichoice_border_color = bordercolor
+skin.controls.multichoice_text_color = {0, 0, 0, 255}
+skin.controls.multichoice_text_font = smallfont
+
+-- multichoicelist
+skin.controls.multichoicelist_body_color = {240, 240, 240, 200}
+skin.controls.multichoicelist_border_color = bordercolor
+
+-- multichoicerow
+skin.controls.multichoicerow_body_nohover_color = {240, 240, 240, 200}
+skin.controls.multichoicerow_body_hover_color = {51, 204, 255, 255}
+skin.controls.multichoicerow_border_color = {50, 50, 50, 255}
+skin.controls.multichoicerow_text_nohover_color = {0, 0, 0, 150}
+skin.controls.multichoicerow_text_hover_color = {255, 255, 255, 255}
+skin.controls.multichoicerow_text_font = smallfont
+
+-- tooltip
+skin.controls.tooltip_border_color = bordercolor
+skin.controls.tooltip_body_color = {255, 255, 255, 255}
+skin.controls.tooltip_text_color = {0, 0, 0, 255}
+skin.controls.tooltip_text_font = smallfont
+
+-- text input
+skin.controls.textinput_border_color = bordercolor
+skin.controls.textinput_body_color = {240, 240, 240, 255}
+skin.controls.textinput_blinker_color = {0, 0, 0, 255}
+
+-- slider
+skin.controls.slider_bar_color = bordercolor
+skin.controls.slider_bar_outline_color = {220, 220, 220, 255}
+skin.controls.slider_text_color = {0, 0, 0, 255}
+skin.controls.slider_text_font = smallfont
+
+-- checkbox
+skin.controls.checkbox_border_color = bordercolor
+skin.controls.checkbox_body_color = {255, 255, 255, 255}
+skin.controls.checkbox_check_color = {0, 0, 0, 255}
+skin.controls.checkbox_text_color = {0, 0, 0, 255}
+skin.controls.checkbox_text_font = smallfont
+
+-- collapsiblecategory
+skin.controls.collapsiblecategory_text_color = {0, 0, 0, 255}
+skin.controls.collapsiblecategory_body_color = {255, 255, 255, 255}
+skin.controls.collapsiblecategory_border_color = bordercolor
+
+-- columnlist
+skin.controls.columnlist_border_color = bordercolor
+skin.controls.columnlist_body_color = {232, 232, 232, 255}
+
+-- columlistarea
+skin.controls.columnlistarea_border_color = bordercolor
+skin.controls.columnlistarea_body_color = {232, 232, 232, 255}
+
+-- columnlistheader
+skin.controls.columnlistheader_border_down_color = bordercolor
+skin.controls.columnlistheader_border_nohover_color = bordercolor
+skin.controls.columnlistheader_border_hover_color = bordercolor
+skin.controls.columnlistheader_body_down_color = {128, 204, 255, 255}
+skin.controls.columnlistheader_body_nohover_color = {255, 255, 255, 255}
+skin.controls.columnlistheader_body_hover_color = {153, 214, 255, 255}
+skin.controls.columnlistheader_text_down_color = {255, 255, 255, 255}
+skin.controls.columnlistheader_text_nohover_color = {0, 0, 0, 200}
+skin.controls.columnlistheader_text_hover_color = {255, 255, 255, 255}
+skin.controls.columnlistheader_text_font = smallfont
+
+-- columnlistrow
+skin.controls.columnlistrow_border1_color = bordercolor
+skin.controls.columnlistrow_body1_color = {232, 232, 232, 255}
+skin.controls.columnlistrow_border2_color = bordercolor
+skin.controls.columnlistrow_body2_color = {200, 200, 200, 255}
+
+--[[---------------------------------------------------------
+ - func: OutlinedRectangle(object)
+ - desc: creates and outlined rectangle
+--]]---------------------------------------------------------
+function skin.OutlinedRectangle(x, y, width, height, ovt, ovb, ovl, ovr)
+
+ local ovt = ovt or false
+ local ovb = ovb or false
+ local ovl = ovl or false
+ local ovr = ovr or false
+
+ -- top
+ if ovt == false then
+ love.graphics.rectangle("fill", x, y, width, 1)
+ end
+
+ -- bottom
+ if ovb == false then
+ love.graphics.rectangle("fill", x, y + height - 1, width, 1)
+ end
+
+ -- left
+ if ovl == false then
+ love.graphics.rectangle("fill", x, y, 1, height)
+ end
+
+ -- right
+ if ovr == false then
+ love.graphics.rectangle("fill", x + width - 1, y, 1, height)
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawRepeatingImage(image, x, y, width, height)
+ - desc: draw a repeating image a box
+--]]---------------------------------------------------------
+function skin.DrawRepeatingImage(image, x, y, width, height)
+
+ local image = love.graphics.newImage(image)
+ local iwidth = image:getWidth()
+ local iheight = image:getHeight()
+ local cords = {}
+ local posx = 0
+ local posy = 0
+ local stencilfunc = function() love.graphics.rectangle("fill", x, y, width, height) end
+ local stencil = love.graphics.newStencil(stencilfunc)
+
+ while posy < height do
+
+ table.insert(cords, {posx, posy})
+
+ if posx >= width then
+ posx = 0
+ posy = posy + iheight
+ else
+ posx = posx + iwidth
+ end
+
+ end
+
+ love.graphics.setStencil(stencil)
+
+ for k, v in ipairs(cords) do
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, x + v[1], y + v[2])
+ end
+
+ love.graphics.setStencil()
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawGradient(x, y, width, height,
+ direction, color, colormod)
+ - desc: draws a gradient
+--]]---------------------------------------------------------
+function skin.DrawGradient(x, y, width, height, direction, color, colormod)
+
+ local color = color
+ local colormod = colormod or 0
+ local percent = 0
+ local once = false
+
+ if direction == "up" then
+
+ for i=1, height - 1 do
+ percent = i/height * 255
+ color = {color[1], color[2], color[3], loveframes.util.Round(percent)}
+ love.graphics.setColor(unpack(color))
+ love.graphics.rectangle("fill", x, y + i, width, 1)
+ end
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawFrame(object)
+ - desc: draws the frame object
+--]]---------------------------------------------------------
+function skin.DrawFrame(object)
+
+ local gradientcolor = {}
+
+ -- frame body
+ love.graphics.setColor(unpack(skin.controls.frame_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ -- frame top bar
+ love.graphics.setColor(unpack(skin.controls.frame_top_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), 25)
+
+ gradientcolor = {skin.controls.frame_top_color[1] - 20, skin.controls.frame_top_color[2] - 20, skin.controls.frame_top_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY(), object:GetWidth(), 25, "up", gradientcolor)
+
+ love.graphics.setColor(unpack(skin.controls.frame_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY() + 25, object:GetWidth(), 1)
+
+ -- frame name section
+ love.graphics.setFont(skin.controls.frame_name_font)
+ love.graphics.setColor(unpack(skin.controls.frame_name_color))
+ love.graphics.print(object.name, object:GetX() + 5, object:GetY() + 5)
+
+ -- frame border
+ love.graphics.setColor(unpack(skin.controls.frame_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawButton(object)
+ - desc: draws the button object
+--]]---------------------------------------------------------
+function skin.DrawButton(object)
+
+ local index = loveframes.config["ACTIVESKIN"]
+ local font = skin.controls.button_text_font
+ local twidth = font:getWidth(object.text)
+ local theight = font:getHeight(object.text)
+ local hover = object.hover
+ local down = object.down
+ local gradientcolor = {}
+
+ if down == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_down_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_down_color[1] - 20, skin.controls.button_body_down_color[2] - 20, skin.controls.button_body_down_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button text
+ love.graphics.setFont(skin.controls.button_text_font)
+ love.graphics.setColor(unpack(skin.controls.button_text_down_color))
+ love.graphics.print(object.text, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ elseif hover == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_hover_color[1] - 20, skin.controls.button_body_hover_color[2] - 20, skin.controls.button_body_hover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button text
+ love.graphics.setFont(skin.controls.button_text_font)
+ love.graphics.setColor(unpack(skin.controls.button_text_hover_color))
+ love.graphics.print(object.text, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ else
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_nohover_color[1] - 20, skin.controls.button_body_nohover_color[2] - 20, skin.controls.button_body_nohover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button text
+ love.graphics.setFont(skin.controls.button_text_font)
+ love.graphics.setColor(unpack(skin.controls.button_text_nohover_color))
+ love.graphics.print(object.text, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawCloseButton(object)
+ - desc: draws the close button object
+--]]---------------------------------------------------------
+function skin.DrawCloseButton(object)
+
+ local index = loveframes.config["ACTIVESKIN"]
+ local font = skin.controls.button_text_font
+ local twidth = font:getWidth("X")
+ local theight = font:getHeight("X")
+ local hover = object.hover
+ local down = object.down
+ local image = skin.images["close.png"]
+ local gradientcolor = {}
+
+ if down == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.closebutton_body_down_color))
+ love.graphics.draw(image, object:GetX(), object:GetY())
+
+ elseif hover == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.closebutton_body_hover_color))
+ love.graphics.draw(image, object:GetX(), object:GetY())
+
+ else
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.closebutton_body_nohover_color))
+ love.graphics.draw(image, object:GetX(), object:GetY())
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawImage(object)
+ - desc: draws the image object
+--]]---------------------------------------------------------
+function skin.DrawImage(object)
+
+ local image = object.image
+ local color = object.imagecolor
+
+ if color then
+ love.graphics.setColor(unpack(color))
+ love.graphics.draw(image)
+ else
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, object:GetX(), object:GetY())
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawImageButton(object)
+ - desc: draws the image button object
+--]]---------------------------------------------------------
+function skin.DrawImageButton(object)
+
+ local index = loveframes.config["ACTIVESKIN"]
+ local font = skin.controls.imagebutton_text_font
+ local twidth = font:getWidth(object.text)
+ local theight = font:getHeight(object.text)
+ local hover = object.hover
+ local down = object.down
+ local image = object:GetImage()
+
+ if down == true then
+
+ if image ~= false then
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, object:GetX() + 1, object:GetY() + 1)
+ end
+
+ love.graphics.setFont(font)
+ love.graphics.setColor(0, 0, 0, 255)
+ love.graphics.print(object:GetText(), object:GetX() + object:GetWidth()/2 - twidth/2 + 1, object:GetY() + object:GetHeight() - theight - 5 + 1)
+ love.graphics.setColor(unpack(skin.controls.imagebutton_text_down_color))
+ love.graphics.print(object:GetText(), object:GetX() + object:GetWidth()/2 - twidth/2 + 1, object:GetY() + object:GetHeight() - theight - 6 + 1)
+
+ elseif hover == true then
+
+ if image ~= false then
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, object:GetX(), object:GetY())
+ end
+
+ love.graphics.setFont(font)
+ love.graphics.setColor(0, 0, 0, 255)
+ love.graphics.print(object:GetText(), object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight() - theight - 5)
+ love.graphics.setColor(unpack(skin.controls.imagebutton_text_hover_color))
+ love.graphics.print(object:GetText(), object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight() - theight - 6)
+
+ else
+
+ if image ~= false then
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, object:GetX(), object:GetY())
+ end
+
+ love.graphics.setFont(font)
+ love.graphics.setColor(0, 0, 0, 255)
+ love.graphics.print(object:GetText(), object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight() - theight - 5)
+ love.graphics.setColor(unpack(skin.controls.imagebutton_text_down_color))
+ love.graphics.print(object:GetText(), object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight() - theight - 6)
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawProgressBar(object)
+ - desc: draws the progress bar object
+--]]---------------------------------------------------------
+function skin.DrawProgressBar(object)
+
+ local font = skin.controls.progressbar_text_font
+ local twidth = font:getWidth(object.value .. "/" ..object.max)
+ local theight = font:getHeight(object.value .. "/" ..object.max)
+ local gradientcolor = {}
+
+ -- progress bar body
+ love.graphics.setColor(unpack(skin.controls.progressbar_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.progressbar_bar_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object.progress, object:GetHeight())
+ gradientcolor = {skin.controls.progressbar_bar_color[1], skin.controls.progressbar_bar_color[2] - 20, skin.controls.progressbar_bar_color[3], 255}
+ skin.DrawGradient(object:GetX(), object:GetY(), object.progress, object:GetHeight(), "up", gradientcolor)
+ love.graphics.setFont(font)
+ love.graphics.setColor(unpack(skin.controls.progressbar_text_color))
+ love.graphics.print(object.value .. "/" ..object.max, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- progress bar border
+ love.graphics.setColor(unpack(skin.controls.progressbar_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawScrollArea(object)
+ - desc: draws the scroll area object
+--]]---------------------------------------------------------
+function skin.DrawScrollArea(object)
+
+ love.graphics.setColor(unpack(skin.controls.scrollarea_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.scrollarea_border_color))
+
+ if object.bartype == "vertical" then
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight(), true, true)
+ elseif object.bartype == "horizontal" then
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight(), false, false, true, true)
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawScrollBar(object)
+ - desc: draws the scroll bar object
+--]]---------------------------------------------------------
+function skin.DrawScrollBar(object)
+
+ local gradientcolor = {}
+
+ if object.dragging == true then
+ love.graphics.setColor(unpack(skin.controls.scrollbar_body_down_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+ gradientcolor = {skin.controls.scrollbar_body_down_color[1] - 20, skin.controls.scrollbar_body_down_color[2] - 20, skin.controls.scrollbar_body_down_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+ love.graphics.setColor(unpack(skin.controls.scrollbar_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ elseif object.hover == true then
+ love.graphics.setColor(unpack(skin.controls.scrollbar_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+ gradientcolor = {skin.controls.scrollbar_body_hover_color[1] - 20, skin.controls.scrollbar_body_hover_color[2] - 20, skin.controls.scrollbar_body_hover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+ love.graphics.setColor(unpack(skin.controls.scrollbar_border_hover_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ else
+ love.graphics.setColor(unpack(skin.controls.scrollbar_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+ gradientcolor = {skin.controls.scrollbar_body_nohover_color[1] - 20, skin.controls.scrollbar_body_nohover_color[2] - 20, skin.controls.scrollbar_body_nohover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+ love.graphics.setColor(unpack(skin.controls.scrollbar_border_nohover_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ end
+
+ if object.bartype == "vertical" then
+ love.graphics.setColor(unpack(skin.controls.scrollbar_border_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + 3, object:GetY() + object:GetHeight()/2 - 3, object:GetWidth() - 6, 1)
+ love.graphics.rectangle("fill", object:GetX() + 3, object:GetY() + object:GetHeight()/2, object:GetWidth() - 6, 1)
+ love.graphics.rectangle("fill", object:GetX() + 3, object:GetY() + object:GetHeight()/2 + 3, object:GetWidth() - 6, 1)
+ else
+ love.graphics.setColor(unpack(skin.controls.scrollbar_border_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + object:GetWidth()/2 - 3, object:GetY() + 3, 1, object:GetHeight() - 6)
+ love.graphics.rectangle("fill", object:GetX() + object:GetWidth()/2, object:GetY() + 3, 1, object:GetHeight() - 6)
+ love.graphics.rectangle("fill", object:GetX() + object:GetWidth()/2 + 3, object:GetY() + 3, 1, object:GetHeight() - 6)
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawScrollBody(object)
+ - desc: draws the scroll body object
+--]]---------------------------------------------------------
+function skin.DrawScrollBody(object)
+
+ love.graphics.setColor(unpack(skin.controls.scrollbody_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawPanel(object)
+ - desc: draws the panel object
+--]]---------------------------------------------------------
+function skin.DrawPanel(object)
+
+ love.graphics.setColor(unpack(skin.controls.panel_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.panel_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawList(object)
+ - desc: draws the list object
+--]]---------------------------------------------------------
+function skin.DrawList(object)
+
+ love.graphics.setColor(unpack(skin.controls.list_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawList(object)
+ - desc: used to draw over the object and it's children
+--]]---------------------------------------------------------
+function skin.DrawOverList(object)
+
+ love.graphics.setColor(unpack(skin.controls.list_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawTabPanel(object)
+ - desc: draws the tab panel object
+--]]---------------------------------------------------------
+function skin.DrawTabPanel(object)
+
+ local buttonheight = object:GetHeightOfButtons()
+
+ love.graphics.setColor(unpack(skin.controls.tabpanel_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY() + buttonheight, object:GetWidth(), object:GetHeight() - buttonheight)
+ love.graphics.setColor(unpack(skin.controls.tabpanel_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY() + buttonheight - 1, object:GetWidth(), object:GetHeight() - buttonheight + 2)
+
+ object:SetScrollButtonSize(15, buttonheight)
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawTabButton(object)
+ - desc: draws the tab button object
+--]]---------------------------------------------------------
+function skin.DrawTabButton(object)
+
+ local index = loveframes.config["ACTIVESKIN"]
+ local font = skin.controls.tab_text_font
+ local twidth = font:getWidth(object.text)
+ local theight = font:getHeight(object.text)
+ local hover = object.hover
+ local activetab = object.activetab
+ local image = object.image
+ local gradientcolor = {}
+
+ local imagewidth
+ local imageheight
+
+ if image then
+ imagewidth = image:getWidth()
+ imageheight = image:getHeight()
+ end
+
+ if object.tabnumber == object.parent.tab then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.tab_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ gradientcolor = {skin.controls.tab_body_hover_color[1] - 20, skin.controls.tab_body_hover_color[2] - 20, skin.controls.tab_body_hover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ love.graphics.setColor(unpack(skin.controls.tabpanel_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ if image then
+ -- button image
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, object:GetX() + 5, object:GetY() + object:GetHeight()/2 - imageheight/2)
+ -- button text
+ love.graphics.setFont(skin.controls.tab_text_font)
+ love.graphics.setColor(unpack(skin.controls.tab_text_hover_color))
+ love.graphics.print(object.text, object:GetX() + imagewidth + 10, object:GetY() + object:GetHeight()/2 - theight/2)
+ else
+ -- button text
+ love.graphics.setFont(skin.controls.tab_text_font)
+ love.graphics.setColor(unpack(skin.controls.tab_text_hover_color))
+ love.graphics.print(object.text, object:GetX() + 5, object:GetY() + object:GetHeight()/2 - theight/2)
+ end
+
+ else
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.tab_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ gradientcolor = {skin.controls.tab_body_nohover_color[1] - 20, skin.controls.tab_body_nohover_color[2] - 20, skin.controls.tab_body_nohover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ love.graphics.setColor(unpack(skin.controls.tabpanel_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ if image then
+ -- button image
+ love.graphics.setColor(255, 255, 255, 150)
+ love.graphics.draw(image, object:GetX() + 5, object:GetY() + object:GetHeight()/2 - imageheight/2)
+ -- button text
+ love.graphics.setFont(skin.controls.tab_text_font)
+ love.graphics.setColor(unpack(skin.controls.tab_text_nohover_color))
+ love.graphics.print(object.text, object:GetX() + imagewidth + 10, object:GetY() + object:GetHeight()/2 - theight/2)
+ else
+ -- button text
+ love.graphics.setFont(skin.controls.tab_text_font)
+ love.graphics.setColor(unpack(skin.controls.tab_text_nohover_color))
+ love.graphics.print(object.text, object:GetX() + 5, object:GetY() + object:GetHeight()/2 - theight/2)
+ end
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawMultiChoice(object)
+ - desc: draws the multi choice object
+--]]---------------------------------------------------------
+function skin.DrawMultiChoice(object)
+
+ local image = skin.images["multichoice-arrow.png"]
+
+ love.graphics.setColor(unpack(skin.controls.multichoice_body_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ love.graphics.setColor(skin.controls.multichoice_text_color)
+ love.graphics.setFont(skin.controls.multichoice_text_font)
+
+ local h = smallfont:getHeight()
+
+ if object.choice == "" then
+ love.graphics.print(object.text, object:GetX() + 5, object:GetY() + object:GetHeight()/2 - h/2)
+ else
+ love.graphics.print(object.choice, object:GetX() + 5, object:GetY() + object:GetHeight()/2 - h/2)
+ end
+
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, object:GetX() + object:GetWidth() - 20, object:GetY() + 5)
+
+ love.graphics.setColor(unpack(skin.controls.multichoice_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawMultiChoiceList(object)
+ - desc: draws the multi choice list object
+--]]---------------------------------------------------------
+function skin.DrawMultiChoiceList(object)
+
+ love.graphics.setColor(unpack(skin.controls.multichoicelist_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+
+function skin.DrawOverMultiChoiceList(object)
+
+ love.graphics.setColor(unpack(skin.controls.multichoicelist_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawMultiChoiceRow(object)
+ - desc: draws the multi choice row object
+--]]---------------------------------------------------------
+function skin.DrawMultiChoiceRow(object)
+
+ love.graphics.setFont(skin.controls.multichoicerow_text_font)
+
+ if object.hover == true then
+ love.graphics.setColor(unpack(skin.controls.multichoicerow_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.multichoicerow_text_hover_color))
+ love.graphics.print(object.text, object:GetX() + 5, object:GetY() + 5)
+ else
+ love.graphics.setColor(unpack(skin.controls.multichoicerow_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.multichoicerow_text_nohover_color))
+ love.graphics.print(object.text, object:GetX() + 5, object:GetY() + 5)
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawToolTip(object)
+ - desc: draws the tool tip object
+--]]---------------------------------------------------------
+function skin.DrawToolTip(object)
+
+ love.graphics.setColor(unpack(skin.controls.tooltip_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.tooltip_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.tooltip_text_color))
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawText(object)
+ - desc: draws the text object
+--]]---------------------------------------------------------
+function skin.DrawText(object)
+
+ --love.graphics.setColor(0, 0, 0, 255)
+ --love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ --love.graphics.setFont(object.font)
+ --love.graphics.setColor(255, 255, 255, 255)
+ --love.graphics.print(object.text, object:GetX(), object:GetY())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawTextInput(object)
+ - desc: draws the text input object
+--]]---------------------------------------------------------
+function skin.DrawTextInput(object)
+
+ local height = object.font:getHeight("a")
+ local twidth = object.font:getWidth(object.text)
+ local focus = object:GetFocus()
+ local showblink = object:GetBlinkerVisibility()
+
+ love.graphics.setColor(unpack(skin.controls.textinput_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ object:SetTextOffsetY(object:GetHeight()/2 - height/2)
+
+ if object.xoffset ~= 0 then
+ object:SetTextOffsetX(-5)
+ else
+ object:SetTextOffsetX(5)
+ end
+
+ if showblink == true and focus == true then
+
+ love.graphics.setColor(unpack(skin.controls.textinput_blinker_color))
+
+ if object.xoffset ~= 0 then
+ love.graphics.rectangle("fill", object.blinkx, object.blinky, 1, height)
+ else
+ love.graphics.rectangle("fill", object.blinkx, object.blinky, 1, height)
+ end
+
+ end
+
+ love.graphics.setColor(unpack(skin.controls.textinput_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawScrollButton(object)
+ - desc: draws the scroll button object
+--]]---------------------------------------------------------
+function skin.DrawScrollButton(object)
+
+ local hover = object.hover
+ local down = object.down
+ local gradientcolor = {}
+
+ if down == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_down_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_down_color[1] - 20, skin.controls.button_body_down_color[2] - 20, skin.controls.button_body_down_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ elseif hover == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_hover_color[1] - 20, skin.controls.button_body_hover_color[2] - 20, skin.controls.button_body_hover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ else
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_nohover_color[1] - 20, skin.controls.button_body_nohover_color[2] - 20, skin.controls.button_body_nohover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ end
+
+ if object.scrolltype == "up" then
+ local image = skin.images["arrow-up.png"]
+ if object.hover == true then
+ love.graphics.setColor(255, 255, 255, 255)
+ else
+ love.graphics.setColor(255, 255, 255, 150)
+ end
+ love.graphics.draw(image, object:GetX() + object:GetWidth()/2 - image:getWidth()/2, object:GetY() + object:GetHeight()/2 - image:getHeight()/2)
+ elseif object.scrolltype == "down" then
+ local image = skin.images["arrow-down.png"]
+ if object.hover == true then
+ love.graphics.setColor(255, 255, 255, 255)
+ else
+ love.graphics.setColor(255, 255, 255, 150)
+ end
+ love.graphics.draw(image, object:GetX() + object:GetWidth()/2 - image:getWidth()/2, object:GetY() + object:GetHeight()/2 - image:getHeight()/2)
+ elseif object.scrolltype == "left" then
+ local image = skin.images["arrow-left.png"]
+ if object.hover == true then
+ love.graphics.setColor(255, 255, 255, 255)
+ else
+ love.graphics.setColor(255, 255, 255, 150)
+ end
+ love.graphics.draw(image, object:GetX() + object:GetWidth()/2 - image:getWidth()/2, object:GetY() + object:GetHeight()/2 - image:getHeight()/2)
+ elseif object.scrolltype == "right" then
+ local image = skin.images["arrow-right.png"]
+ if object.hover == true then
+ love.graphics.setColor(255, 255, 255, 255)
+ else
+ love.graphics.setColor(255, 255, 255, 150)
+ end
+ love.graphics.draw(image, object:GetX() + object:GetWidth()/2 - image:getWidth()/2, object:GetY() + object:GetHeight()/2 - image:getHeight()/2)
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawSlider(object)
+ - desc: draws the slider object
+--]]---------------------------------------------------------
+function skin.DrawSlider(object)
+
+ love.graphics.setColor(unpack(skin.controls.slider_bar_outline_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY() + object.ycenter - 5, object:GetWidth(), 10)
+
+ love.graphics.setColor(unpack(skin.controls.slider_bar_color))
+ love.graphics.rectangle("fill", object:GetX() + 5, object:GetY() + object.ycenter - 0.5, object:GetWidth() - 10, 1)
+
+ love.graphics.setFont(skin.controls.slider_text_font)
+
+ love.graphics.setColor(unpack(skin.controls.slider_text_color))
+ love.graphics.print(object.text, object:GetX(), object:GetY())
+
+ love.graphics.setColor(unpack(skin.controls.slider_text_color))
+ love.graphics.printf(object.value, object:GetX() + object:GetWidth(), object:GetY(), 0, "right")
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawSliderButton(object)
+ - desc: draws the slider button object
+--]]---------------------------------------------------------
+function skin.DrawSliderButton(object)
+
+ local index = loveframes.config["ACTIVESKIN"]
+ local hover = object.hover
+ local down = object.down
+ local gradientcolor = {}
+
+ if down == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_down_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_down_color[1] - 20, skin.controls.button_body_down_color[2] - 20, skin.controls.button_body_down_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ elseif hover == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_hover_color[1] - 20, skin.controls.button_body_hover_color[2] - 20, skin.controls.button_body_hover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ else
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_nohover_color[1] - 20, skin.controls.button_body_nohover_color[2] - 20, skin.controls.button_body_nohover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawCheckBox(object)
+ - desc: draws the check box object
+--]]---------------------------------------------------------
+function skin.DrawCheckBox(object)
+
+ local font = smallfont
+ local linesize = (1 * (object.boxwidth * 0.05))
+ local checked = object.checked
+ local height = font:getHeight()
+
+ love.graphics.setColor(unpack(skin.controls.checkbox_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object.boxwidth, object.boxheight)
+
+ love.graphics.setColor(unpack(skin.controls.checkbox_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object.boxwidth, object.boxheight)
+
+ if checked == true then
+
+ love.graphics.setLine(linesize, "smooth")
+
+ love.graphics.setColor(unpack(skin.controls.checkbox_check_color))
+ love.graphics.line(object:GetX() + 5 + linesize, object:GetY() + 5 + linesize, object:GetX() + object.boxwidth - 5 - linesize, object:GetY() + object.boxheight - 5 - linesize)
+ love.graphics.line(object:GetX() + object.boxwidth - 5 - linesize, object:GetY() + 5 + linesize, object:GetX() + 5 + linesize, object:GetY() + object.boxheight - 5 - linesize)
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawCollapsibleCategory(object)
+ - desc: draws the collapsible category object
+--]]---------------------------------------------------------
+function skin.DrawCollapsibleCategory(object)
+
+ local font = smallfont
+ local gradientcolor = {skin.controls.collapsiblecategory_body_color[1] - 20, skin.controls.collapsiblecategory_body_color[2] - 20, skin.controls.collapsiblecategory_body_color[3] - 20, 255}
+
+ love.graphics.setColor(unpack(skin.controls.collapsiblecategory_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ love.graphics.setColor(unpack(gradientcolor))
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ love.graphics.setColor(unpack(skin.controls.collapsiblecategory_text_color))
+ love.graphics.print(object.text, object:GetX() + 5, object:GetY() + 5)
+
+ love.graphics.setColor(unpack(skin.controls.collapsiblecategory_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawColumnList(object)
+ - desc: draws the column list object
+--]]---------------------------------------------------------
+function skin.DrawColumnList(object)
+
+ love.graphics.setColor(unpack(skin.controls.columnlist_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawColumnListHeader(object)
+ - desc: draws the column list header object
+--]]---------------------------------------------------------
+function skin.DrawColumnListHeader(object)
+
+ local font = skin.controls.columnlistheader_text_font
+ local twidth = font:getWidth(object.name)
+ local theight = font:getHeight(object.name)
+ local hover = object.hover
+ local down = object.down
+ local gradientcolor = {}
+
+ if down == true then
+
+ -- header body
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_body_down_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.columnlistheader_body_down_color[1] - 20, skin.controls.columnlistheader_body_down_color[2] - 20, skin.controls.columnlistheader_body_down_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- header name
+ love.graphics.setFont(font)
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_text_down_color))
+ love.graphics.print(object.name, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- header border
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ elseif hover == true then
+
+ -- header body
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.columnlistheader_body_hover_color[1] - 20, skin.controls.columnlistheader_body_hover_color[2] - 20, skin.controls.columnlistheader_body_hover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- header name
+ love.graphics.setFont(font)
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_text_hover_color))
+ love.graphics.print(object.name, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- header border
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ else
+
+ -- header body
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.columnlistheader_body_nohover_color[1] - 20, skin.controls.columnlistheader_body_nohover_color[2] - 20, skin.controls.columnlistheader_body_nohover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- header name
+ love.graphics.setFont(font)
+ love.graphics.setColor(unpack(skin.controls.button_text_nohover_color))
+ love.graphics.print(object.name, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- header border
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawColumnListArea(object)
+ - desc: draws the column list area object
+--]]---------------------------------------------------------
+function skin.DrawColumnListArea(object)
+
+ love.graphics.setColor(unpack(skin.controls.columnlistarea_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawOverColumnListArea(object)
+ - desc: draws the column list area object
+--]]---------------------------------------------------------
+function skin.DrawColumnListArea(object)
+
+ love.graphics.setColor(unpack(skin.controls.columnlistarea_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawColumnListRow(object)
+ - desc: draws the column list row object
+--]]---------------------------------------------------------
+function skin.DrawColumnListRow(object)
+
+ local colorindex = object:GetColorIndex()
+ local font = object:GetFont()
+ local height = font:getHeight("a")
+
+ object:SetTextPos(5, object:GetHeight()/2 - height/2)
+ object:SetTextColor(bordercolor)
+
+ if colorindex == 1 then
+
+ love.graphics.setColor(unpack(skin.controls.columnlistrow_body1_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ love.graphics.setColor(unpack(skin.controls.columnlistrow_border1_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ else
+
+ love.graphics.setColor(unpack(skin.controls.columnlistrow_body2_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ love.graphics.setColor(unpack(skin.controls.columnlistrow_border2_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ end
+
+end
+
+-- register the skin
+loveframes.skins.Register(skin)
\ No newline at end of file
diff --git a/skins/Orange/images/arrow-down.png b/skins/Orange/images/arrow-down.png
new file mode 100644
index 0000000..14e3918
Binary files /dev/null and b/skins/Orange/images/arrow-down.png differ
diff --git a/skins/Orange/images/arrow-left.png b/skins/Orange/images/arrow-left.png
new file mode 100644
index 0000000..7aff59e
Binary files /dev/null and b/skins/Orange/images/arrow-left.png differ
diff --git a/skins/Orange/images/arrow-right.png b/skins/Orange/images/arrow-right.png
new file mode 100644
index 0000000..159cd41
Binary files /dev/null and b/skins/Orange/images/arrow-right.png differ
diff --git a/skins/Orange/images/arrow-up.png b/skins/Orange/images/arrow-up.png
new file mode 100644
index 0000000..20d04c7
Binary files /dev/null and b/skins/Orange/images/arrow-up.png differ
diff --git a/skins/Orange/images/close.png b/skins/Orange/images/close.png
new file mode 100644
index 0000000..0825add
Binary files /dev/null and b/skins/Orange/images/close.png differ
diff --git a/skins/Orange/images/multichoice-arrow.png b/skins/Orange/images/multichoice-arrow.png
new file mode 100644
index 0000000..c7294cb
Binary files /dev/null and b/skins/Orange/images/multichoice-arrow.png differ
diff --git a/skins/Orange/skin.lua b/skins/Orange/skin.lua
new file mode 100644
index 0000000..8b97b33
--- /dev/null
+++ b/skins/Orange/skin.lua
@@ -0,0 +1,1209 @@
+--[[------------------------------------------------
+ -- LÖVE Frames --
+ -- By Nikolai Resokav --
+--]]------------------------------------------------
+
+-- skin table
+local skin = {}
+
+-- skin info (you always need this in a skin)
+skin.name = "Orange"
+skin.author = "Nikolai Resokav"
+skin.version = "1.0"
+
+local smallfont = love.graphics.newFont(10)
+local imagebuttonfont = love.graphics.newFont(15)
+local bordercolor = {143, 143, 143, 255}
+
+-- controls
+skin.controls = {}
+
+-- frame
+skin.controls.frame_border_color = bordercolor
+skin.controls.frame_body_color = {255, 255, 255, 150}
+skin.controls.frame_top_color = {255, 153, 0, 255}
+skin.controls.frame_name_color = {255, 255, 255, 255}
+skin.controls.frame_name_font = smallfont
+
+-- button
+skin.controls.button_border_down_color = bordercolor
+skin.controls.button_border_nohover_color = bordercolor
+skin.controls.button_border_hover_color = bordercolor
+skin.controls.button_body_down_color = {255, 173, 51, 255}
+skin.controls.button_body_nohover_color = {255, 255, 255, 255}
+skin.controls.button_body_hover_color = {255, 184, 77, 255}
+skin.controls.button_text_down_color = {255, 255, 255, 255}
+skin.controls.button_text_nohover_color = {0, 0, 0, 200}
+skin.controls.button_text_hover_color = {255, 255, 255, 255}
+skin.controls.button_text_font = smallfont
+
+-- image button
+skin.controls.imagebutton_text_down_color = {255, 255, 255, 255}
+skin.controls.imagebutton_text_nohover_color = {0, 0, 0, 200}
+skin.controls.imagebutton_text_hover_color = {255, 255, 255, 255}
+skin.controls.imagebutton_text_font = imagebuttonfont
+
+-- close button
+skin.controls.closebutton_body_down_color = {255, 255, 255, 255}
+skin.controls.closebutton_body_nohover_color = {255, 255, 255, 255}
+skin.controls.closebutton_body_hover_color = {255, 255, 255, 255}
+
+-- progress bar
+skin.controls.progressbar_border_color = bordercolor
+skin.controls.progressbar_body_color = {255, 255, 255, 255}
+skin.controls.progressbar_bar_color = {0, 255, 0, 255}
+skin.controls.progressbar_text_color = {0, 0, 0, 255}
+skin.controls.progressbar_text_font = smallfont
+
+-- list
+skin.controls.list_border_color = bordercolor
+skin.controls.list_body_color = {232, 232, 232, 255}
+
+-- scrollbar
+skin.controls.scrollbar_border_down_color = bordercolor
+skin.controls.scrollbar_border_hover_color = bordercolor
+skin.controls.scrollbar_border_nohover_color = bordercolor
+skin.controls.scrollbar_body_down_color = {255, 173, 51, 255}
+skin.controls.scrollbar_body_nohover_color = {255, 255, 255, 255}
+skin.controls.scrollbar_body_hover_color = {255, 184, 77, 255}
+
+-- scrollarea
+skin.controls.scrollarea_body_color = {200, 200, 200, 255}
+skin.controls.scrollarea_border_color = bordercolor
+
+-- scrollbody
+skin.controls.scrollbody_body_color = {0, 0, 0, 0}
+
+-- panel
+skin.controls.panel_body_color = {232, 232, 232, 255}
+skin.controls.panel_border_color = bordercolor
+
+-- tab panel
+skin.controls.tabpanel_body_color = {232, 232, 232, 255}
+skin.controls.tabpanel_border_color = bordercolor
+
+-- tab button
+skin.controls.tab_border_nohover_color = bordercolor
+skin.controls.tab_border_hover_color = bordercolor
+skin.controls.tab_body_nohover_color = {255, 255, 255, 255}
+skin.controls.tab_body_hover_color = {255, 173, 51, 255}
+skin.controls.tab_text_nohover_color = {0, 0, 0, 200}
+skin.controls.tab_text_hover_color = {255, 255, 255, 255}
+skin.controls.tab_text_font = smallfont
+
+-- multichoice
+skin.controls.multichoice_body_color = {240, 240, 240, 255}
+skin.controls.multichoice_border_color = bordercolor
+skin.controls.multichoice_text_color = {0, 0, 0, 255}
+skin.controls.multichoice_text_font = smallfont
+
+-- multichoicelist
+skin.controls.multichoicelist_body_color = {240, 240, 240, 200}
+skin.controls.multichoicelist_border_color = bordercolor
+
+-- multichoicerow
+skin.controls.multichoicerow_body_nohover_color = {240, 240, 240, 200}
+skin.controls.multichoicerow_body_hover_color = {255, 117, 26, 255}
+skin.controls.multichoicerow_border_color = {50, 50, 50, 255}
+skin.controls.multichoicerow_text_nohover_color = {0, 0, 0, 150}
+skin.controls.multichoicerow_text_hover_color = {255, 255, 255, 255}
+skin.controls.multichoicerow_text_font = smallfont
+
+-- tooltip
+skin.controls.tooltip_border_color = bordercolor
+skin.controls.tooltip_body_color = {255, 255, 255, 255}
+skin.controls.tooltip_text_color = {0, 0, 0, 255}
+skin.controls.tooltip_text_font = smallfont
+
+-- text input
+skin.controls.textinput_border_color = bordercolor
+skin.controls.textinput_body_color = {240, 240, 240, 255}
+skin.controls.textinput_blinker_color = {0, 0, 0, 255}
+
+-- slider
+skin.controls.slider_bar_color = bordercolor
+skin.controls.slider_bar_outline_color = {220, 220, 220, 255}
+skin.controls.slider_text_color = {0, 0, 0, 255}
+skin.controls.slider_text_font = smallfont
+
+-- checkbox
+skin.controls.checkbox_border_color = bordercolor
+skin.controls.checkbox_body_color = {255, 255, 255, 255}
+skin.controls.checkbox_check_color = {0, 0, 0, 255}
+skin.controls.checkbox_text_color = {0, 0, 0, 255}
+skin.controls.checkbox_text_font = smallfont
+
+-- collapsiblecategory
+skin.controls.collapsiblecategory_text_color = {0, 0, 0, 255}
+skin.controls.collapsiblecategory_body_color = {255, 255, 255, 255}
+skin.controls.collapsiblecategory_border_color = bordercolor
+
+-- columnlist
+skin.controls.columnlist_border_color = bordercolor
+skin.controls.columnlist_body_color = {232, 232, 232, 255}
+
+-- columlistarea
+skin.controls.columnlistarea_border_color = bordercolor
+skin.controls.columnlistarea_body_color = {232, 232, 232, 255}
+
+-- columnlistheader
+skin.controls.columnlistheader_border_down_color = bordercolor
+skin.controls.columnlistheader_border_nohover_color = bordercolor
+skin.controls.columnlistheader_border_hover_color = bordercolor
+skin.controls.columnlistheader_body_down_color = {255, 173, 51, 255}
+skin.controls.columnlistheader_body_nohover_color = {255, 255, 255, 255}
+skin.controls.columnlistheader_body_hover_color = {255, 184, 77, 255}
+skin.controls.columnlistheader_text_down_color = {255, 255, 255, 255}
+skin.controls.columnlistheader_text_nohover_color = {0, 0, 0, 200}
+skin.controls.columnlistheader_text_hover_color = {255, 255, 255, 255}
+skin.controls.columnlistheader_text_font = smallfont
+
+-- columnlistrow
+skin.controls.columnlistrow_border1_color = bordercolor
+skin.controls.columnlistrow_body1_color = {232, 232, 232, 255}
+skin.controls.columnlistrow_border2_color = bordercolor
+skin.controls.columnlistrow_body2_color = {200, 200, 200, 255}
+
+--[[---------------------------------------------------------
+ - func: OutlinedRectangle(object)
+ - desc: creates and outlined rectangle
+--]]---------------------------------------------------------
+function skin.OutlinedRectangle(x, y, width, height, ovt, ovb, ovl, ovr)
+
+ local ovt = ovt or false
+ local ovb = ovb or false
+ local ovl = ovl or false
+ local ovr = ovr or false
+
+ -- top
+ if ovt == false then
+ love.graphics.rectangle("fill", x, y, width, 1)
+ end
+
+ -- bottom
+ if ovb == false then
+ love.graphics.rectangle("fill", x, y + height - 1, width, 1)
+ end
+
+ -- left
+ if ovl == false then
+ love.graphics.rectangle("fill", x, y, 1, height)
+ end
+
+ -- right
+ if ovr == false then
+ love.graphics.rectangle("fill", x + width - 1, y, 1, height)
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawRepeatingImage(image, x, y, width, height)
+ - desc: draw a repeating image a box
+--]]---------------------------------------------------------
+function skin.DrawRepeatingImage(image, x, y, width, height)
+
+ local image = love.graphics.newImage(image)
+ local iwidth = image:getWidth()
+ local iheight = image:getHeight()
+ local cords = {}
+ local posx = 0
+ local posy = 0
+ local stencilfunc = function() love.graphics.rectangle("fill", x, y, width, height) end
+ local stencil = love.graphics.newStencil(stencilfunc)
+
+ while posy < height do
+
+ table.insert(cords, {posx, posy})
+
+ if posx >= width then
+ posx = 0
+ posy = posy + iheight
+ else
+ posx = posx + iwidth
+ end
+
+ end
+
+ love.graphics.setStencil(stencil)
+
+ for k, v in ipairs(cords) do
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, x + v[1], y + v[2])
+ end
+
+ love.graphics.setStencil()
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawGradient(x, y, width, height,
+ direction, color, colormod)
+ - desc: draws a gradient
+--]]---------------------------------------------------------
+function skin.DrawGradient(x, y, width, height, direction, color, colormod)
+
+ local color = color
+ local colormod = colormod or 0
+ local percent = 0
+ local once = false
+
+ if direction == "up" then
+
+ for i=1, height - 1 do
+ percent = i/height * 255
+ color = {color[1], color[2], color[3], loveframes.util.Round(percent)}
+ love.graphics.setColor(unpack(color))
+ love.graphics.rectangle("fill", x, y + i, width, 1)
+ end
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawFrame(object)
+ - desc: draws the frame object
+--]]---------------------------------------------------------
+function skin.DrawFrame(object)
+
+ local gradientcolor = {}
+
+ -- frame body
+ love.graphics.setColor(unpack(skin.controls.frame_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ -- frame top bar
+ love.graphics.setColor(unpack(skin.controls.frame_top_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), 25)
+
+ gradientcolor = {skin.controls.frame_top_color[1] - 20, skin.controls.frame_top_color[2] - 20, 0, 255}
+ skin.DrawGradient(object:GetX(), object:GetY(), object:GetWidth(), 25, "up", gradientcolor)
+
+ love.graphics.setColor(unpack(skin.controls.frame_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY() + 25, object:GetWidth(), 1)
+
+ -- frame name section
+ love.graphics.setFont(skin.controls.frame_name_font)
+ love.graphics.setColor(unpack(skin.controls.frame_name_color))
+ love.graphics.print(object.name, object:GetX() + 5, object:GetY() + 5)
+
+ -- frame border
+ love.graphics.setColor(unpack(skin.controls.frame_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawButton(object)
+ - desc: draws the button object
+--]]---------------------------------------------------------
+function skin.DrawButton(object)
+
+ local index = loveframes.config["ACTIVESKIN"]
+ local font = skin.controls.button_text_font
+ local twidth = font:getWidth(object.text)
+ local theight = font:getHeight(object.text)
+ local hover = object.hover
+ local down = object.down
+ local gradientcolor = {}
+
+ if down == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_down_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_down_color[1] - 20, skin.controls.button_body_down_color[2] - 20, skin.controls.button_body_down_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button text
+ love.graphics.setFont(skin.controls.button_text_font)
+ love.graphics.setColor(unpack(skin.controls.button_text_down_color))
+ love.graphics.print(object.text, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ elseif hover == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_hover_color[1] - 20, skin.controls.button_body_hover_color[2] - 20, skin.controls.button_body_hover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button text
+ love.graphics.setFont(skin.controls.button_text_font)
+ love.graphics.setColor(unpack(skin.controls.button_text_hover_color))
+ love.graphics.print(object.text, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ else
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_nohover_color[1] - 20, skin.controls.button_body_nohover_color[2] - 20, skin.controls.button_body_nohover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button text
+ love.graphics.setFont(skin.controls.button_text_font)
+ love.graphics.setColor(unpack(skin.controls.button_text_nohover_color))
+ love.graphics.print(object.text, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawCloseButton(object)
+ - desc: draws the close button object
+--]]---------------------------------------------------------
+function skin.DrawCloseButton(object)
+
+ local index = loveframes.config["ACTIVESKIN"]
+ local font = skin.controls.button_text_font
+ local twidth = font:getWidth("X")
+ local theight = font:getHeight("X")
+ local hover = object.hover
+ local down = object.down
+ local image = skin.images["close.png"]
+ local gradientcolor = {}
+
+ if down == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.closebutton_body_down_color))
+ love.graphics.draw(image, object:GetX(), object:GetY())
+
+ elseif hover == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.closebutton_body_hover_color))
+ love.graphics.draw(image, object:GetX(), object:GetY())
+
+ else
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.closebutton_body_nohover_color))
+ love.graphics.draw(image, object:GetX(), object:GetY())
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawImage(object)
+ - desc: draws the image object
+--]]---------------------------------------------------------
+function skin.DrawImage(object)
+
+ local image = object.image
+ local color = object.imagecolor
+
+ if color then
+ love.graphics.setColor(unpack(color))
+ love.graphics.draw(image)
+ else
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, object:GetX(), object:GetY())
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawImageButton(object)
+ - desc: draws the image button object
+--]]---------------------------------------------------------
+
+function skin.DrawImageButton(object)
+
+ local index = loveframes.config["ACTIVESKIN"]
+ local font = skin.controls.imagebutton_text_font
+ local twidth = font:getWidth(object.text)
+ local theight = font:getHeight(object.text)
+ local hover = object.hover
+ local down = object.down
+ local image = object:GetImage()
+
+ if down == true then
+
+ if image ~= false then
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, object:GetX() + 1, object:GetY() + 1)
+ end
+
+ love.graphics.setFont(font)
+ love.graphics.setColor(0, 0, 0, 255)
+ love.graphics.print(object:GetText(), object:GetX() + object:GetWidth()/2 - twidth/2 + 1, object:GetY() + object:GetHeight() - theight - 5 + 1)
+ love.graphics.setColor(unpack(skin.controls.imagebutton_text_down_color))
+ love.graphics.print(object:GetText(), object:GetX() + object:GetWidth()/2 - twidth/2 + 1, object:GetY() + object:GetHeight() - theight - 6 + 1)
+
+ elseif hover == true then
+
+ if image ~= false then
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, object:GetX(), object:GetY())
+ end
+
+ love.graphics.setFont(font)
+ love.graphics.setColor(0, 0, 0, 255)
+ love.graphics.print(object:GetText(), object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight() - theight - 5)
+ love.graphics.setColor(unpack(skin.controls.imagebutton_text_hover_color))
+ love.graphics.print(object:GetText(), object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight() - theight - 6)
+
+ else
+
+ if image ~= false then
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, object:GetX(), object:GetY())
+ end
+
+ love.graphics.setFont(font)
+ love.graphics.setColor(0, 0, 0, 255)
+ love.graphics.print(object:GetText(), object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight() - theight - 5)
+ love.graphics.setColor(unpack(skin.controls.imagebutton_text_down_color))
+ love.graphics.print(object:GetText(), object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight() - theight - 6)
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawProgressBar(object)
+ - desc: draws the progress bar object
+--]]---------------------------------------------------------
+function skin.DrawProgressBar(object)
+
+ local font = skin.controls.progressbar_text_font
+ local twidth = font:getWidth(object.value .. "/" ..object.max)
+ local theight = font:getHeight(object.value .. "/" ..object.max)
+ local gradientcolor = {}
+
+ -- progress bar body
+ love.graphics.setColor(unpack(skin.controls.progressbar_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.progressbar_bar_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object.progress, object:GetHeight())
+ gradientcolor = {skin.controls.progressbar_bar_color[1], skin.controls.progressbar_bar_color[2] - 20, skin.controls.progressbar_bar_color[3], 255}
+ skin.DrawGradient(object:GetX(), object:GetY(), object.progress, object:GetHeight(), "up", gradientcolor)
+ love.graphics.setFont(font)
+ love.graphics.setColor(unpack(skin.controls.progressbar_text_color))
+ love.graphics.print(object.value .. "/" ..object.max, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- progress bar border
+ love.graphics.setColor(unpack(skin.controls.progressbar_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawScrollArea(object)
+ - desc: draws the scroll area object
+--]]---------------------------------------------------------
+function skin.DrawScrollArea(object)
+
+ love.graphics.setColor(unpack(skin.controls.scrollarea_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.scrollarea_border_color))
+
+ if object.bartype == "vertical" then
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight(), true, true)
+ elseif object.bartype == "horizontal" then
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight(), false, false, true, true)
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawScrollBar(object)
+ - desc: draws the scroll bar object
+--]]---------------------------------------------------------
+function skin.DrawScrollBar(object)
+
+ local gradientcolor = {}
+
+ if object.dragging == true then
+ love.graphics.setColor(unpack(skin.controls.scrollbar_body_down_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+ gradientcolor = {skin.controls.scrollbar_body_down_color[1] - 20, skin.controls.scrollbar_body_down_color[2] - 20, skin.controls.scrollbar_body_down_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+ love.graphics.setColor(unpack(skin.controls.scrollbar_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ elseif object.hover == true then
+ love.graphics.setColor(unpack(skin.controls.scrollbar_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+ gradientcolor = {skin.controls.scrollbar_body_hover_color[1] - 20, skin.controls.scrollbar_body_hover_color[2] - 20, skin.controls.scrollbar_body_hover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+ love.graphics.setColor(unpack(skin.controls.scrollbar_border_hover_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ else
+ love.graphics.setColor(unpack(skin.controls.scrollbar_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+ gradientcolor = {skin.controls.scrollbar_body_nohover_color[1] - 20, skin.controls.scrollbar_body_nohover_color[2] - 20, skin.controls.scrollbar_body_nohover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+ love.graphics.setColor(unpack(skin.controls.scrollbar_border_nohover_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ end
+
+ if object.bartype == "vertical" then
+ love.graphics.setColor(unpack(skin.controls.scrollbar_border_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + 3, object:GetY() + object:GetHeight()/2 - 3, object:GetWidth() - 6, 1)
+ love.graphics.rectangle("fill", object:GetX() + 3, object:GetY() + object:GetHeight()/2, object:GetWidth() - 6, 1)
+ love.graphics.rectangle("fill", object:GetX() + 3, object:GetY() + object:GetHeight()/2 + 3, object:GetWidth() - 6, 1)
+ else
+ love.graphics.setColor(unpack(skin.controls.scrollbar_border_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + object:GetWidth()/2 - 3, object:GetY() + 3, 1, object:GetHeight() - 6)
+ love.graphics.rectangle("fill", object:GetX() + object:GetWidth()/2, object:GetY() + 3, 1, object:GetHeight() - 6)
+ love.graphics.rectangle("fill", object:GetX() + object:GetWidth()/2 + 3, object:GetY() + 3, 1, object:GetHeight() - 6)
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawScrollBody(object)
+ - desc: draws the scroll body object
+--]]---------------------------------------------------------
+function skin.DrawScrollBody(object)
+
+ love.graphics.setColor(unpack(skin.controls.scrollbody_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawPanel(object)
+ - desc: draws the panel object
+--]]---------------------------------------------------------
+function skin.DrawPanel(object)
+
+ love.graphics.setColor(unpack(skin.controls.panel_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.panel_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawList(object)
+ - desc: draws the list object
+--]]---------------------------------------------------------
+function skin.DrawList(object)
+
+ love.graphics.setColor(unpack(skin.controls.list_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawList(object)
+ - desc: used to draw over the object and it's children
+--]]---------------------------------------------------------
+function skin.DrawOverList(object)
+
+ love.graphics.setColor(unpack(skin.controls.list_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawTabPanel(object)
+ - desc: draws the tab panel object
+--]]---------------------------------------------------------
+function skin.DrawTabPanel(object)
+
+ local buttonheight = object:GetHeightOfButtons()
+
+ love.graphics.setColor(unpack(skin.controls.tabpanel_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY() + buttonheight, object:GetWidth(), object:GetHeight() - buttonheight)
+ love.graphics.setColor(unpack(skin.controls.tabpanel_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY() + buttonheight - 1, object:GetWidth(), object:GetHeight() - buttonheight + 2)
+
+ object:SetScrollButtonSize(15, buttonheight)
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawTabButton(object)
+ - desc: draws the tab button object
+--]]---------------------------------------------------------
+function skin.DrawTabButton(object)
+
+ local index = loveframes.config["ACTIVESKIN"]
+ local font = skin.controls.tab_text_font
+ local twidth = font:getWidth(object.text)
+ local theight = font:getHeight(object.text)
+ local hover = object.hover
+ local activetab = object.activetab
+ local image = object.image
+ local gradientcolor = {}
+
+ local imagewidth
+ local imageheight
+
+ if image then
+ imagewidth = image:getWidth()
+ imageheight = image:getHeight()
+ end
+
+ if object.tabnumber == object.parent.tab then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.tab_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ gradientcolor = {skin.controls.tab_body_hover_color[1] - 20, skin.controls.tab_body_hover_color[2] - 20, skin.controls.tab_body_hover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ love.graphics.setColor(unpack(skin.controls.tabpanel_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ if image then
+ -- button image
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, object:GetX() + 5, object:GetY() + object:GetHeight()/2 - imageheight/2)
+ -- button text
+ love.graphics.setFont(skin.controls.tab_text_font)
+ love.graphics.setColor(unpack(skin.controls.tab_text_hover_color))
+ love.graphics.print(object.text, object:GetX() + imagewidth + 10, object:GetY() + object:GetHeight()/2 - theight/2)
+ else
+ -- button text
+ love.graphics.setFont(skin.controls.tab_text_font)
+ love.graphics.setColor(unpack(skin.controls.tab_text_hover_color))
+ love.graphics.print(object.text, object:GetX() + 5, object:GetY() + object:GetHeight()/2 - theight/2)
+ end
+
+ else
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.tab_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ gradientcolor = {skin.controls.tab_body_nohover_color[1] - 20, skin.controls.tab_body_nohover_color[2] - 20, skin.controls.tab_body_nohover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ love.graphics.setColor(unpack(skin.controls.tabpanel_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ if image then
+ -- button image
+ love.graphics.setColor(255, 255, 255, 150)
+ love.graphics.draw(image, object:GetX() + 5, object:GetY() + object:GetHeight()/2 - imageheight/2)
+ -- button text
+ love.graphics.setFont(skin.controls.tab_text_font)
+ love.graphics.setColor(unpack(skin.controls.tab_text_nohover_color))
+ love.graphics.print(object.text, object:GetX() + imagewidth + 10, object:GetY() + object:GetHeight()/2 - theight/2)
+ else
+ -- button text
+ love.graphics.setFont(skin.controls.tab_text_font)
+ love.graphics.setColor(unpack(skin.controls.tab_text_nohover_color))
+ love.graphics.print(object.text, object:GetX() + 5, object:GetY() + object:GetHeight()/2 - theight/2)
+ end
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawMultiChoice(object)
+ - desc: draws the multi choice object
+--]]---------------------------------------------------------
+function skin.DrawMultiChoice(object)
+
+ local image = skin.images["multichoice-arrow.png"]
+
+ love.graphics.setColor(unpack(skin.controls.multichoice_body_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ love.graphics.setColor(skin.controls.multichoice_text_color)
+ love.graphics.setFont(skin.controls.multichoice_text_font)
+
+ local h = smallfont:getHeight()
+
+ if object.choice == "" then
+ love.graphics.print(object.text, object:GetX() + 5, object:GetY() + object:GetHeight()/2 - h/2)
+ else
+ love.graphics.print(object.choice, object:GetX() + 5, object:GetY() + object:GetHeight()/2 - h/2)
+ end
+
+ love.graphics.setColor(255, 255, 255, 255)
+ love.graphics.draw(image, object:GetX() + object:GetWidth() - 20, object:GetY() + 5)
+
+ love.graphics.setColor(unpack(skin.controls.multichoice_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawMultiChoiceList(object)
+ - desc: draws the multi choice list object
+--]]---------------------------------------------------------
+function skin.DrawMultiChoiceList(object)
+
+ love.graphics.setColor(unpack(skin.controls.multichoicelist_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+
+function skin.DrawOverMultiChoiceList(object)
+
+ love.graphics.setColor(unpack(skin.controls.multichoicelist_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawMultiChoiceRow(object)
+ - desc: draws the multi choice row object
+--]]---------------------------------------------------------
+function skin.DrawMultiChoiceRow(object)
+
+ love.graphics.setFont(skin.controls.multichoicerow_text_font)
+
+ if object.hover == true then
+ love.graphics.setColor(unpack(skin.controls.multichoicerow_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.multichoicerow_text_hover_color))
+ love.graphics.print(object.text, object:GetX() + 5, object:GetY() + 5)
+ else
+ love.graphics.setColor(unpack(skin.controls.multichoicerow_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.multichoicerow_text_nohover_color))
+ love.graphics.print(object.text, object:GetX() + 5, object:GetY() + 5)
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawToolTip(object)
+ - desc: draws the tool tip object
+--]]---------------------------------------------------------
+function skin.DrawToolTip(object)
+
+ love.graphics.setColor(unpack(skin.controls.tooltip_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.tooltip_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ love.graphics.setColor(unpack(skin.controls.tooltip_text_color))
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawText(object)
+ - desc: draws the text object
+--]]---------------------------------------------------------
+function skin.DrawText(object)
+
+ --love.graphics.setColor(0, 0, 0, 255)
+ --love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+ --love.graphics.setFont(object.font)
+ --love.graphics.setColor(255, 255, 255, 255)
+ --love.graphics.print(object.text, object:GetX(), object:GetY())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawTextInput(object)
+ - desc: draws the text input object
+--]]---------------------------------------------------------
+function skin.DrawTextInput(object)
+
+ local height = object.font:getHeight("a")
+ local twidth = object.font:getWidth(object.text)
+ local focus = object:GetFocus()
+ local showblink = object:GetBlinkerVisibility()
+
+ love.graphics.setColor(unpack(skin.controls.textinput_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ object:SetTextOffsetY(object:GetHeight()/2 - height/2)
+
+ if object.xoffset ~= 0 then
+ object:SetTextOffsetX(-5)
+ else
+ object:SetTextOffsetX(5)
+ end
+
+ if showblink == true and focus == true then
+
+ love.graphics.setColor(unpack(skin.controls.textinput_blinker_color))
+
+ if object.xoffset ~= 0 then
+ love.graphics.rectangle("fill", object.blinkx, object.blinky, 1, height)
+ else
+ love.graphics.rectangle("fill", object.blinkx, object.blinky, 1, height)
+ end
+
+ end
+
+ love.graphics.setColor(unpack(skin.controls.textinput_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: DrawScrollButton(object)
+ - desc: draws the scroll button object
+--]]---------------------------------------------------------
+function skin.DrawScrollButton(object)
+
+ local hover = object.hover
+ local down = object.down
+ local gradientcolor = {}
+
+ if down == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_down_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_down_color[1] - 20, skin.controls.button_body_down_color[2] - 20, skin.controls.button_body_down_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ elseif hover == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_hover_color[1] - 20, skin.controls.button_body_hover_color[2] - 20, skin.controls.button_body_hover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ else
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_nohover_color[1] - 20, skin.controls.button_body_nohover_color[2] - 20, skin.controls.button_body_nohover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ end
+
+ if object.scrolltype == "up" then
+ local image = skin.images["arrow-up.png"]
+ if object.hover == true then
+ love.graphics.setColor(255, 255, 255, 255)
+ else
+ love.graphics.setColor(255, 255, 255, 150)
+ end
+ love.graphics.draw(image, object:GetX() + object:GetWidth()/2 - image:getWidth()/2, object:GetY() + object:GetHeight()/2 - image:getHeight()/2)
+ elseif object.scrolltype == "down" then
+ local image = skin.images["arrow-down.png"]
+ if object.hover == true then
+ love.graphics.setColor(255, 255, 255, 255)
+ else
+ love.graphics.setColor(255, 255, 255, 150)
+ end
+ love.graphics.draw(image, object:GetX() + object:GetWidth()/2 - image:getWidth()/2, object:GetY() + object:GetHeight()/2 - image:getHeight()/2)
+ elseif object.scrolltype == "left" then
+ local image = skin.images["arrow-left.png"]
+ if object.hover == true then
+ love.graphics.setColor(255, 255, 255, 255)
+ else
+ love.graphics.setColor(255, 255, 255, 150)
+ end
+ love.graphics.draw(image, object:GetX() + object:GetWidth()/2 - image:getWidth()/2, object:GetY() + object:GetHeight()/2 - image:getHeight()/2)
+ elseif object.scrolltype == "right" then
+ local image = skin.images["arrow-right.png"]
+ if object.hover == true then
+ love.graphics.setColor(255, 255, 255, 255)
+ else
+ love.graphics.setColor(255, 255, 255, 150)
+ end
+ love.graphics.draw(image, object:GetX() + object:GetWidth()/2 - image:getWidth()/2, object:GetY() + object:GetHeight()/2 - image:getHeight()/2)
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawSlider(object)
+ - desc: draws the slider object
+--]]---------------------------------------------------------
+function skin.DrawSlider(object)
+
+ love.graphics.setColor(unpack(skin.controls.slider_bar_outline_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY() + object.ycenter - 5, object:GetWidth(), 10)
+
+ love.graphics.setColor(unpack(skin.controls.slider_bar_color))
+ love.graphics.rectangle("fill", object:GetX() + 5, object:GetY() + object.ycenter - 0.5, object:GetWidth() - 10, 1)
+
+ love.graphics.setFont(skin.controls.slider_text_font)
+
+ love.graphics.setColor(unpack(skin.controls.slider_text_color))
+ love.graphics.print(object.text, object:GetX(), object:GetY())
+
+ love.graphics.setColor(unpack(skin.controls.slider_text_color))
+ love.graphics.printf(object.value, object:GetX() + object:GetWidth(), object:GetY(), 0, "right")
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawSliderButton(object)
+ - desc: draws the slider button object
+--]]---------------------------------------------------------
+function skin.DrawSliderButton(object)
+
+ local index = loveframes.config["ACTIVESKIN"]
+ local hover = object.hover
+ local down = object.down
+ local gradientcolor = {}
+
+ if down == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_down_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_down_color[1] - 20, skin.controls.button_body_down_color[2] - 20, skin.controls.button_body_down_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ elseif hover == true then
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_hover_color[1] - 20, skin.controls.button_body_hover_color[2] - 20, skin.controls.button_body_hover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ else
+
+ -- button body
+ love.graphics.setColor(unpack(skin.controls.button_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.button_body_nohover_color[1] - 20, skin.controls.button_body_nohover_color[2] - 20, skin.controls.button_body_nohover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- button border
+ love.graphics.setColor(unpack(skin.controls.button_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawCheckBox(object)
+ - desc: draws the check box object
+--]]---------------------------------------------------------
+function skin.DrawCheckBox(object)
+
+ local font = smallfont
+ local linesize = (1 * (object.boxwidth * 0.05))
+ local checked = object.checked
+ local height = font:getHeight()
+
+ love.graphics.setColor(unpack(skin.controls.checkbox_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object.boxwidth, object.boxheight)
+
+ love.graphics.setColor(unpack(skin.controls.checkbox_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object.boxwidth, object.boxheight)
+
+ if checked == true then
+
+ love.graphics.setLine(linesize, "smooth")
+
+ love.graphics.setColor(unpack(skin.controls.checkbox_check_color))
+ love.graphics.line(object:GetX() + 5 + linesize, object:GetY() + 5 + linesize, object:GetX() + object.boxwidth - 5 - linesize, object:GetY() + object.boxheight - 5 - linesize)
+ love.graphics.line(object:GetX() + object.boxwidth - 5 - linesize, object:GetY() + 5 + linesize, object:GetX() + 5 + linesize, object:GetY() + object.boxheight - 5 - linesize)
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawCollapsibleCategory(object)
+ - desc: draws the collapsible category object
+--]]---------------------------------------------------------
+function skin.DrawCollapsibleCategory(object)
+
+ local font = smallfont
+ local gradientcolor = {skin.controls.collapsiblecategory_body_color[1] - 20, skin.controls.collapsiblecategory_body_color[2] - 20, skin.controls.collapsiblecategory_body_color[3] - 20, 255}
+
+ love.graphics.setColor(unpack(skin.controls.collapsiblecategory_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ love.graphics.setColor(unpack(gradientcolor))
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ love.graphics.setColor(unpack(skin.controls.collapsiblecategory_text_color))
+ love.graphics.print(object.text, object:GetX() + 5, object:GetY() + 5)
+
+ love.graphics.setColor(unpack(skin.controls.collapsiblecategory_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawColumnList(object)
+ - desc: draws the column list object
+--]]---------------------------------------------------------
+function skin.DrawColumnList(object)
+
+ love.graphics.setColor(unpack(skin.controls.columnlist_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawColumnListHeader(object)
+ - desc: draws the column list header object
+--]]---------------------------------------------------------
+function skin.DrawColumnListHeader(object)
+
+ local font = skin.controls.columnlistheader_text_font
+ local twidth = font:getWidth(object.name)
+ local theight = font:getHeight(object.name)
+ local hover = object.hover
+ local down = object.down
+ local gradientcolor = {}
+
+ if down == true then
+
+ -- header body
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_body_down_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.columnlistheader_body_down_color[1] - 20, skin.controls.columnlistheader_body_down_color[2] - 20, skin.controls.columnlistheader_body_down_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- header name
+ love.graphics.setFont(font)
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_text_down_color))
+ love.graphics.print(object.name, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- header border
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ elseif hover == true then
+
+ -- header body
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_body_hover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.columnlistheader_body_hover_color[1] - 20, skin.controls.columnlistheader_body_hover_color[2] - 20, skin.controls.columnlistheader_body_hover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- header name
+ love.graphics.setFont(font)
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_text_hover_color))
+ love.graphics.print(object.name, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- header border
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ else
+
+ -- header body
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_body_nohover_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ gradientcolor = {skin.controls.columnlistheader_body_nohover_color[1] - 20, skin.controls.columnlistheader_body_nohover_color[2] - 20, skin.controls.columnlistheader_body_nohover_color[3] - 20, 255}
+ skin.DrawGradient(object:GetX(), object:GetY() - 1, object:GetWidth(), object:GetHeight(), "up", gradientcolor)
+
+ -- header name
+ love.graphics.setFont(font)
+ love.graphics.setColor(unpack(skin.controls.button_text_nohover_color))
+ love.graphics.print(object.name, object:GetX() + object:GetWidth()/2 - twidth/2, object:GetY() + object:GetHeight()/2 - theight/2)
+
+ -- header border
+ love.graphics.setColor(unpack(skin.controls.columnlistheader_border_down_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ end
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawColumnListArea(object)
+ - desc: draws the column list area object
+--]]---------------------------------------------------------
+function skin.DrawColumnListArea(object)
+
+ love.graphics.setColor(unpack(skin.controls.columnlistarea_body_color))
+ love.graphics.rectangle("fill", object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawOverColumnListArea(object)
+ - desc: draws the column list area object
+--]]---------------------------------------------------------
+function skin.DrawColumnListArea(object)
+
+ love.graphics.setColor(unpack(skin.controls.columnlistarea_border_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+end
+
+--[[---------------------------------------------------------
+ - func: skin.DrawColumnListRow(object)
+ - desc: draws the column list row object
+--]]---------------------------------------------------------
+function skin.DrawColumnListRow(object)
+
+ local colorindex = object:GetColorIndex()
+ local font = object:GetFont()
+ local height = font:getHeight("a")
+
+ object:SetTextPos(5, object:GetHeight()/2 - height/2)
+ object:SetTextColor(bordercolor)
+
+ if colorindex == 1 then
+
+ love.graphics.setColor(unpack(skin.controls.columnlistrow_body1_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ love.graphics.setColor(unpack(skin.controls.columnlistrow_border1_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ else
+
+ love.graphics.setColor(unpack(skin.controls.columnlistrow_body2_color))
+ love.graphics.rectangle("fill", object:GetX() + 1, object:GetY() + 1, object:GetWidth() - 2, object:GetHeight() - 2)
+
+ love.graphics.setColor(unpack(skin.controls.columnlistrow_border2_color))
+ skin.OutlinedRectangle(object:GetX(), object:GetY(), object:GetWidth(), object:GetHeight())
+
+ end
+
+end
+
+-- register the skin
+loveframes.skins.Register(skin)
\ No newline at end of file