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

- -
    -
  1. "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.
  2. - -
  3. "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.
  4. - -
  5. "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.
  6. - -
  7. "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.
  8. - -
  9. "License Elements" means the - following high-level license attributes as selected by - Licensor and indicated in the title of this License: - Attribution, ShareAlike.
  10. - -
  11. "Licensor" means the individual, - individuals, entity or entities that offer(s) the Work - under the terms of this License.
  12. - -
  13. "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.
  14. - -
  15. "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.
  16. - -
  17. "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.
  18. - -
  19. "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.
  20. - -
  21. "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.
  22. -
- -

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:

- -
    -
  1. to Reproduce the Work, to incorporate the Work into - one or more Collections, and to Reproduce the Work as - incorporated in the Collections;
  2. - -
  3. 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.";
  4. - -
  5. to Distribute and Publicly Perform the Work including - as incorporated in Collections; and,
  6. - -
  7. to Distribute and Publicly Perform Adaptations.
  8. - -
  9. -

    For the avoidance of doubt:

    - -
      -
    1. 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;
    2. - -
    3. 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,
    4. - -
    5. 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.
    6. -
    -
  10. -
- -

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:

- -
    -
  1. 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.
  2. - -
  3. 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.
  4. - -
  5. 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.
  6. - -
  7. 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.
  8. -
- -

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

- -
    -
  1. 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.
  2. - -
  3. 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.
  4. -
- -

8. Miscellaneous

- -
    -
  1. 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.
  2. - -
  3. 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.
  4. - -
  5. 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.
  6. - -
  7. 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.
  8. - -
  9. 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.
  10. - -
  11. 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.
  12. -
- -
- -
- - - - \ 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