From 111ccd7ba4dc39bd3ad64ba8dc1608f5c2003409 Mon Sep 17 00:00:00 2001 From: Julian Descottes Date: Wed, 22 Aug 2012 15:58:16 -0700 Subject: [PATCH 01/10] Create gh-pages branch via GitHub --- images/bg_hr.png | Bin 0 -> 943 bytes images/blacktocat.png | Bin 0 -> 1428 bytes images/icon_download.png | Bin 0 -> 1162 bytes images/sprite_download.png | Bin 0 -> 16799 bytes index.html | 74 ++++++ javascripts/main.js | 1 + params.json | 1 + stylesheets/pygment_trac.css | 70 ++++++ stylesheets/stylesheet.css | 431 +++++++++++++++++++++++++++++++++++ 9 files changed, 577 insertions(+) create mode 100644 images/bg_hr.png create mode 100644 images/blacktocat.png create mode 100644 images/icon_download.png create mode 100644 images/sprite_download.png create mode 100644 index.html create mode 100644 javascripts/main.js create mode 100644 params.json create mode 100644 stylesheets/pygment_trac.css create mode 100644 stylesheets/stylesheet.css diff --git a/images/bg_hr.png b/images/bg_hr.png new file mode 100644 index 0000000000000000000000000000000000000000..7973bd69888c7e10ccad1111d555ceabb7cd99b6 GIT binary patch literal 943 zcmaJ=O^ee&7!FiK7FWCot{@Ck@nrMW&tx0B-6VAbrk1u~FTzffX&bu9#AIsIdef8t z!QZfdz=K}>3m(LO;6X3qN}Y6@>cJYA%)G<%Jn!ec>9im1@7>wsIBwrMF}iHO!q%;8 zSJ@xEd~(FL18NRvkBsOXMVM>4WQc*~qcQGc17IjxRnj!O_^B1gan0x#EWT48PK->5B2>mI;LIx zC*FSw$Nfc!g)WZCEOJ=mM)}lLsOk|$ltg_(&ax_YCWMlBLPDVT%D_gB7o_$YZ`-OB z#1sV%whRq21>W;qwN$N?OUGtQQe;JvOsQrna;+v+j8dth=*?orHHb6waX>S!yXCgT zo!oR3{E&GzaOAzfZYv@_Sf{LdyJInS>TS60&R9%yCs$y>2x(*gYIJtRrYAja$Ceq} z!N&oc_K1!3-Ft`U>`CM;quEbB4KG%!MovB*9_3!QzFhqHwrbwK|Doo-y>auDJNSP6 T=d)j*_4El@X4^PFK7I8YBT*xD literal 0 HcmV?d00001 diff --git a/images/blacktocat.png b/images/blacktocat.png new file mode 100644 index 0000000000000000000000000000000000000000..6e264fe57a2e35a2855405ac7d4102c3f6ddcdae GIT binary patch literal 1428 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 00000000..14721697 --- /dev/null +++ b/index.html @@ -0,0 +1,74 @@ + + + + + + + + + + + Piskel + + + + + + + + +
+
+

Welcome to GitHub Pages.

+ +

This automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:

+ +
$ cd your_repo_root/repo_name
+$ git fetch origin
+$ git checkout gh-pages
+
+ +

If you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.

+ +

Designer Templates

+ +

We've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.

+ +

Rather Drive Stick?

+ +

If you prefer to not use the automatic generator, push a branch named gh-pages to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.

+ +

Authors and Contributors

+ +

You can @mention a GitHub username to generate a link to their profile. The resulting <a> element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.

+ +

Support or Contact

+ +

Having trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.

+
+
+ + + + + + + + diff --git a/javascripts/main.js b/javascripts/main.js new file mode 100644 index 00000000..d8135d37 --- /dev/null +++ b/javascripts/main.js @@ -0,0 +1 @@ +console.log('This would be the main JS file.'); diff --git a/params.json b/params.json new file mode 100644 index 00000000..ca33223f --- /dev/null +++ b/params.json @@ -0,0 +1 @@ +{"google":"","body":"### Welcome to GitHub Pages.\r\nThis automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:\r\n\r\n```\r\n$ cd your_repo_root/repo_name\r\n$ git fetch origin\r\n$ git checkout gh-pages\r\n```\r\n\r\nIf you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.\r\n\r\n### Designer Templates\r\nWe've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.\r\n\r\n### Rather Drive Stick?\r\nIf you prefer to not use the automatic generator, push a branch named `gh-pages` to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.\r\n\r\n### Authors and Contributors\r\nYou can @mention a GitHub username to generate a link to their profile. The resulting `` element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.\r\n\r\n### Support or Contact\r\nHaving trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.","note":"Don't delete this file! It's used internally to help with page regeneration.","name":"Piskel","tagline":"Animated sprite editor"} \ No newline at end of file diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css new file mode 100644 index 00000000..e65cedff --- /dev/null +++ b/stylesheets/pygment_trac.css @@ -0,0 +1,70 @@ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f0f3f3; } +.highlight .c { color: #0099FF; font-style: italic } /* Comment */ +.highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #006699; font-weight: bold } /* Keyword */ +.highlight .o { color: #555555 } /* Operator */ +.highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #009999 } /* Comment.Preproc */ +.highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */ +.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ +.highlight .go { color: #AAAAAA } /* Generic.Output */ +.highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #99CC66 } /* Generic.Traceback */ +.highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #006699 } /* Keyword.Pseudo */ +.highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #FF6600 } /* Literal.Number */ +.highlight .s { color: #CC3300 } /* Literal.String */ +.highlight .na { color: #330099 } /* Name.Attribute */ +.highlight .nb { color: #336666 } /* Name.Builtin */ +.highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */ +.highlight .no { color: #336600 } /* Name.Constant */ +.highlight .nd { color: #9999FF } /* Name.Decorator */ +.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #CC00FF } /* Name.Function */ +.highlight .nl { color: #9999FF } /* Name.Label */ +.highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #003333 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #FF6600 } /* Literal.Number.Float */ +.highlight .mh { color: #FF6600 } /* Literal.Number.Hex */ +.highlight .mi { color: #FF6600 } /* Literal.Number.Integer */ +.highlight .mo { color: #FF6600 } /* Literal.Number.Oct */ +.highlight .sb { color: #CC3300 } /* Literal.String.Backtick */ +.highlight .sc { color: #CC3300 } /* Literal.String.Char */ +.highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #CC3300 } /* Literal.String.Double */ +.highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */ +.highlight .si { color: #AA0000 } /* Literal.String.Interpol */ +.highlight .sx { color: #CC3300 } /* Literal.String.Other */ +.highlight .sr { color: #33AAAA } /* Literal.String.Regex */ +.highlight .s1 { color: #CC3300 } /* Literal.String.Single */ +.highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */ +.highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #003333 } /* Name.Variable.Class */ +.highlight .vg { color: #003333 } /* Name.Variable.Global */ +.highlight .vi { color: #003333 } /* Name.Variable.Instance */ +.highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */ + +.type-csharp .highlight .k { color: #0000FF } +.type-csharp .highlight .kt { color: #0000FF } +.type-csharp .highlight .nf { color: #000000; font-weight: normal } +.type-csharp .highlight .nc { color: #2B91AF } +.type-csharp .highlight .nn { color: #000000 } +.type-csharp .highlight .s { color: #A31515 } +.type-csharp .highlight .sc { color: #A31515 } diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css new file mode 100644 index 00000000..41897516 --- /dev/null +++ b/stylesheets/stylesheet.css @@ -0,0 +1,431 @@ +/******************************************************************************* +Slate Theme for Github Pages +by Jason Costello, @jsncostello +*******************************************************************************/ + +@import url(pygment_trac.css); + +/******************************************************************************* +MeyerWeb Reset +*******************************************************************************/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + vertical-align: baseline; +} + +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} + +ol, ul { + list-style: none; +} + +blockquote, q { +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +a:focus { + outline: none; +} + +/******************************************************************************* +Theme Styles +*******************************************************************************/ + +body { + box-sizing: border-box; + color:#373737; + background: #212121; + font-size: 16px; + font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; + line-height: 1.5; + -webkit-font-smoothing: antialiased; +} + +h1, h2, h3, h4, h5, h6 { + margin: 10px 0; + font-weight: 700; + color:#222222; + font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif; + letter-spacing: -1px; +} + +h1 { + font-size: 36px; + font-weight: 700; +} + +h2 { + padding-bottom: 10px; + font-size: 32px; + background: url('../images/bg_hr.png') repeat-x bottom; +} + +h3 { + font-size: 24px; +} + +h4 { + font-size: 21px; +} + +h5 { + font-size: 18px; +} + +h6 { + font-size: 16px; +} + +p { + margin: 10px 0 15px 0; +} + +footer p { + color: #f2f2f2; +} + +a { + text-decoration: none; + color: #007edf; + text-shadow: none; + + transition: color 0.5s ease; + transition: text-shadow 0.5s ease; + -webkit-transition: color 0.5s ease; + -webkit-transition: text-shadow 0.5s ease; + -moz-transition: color 0.5s ease; + -moz-transition: text-shadow 0.5s ease; + -o-transition: color 0.5s ease; + -o-transition: text-shadow 0.5s ease; + -ms-transition: color 0.5s ease; + -ms-transition: text-shadow 0.5s ease; +} + +#main_content a:hover { + color: #0069ba; + text-shadow: #0090ff 0px 0px 2px; +} + +footer a:hover { + color: #43adff; + text-shadow: #0090ff 0px 0px 2px; +} + +em { + font-style: italic; +} + +strong { + font-weight: bold; +} + +img { + position: relative; + margin: 0 auto; + max-width: 739px; + padding: 5px; + margin: 10px 0 10px 0; + border: 1px solid #ebebeb; + + box-shadow: 0 0 5px #ebebeb; + -webkit-box-shadow: 0 0 5px #ebebeb; + -moz-box-shadow: 0 0 5px #ebebeb; + -o-box-shadow: 0 0 5px #ebebeb; + -ms-box-shadow: 0 0 5px #ebebeb; +} + +pre, code { + width: 100%; + color: #222; + background-color: #fff; + + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; + font-size: 14px; + + border-radius: 2px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + + + +} + +pre { + width: 100%; + padding: 10px; + box-shadow: 0 0 10px rgba(0,0,0,.1); + overflow: auto; +} + +code { + padding: 3px; + margin: 0 3px; + box-shadow: 0 0 10px rgba(0,0,0,.1); +} + +pre code { + display: block; + box-shadow: none; +} + +blockquote { + color: #666; + margin-bottom: 20px; + padding: 0 0 0 20px; + border-left: 3px solid #bbb; +} + +ul, ol, dl { + margin-bottom: 15px +} + +ul li { + list-style: inside; + padding-left: 20px; +} + +ol li { + list-style: decimal inside; + padding-left: 20px; +} + +dl dt { + font-weight: bold; +} + +dl dd { + padding-left: 20px; + font-style: italic; +} + +dl p { + padding-left: 20px; + font-style: italic; +} + +hr { + height: 1px; + margin-bottom: 5px; + border: none; + background: url('../images/bg_hr.png') repeat-x center; +} + +table { + border: 1px solid #373737; + margin-bottom: 20px; + text-align: left; + } + +th { + font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif; + padding: 10px; + background: #373737; + color: #fff; + } + +td { + padding: 10px; + border: 1px solid #373737; + } + +form { + background: #f2f2f2; + padding: 20px; +} + +img { + width: 100%; + max-width: 100%; +} + +/******************************************************************************* +Full-Width Styles +*******************************************************************************/ + +.outer { + width: 100%; +} + +.inner { + position: relative; + max-width: 640px; + padding: 20px 10px; + margin: 0 auto; +} + +#forkme_banner { + display: block; + position: absolute; + top:0; + right: 10px; + z-index: 10; + padding: 10px 50px 10px 10px; + color: #fff; + background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%; + font-weight: 700; + box-shadow: 0 0 10px rgba(0,0,0,.5); + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + +#header_wrap { + background: #212121; + background: -moz-linear-gradient(top, #373737, #212121); + background: -webkit-linear-gradient(top, #373737, #212121); + background: -ms-linear-gradient(top, #373737, #212121); + background: -o-linear-gradient(top, #373737, #212121); + background: linear-gradient(top, #373737, #212121); +} + +#header_wrap .inner { + padding: 50px 10px 30px 10px; +} + +#project_title { + margin: 0; + color: #fff; + font-size: 42px; + font-weight: 700; + text-shadow: #111 0px 0px 10px; +} + +#project_tagline { + color: #fff; + font-size: 24px; + font-weight: 300; + background: none; + text-shadow: #111 0px 0px 10px; +} + +#downloads { + position: absolute; + width: 210px; + z-index: 10; + bottom: -40px; + right: 0; + height: 70px; + background: url('../images/icon_download.png') no-repeat 0% 90%; +} + +.zip_download_link { + display: block; + float: right; + width: 90px; + height:70px; + text-indent: -5000px; + overflow: hidden; + background: url(../images/sprite_download.png) no-repeat bottom left; +} + +.tar_download_link { + display: block; + float: right; + width: 90px; + height:70px; + text-indent: -5000px; + overflow: hidden; + background: url(../images/sprite_download.png) no-repeat bottom right; + margin-left: 10px; +} + +.zip_download_link:hover { + background: url(../images/sprite_download.png) no-repeat top left; +} + +.tar_download_link:hover { + background: url(../images/sprite_download.png) no-repeat top right; +} + +#main_content_wrap { + background: #f2f2f2; + border-top: 1px solid #111; + border-bottom: 1px solid #111; +} + +#main_content { + padding-top: 40px; +} + +#footer_wrap { + background: #212121; +} + + + +/******************************************************************************* +Small Device Styles +*******************************************************************************/ + +@media screen and (max-width: 480px) { + body { + font-size:14px; + } + + #downloads { + display: none; + } + + .inner { + min-width: 320px; + max-width: 480px; + } + + #project_title { + font-size: 32px; + } + + h1 { + font-size: 28px; + } + + h2 { + font-size: 24px; + } + + h3 { + font-size: 21px; + } + + h4 { + font-size: 18px; + } + + h5 { + font-size: 14px; + } + + h6 { + font-size: 12px; + } + + code, pre { + min-width: 320px; + max-width: 480px; + font-size: 11px; + } + +} From d7b8ffb7384494836416f53e62524b094c7a5c93 Mon Sep 17 00:00:00 2001 From: Julian Descottes Date: Thu, 23 Aug 2012 01:00:30 +0200 Subject: [PATCH 02/10] initial commit demo --- css/style.css | 83 +++++++ images/bg_hr.png | Bin 943 -> 0 bytes images/blacktocat.png | Bin 1428 -> 0 bytes images/icon_download.png | Bin 1162 -> 0 bytes images/sprite_download.png | Bin 16799 -> 0 bytes index.html | 102 +++------ javascripts/main.js | 1 - js/piskel.js | 142 ++++++++++++ params.json | 1 - stylesheets/pygment_trac.css | 70 ------ stylesheets/stylesheet.css | 431 ----------------------------------- 11 files changed, 257 insertions(+), 573 deletions(-) create mode 100644 css/style.css delete mode 100644 images/bg_hr.png delete mode 100644 images/blacktocat.png delete mode 100644 images/icon_download.png delete mode 100644 images/sprite_download.png delete mode 100644 javascripts/main.js create mode 100644 js/piskel.js delete mode 100644 params.json delete mode 100644 stylesheets/pygment_trac.css delete mode 100644 stylesheets/stylesheet.css diff --git a/css/style.css b/css/style.css new file mode 100644 index 00000000..33cf7319 --- /dev/null +++ b/css/style.css @@ -0,0 +1,83 @@ +html, body { + height : 100%; + margin : 0; + cursor : default; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +ul, li { + margin : 0; + padding : 0; +} + +.debug { + border : 1px Solid black; +} + +.left-nav { + position:absolute; + top : 0; + bottom : 0; + width : 200px; + background : #000; + padding : 10px; +} + +.main-panel { + position:absolute; + top : 0; + bottom : 0; + left : 200px; + right : 0; + background : #ccc; +} + +.preview-container { + position : absolute; + top : 30px; + right : 0; + height : 256px; + width : 256px; + background : white; + border : 0px Solid black; + border-radius:5px 0px 0px 5px; + box-shadow : 0px 0px 2px rgba(0,0,0,0.2); +} + +.preview-container canvas{ + border : 0px Solid transparent; + border-radius:5px 0px 0px 5px; +} + +#cursorInfo { + position : fixed; + cursor : default; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.action-button { + background-color : white; + width : 150px; + display : inline-block; +} + +#preview-list li{ + margin : 10px 0; + width : 128px; + height : 128px; +} + +#preview-list li.selected{ + margin : 8px -2px; + border : 2px Solid red; +} \ No newline at end of file diff --git a/images/bg_hr.png b/images/bg_hr.png deleted file mode 100644 index 7973bd69888c7e10ccad1111d555ceabb7cd99b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmaJ=O^ee&7!FiK7FWCot{@Ck@nrMW&tx0B-6VAbrk1u~FTzffX&bu9#AIsIdef8t z!QZfdz=K}>3m(LO;6X3qN}Y6@>cJYA%)G<%Jn!ec>9im1@7>wsIBwrMF}iHO!q%;8 zSJ@xEd~(FL18NRvkBsOXMVM>4WQc*~qcQGc17IjxRnj!O_^B1gan0x#EWT48PK->5B2>mI;LIx zC*FSw$Nfc!g)WZCEOJ=mM)}lLsOk|$ltg_(&ax_YCWMlBLPDVT%D_gB7o_$YZ`-OB z#1sV%whRq21>W;qwN$N?OUGtQQe;JvOsQrna;+v+j8dth=*?orHHb6waX>S!yXCgT zo!oR3{E&GzaOAzfZYv@_Sf{LdyJInS>TS60&R9%yCs$y>2x(*gYIJtRrYAja$Ceq} z!N&oc_K1!3-Ft`U>`CM;quEbB4KG%!MovB*9_3!QzFhqHwrbwK|Doo-y>auDJNSP6 T=d)j*_4El@X4^PFK7I8YBT*xD diff --git a/images/blacktocat.png b/images/blacktocat.png deleted file mode 100644 index 6e264fe57a2e35a2855405ac7d4102c3f6ddcdae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1428 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 diff --git a/index.html b/index.html index 14721697..f8f0d7c9 100644 --- a/index.html +++ b/index.html @@ -1,74 +1,36 @@ - - + + + + + - - - - + Piskel + + - - - Piskel - - - - - -
-
- View on GitHub - -

Piskel

-

Animated sprite editor

- -
- Download this project as a .zip file - Download this project as a tar.gz file -
-
+ + + + + + +
+ + Add a Frame + +
    +
+
+
+
+
+
- - -
-
-

Welcome to GitHub Pages.

- -

This automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:

- -
$ cd your_repo_root/repo_name
-$ git fetch origin
-$ git checkout gh-pages
-
- -

If you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.

- -

Designer Templates

- -

We've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.

- -

Rather Drive Stick?

- -

If you prefer to not use the automatic generator, push a branch named gh-pages to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.

- -

Authors and Contributors

- -

You can @mention a GitHub username to generate a link to their profile. The resulting <a> element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.

- -

Support or Contact

- -

Having trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.

-
-
- - - - - - - +
+
+ + diff --git a/javascripts/main.js b/javascripts/main.js deleted file mode 100644 index d8135d37..00000000 --- a/javascripts/main.js +++ /dev/null @@ -1 +0,0 @@ -console.log('This would be the main JS file.'); diff --git a/js/piskel.js b/js/piskel.js new file mode 100644 index 00000000..62c719e5 --- /dev/null +++ b/js/piskel.js @@ -0,0 +1,142 @@ +(function ($) { + var frames = [], isClicked = false, brushSize = 10, index = -1, animIndex = 0, button = 0; + + + var piskel = { + init : function () { + this.addFrame(); + + setInterval(this.refreshAnimatedPreview, 500); + }, + + getCurrentCanvas : function () { + return frames[index]; + }, + + onCanvasMousemove : function (event) { + //this.updateCursorInfo(event); + if (isClicked) { + var coords = this.getRelativeCoordinates(event.clientX, event.clientY); + this.drawAt(coords.x, coords.y); + } + }, + + createPreviews : function () { + var container = $('preview-list'); + container.innerHTML = ""; + for (var i = 0 ; i < frames.length ; i++) { + var preview = document.createElement("li"); + if (index == i) { + preview.className = "selected"; + } + var canvasPreview = document.createElement("canvas"); + + canvasPreview.setAttribute('width', '128'); + canvasPreview.setAttribute('height', '128'); + + canvasPreview.setAttribute('onclick', 'piskel.setFrame('+i+')'); + + canvasPreview.getContext('2d').drawImage(frames[i], 0, 0, 320, 320, 0, 0 , 128, 128); + preview.appendChild(canvasPreview); + + + container.appendChild(preview); + + } + }, + + refreshAnimatedPreview : function () { + var context = $('animated-preview').getContext('2d'); + // erase canvas, verify proper way + context.fillStyle = "white"; + context.fillRect(0, 0, 256, 256); + + context.drawImage(frames[animIndex++], 0, 0, 320, 320, 0, 0 , 256, 256); + if (animIndex == frames.length) { + animIndex = 0; + } + }, + + setFrame : function (frameIndex) { + index = frameIndex; + $('canvas-container').innerHTML = ""; + $('canvas-container').appendChild(this.getCurrentCanvas()); + this.createPreviews(); + }, + + updateCursorInfo : function (event) { + var cursor = $('cursorInfo'); + cursor.style.top = event.clientY + 10 + "px"; + cursor.style.left = event.clientX + 10 + "px"; + + var coordinates = this.getRelativeCoordinates(event.clientX, event.clientY) + cursor.innerHTML = [ + "X : " + coordinates.x, + "Y : " + coordinates.y + ].join(", "); + }, + + onCanvasMousedown : function (event) { + isClicked = true; + button = event.button; + var coords = this.getRelativeCoordinates(event.clientX, event.clientY); + this.drawAt(coords.x, coords.y); + }, + + onCanvasMouseup : function (event) { + isClicked = false; + }, + + drawAt : function (x, y) { + if (x < 0 || y < 0 || x > 320 || y > 320) return; + var context = this.getCurrentCanvas().getContext('2d'); + if (button == 0) { + context.fillStyle = "black"; + } else { + context.fillStyle = "white"; + } + + context.fillRect(x - x%brushSize, y - y%brushSize, brushSize, brushSize); + this.createPreviews(); + }, + + onCanvasContextMenu : function (event) { + event.preventDefault(); + event.stopPropagation(); + event.cancelBubble = true; + return false; + }, + getRelativeCoordinates : function (x, y) { + var canvas = this.getCurrentCanvas(); + var canvasRect = canvas.getBoundingClientRect(); + return { + x : x - canvasRect.left, + y : y - canvasRect.top + } + }, + + addFrame : function () { + var canvas = document.createElement("canvas"); + canvas.setAttribute('width', '320'); + canvas.setAttribute('height', '320'); + canvas.setAttribute('onmousemove', 'piskel.onCanvasMousemove(arguments[0])'); + canvas.setAttribute('oncontextmenu', 'piskel.onCanvasContextMenu(arguments[0])'); + canvas.setAttribute('onclick', 'piskel.onCanvasClick(arguments[0])'); + var context = canvas.getContext('2d'); + + context.fillStyle = "white"; + context.fillRect(0, 0, 320, 320); + + if(frames[index]) { //is a valid canvas + context.drawImage(frames[index], 0, 0, 320, 320, 0, 0 , 320, 320); + } + + frames.push(canvas); + this.setFrame(frames.length - 1); + } + }; + + window.piskel = piskel; + piskel.init(); + +})(function(id){return document.getElementById(id)}); \ No newline at end of file diff --git a/params.json b/params.json deleted file mode 100644 index ca33223f..00000000 --- a/params.json +++ /dev/null @@ -1 +0,0 @@ -{"google":"","body":"### Welcome to GitHub Pages.\r\nThis automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:\r\n\r\n```\r\n$ cd your_repo_root/repo_name\r\n$ git fetch origin\r\n$ git checkout gh-pages\r\n```\r\n\r\nIf you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.\r\n\r\n### Designer Templates\r\nWe've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.\r\n\r\n### Rather Drive Stick?\r\nIf you prefer to not use the automatic generator, push a branch named `gh-pages` to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.\r\n\r\n### Authors and Contributors\r\nYou can @mention a GitHub username to generate a link to their profile. The resulting `` element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.\r\n\r\n### Support or Contact\r\nHaving trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.","note":"Don't delete this file! It's used internally to help with page regeneration.","name":"Piskel","tagline":"Animated sprite editor"} \ No newline at end of file diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css deleted file mode 100644 index e65cedff..00000000 --- a/stylesheets/pygment_trac.css +++ /dev/null @@ -1,70 +0,0 @@ -.highlight .hll { background-color: #ffffcc } -.highlight { background: #f0f3f3; } -.highlight .c { color: #0099FF; font-style: italic } /* Comment */ -.highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */ -.highlight .k { color: #006699; font-weight: bold } /* Keyword */ -.highlight .o { color: #555555 } /* Operator */ -.highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #009999 } /* Comment.Preproc */ -.highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */ -.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */ -.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ -.highlight .go { color: #AAAAAA } /* Generic.Output */ -.highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #99CC66 } /* Generic.Traceback */ -.highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #006699 } /* Keyword.Pseudo */ -.highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */ -.highlight .m { color: #FF6600 } /* Literal.Number */ -.highlight .s { color: #CC3300 } /* Literal.String */ -.highlight .na { color: #330099 } /* Name.Attribute */ -.highlight .nb { color: #336666 } /* Name.Builtin */ -.highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */ -.highlight .no { color: #336600 } /* Name.Constant */ -.highlight .nd { color: #9999FF } /* Name.Decorator */ -.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #CC00FF } /* Name.Function */ -.highlight .nl { color: #9999FF } /* Name.Label */ -.highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #003333 } /* Name.Variable */ -.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mf { color: #FF6600 } /* Literal.Number.Float */ -.highlight .mh { color: #FF6600 } /* Literal.Number.Hex */ -.highlight .mi { color: #FF6600 } /* Literal.Number.Integer */ -.highlight .mo { color: #FF6600 } /* Literal.Number.Oct */ -.highlight .sb { color: #CC3300 } /* Literal.String.Backtick */ -.highlight .sc { color: #CC3300 } /* Literal.String.Char */ -.highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #CC3300 } /* Literal.String.Double */ -.highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */ -.highlight .si { color: #AA0000 } /* Literal.String.Interpol */ -.highlight .sx { color: #CC3300 } /* Literal.String.Other */ -.highlight .sr { color: #33AAAA } /* Literal.String.Regex */ -.highlight .s1 { color: #CC3300 } /* Literal.String.Single */ -.highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */ -.highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #003333 } /* Name.Variable.Class */ -.highlight .vg { color: #003333 } /* Name.Variable.Global */ -.highlight .vi { color: #003333 } /* Name.Variable.Instance */ -.highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */ - -.type-csharp .highlight .k { color: #0000FF } -.type-csharp .highlight .kt { color: #0000FF } -.type-csharp .highlight .nf { color: #000000; font-weight: normal } -.type-csharp .highlight .nc { color: #2B91AF } -.type-csharp .highlight .nn { color: #000000 } -.type-csharp .highlight .s { color: #A31515 } -.type-csharp .highlight .sc { color: #A31515 } diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css deleted file mode 100644 index 41897516..00000000 --- a/stylesheets/stylesheet.css +++ /dev/null @@ -1,431 +0,0 @@ -/******************************************************************************* -Slate Theme for Github Pages -by Jason Costello, @jsncostello -*******************************************************************************/ - -@import url(pygment_trac.css); - -/******************************************************************************* -MeyerWeb Reset -*******************************************************************************/ - -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font: inherit; - vertical-align: baseline; -} - -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} - -ol, ul { - list-style: none; -} - -blockquote, q { -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -a:focus { - outline: none; -} - -/******************************************************************************* -Theme Styles -*******************************************************************************/ - -body { - box-sizing: border-box; - color:#373737; - background: #212121; - font-size: 16px; - font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; - line-height: 1.5; - -webkit-font-smoothing: antialiased; -} - -h1, h2, h3, h4, h5, h6 { - margin: 10px 0; - font-weight: 700; - color:#222222; - font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif; - letter-spacing: -1px; -} - -h1 { - font-size: 36px; - font-weight: 700; -} - -h2 { - padding-bottom: 10px; - font-size: 32px; - background: url('../images/bg_hr.png') repeat-x bottom; -} - -h3 { - font-size: 24px; -} - -h4 { - font-size: 21px; -} - -h5 { - font-size: 18px; -} - -h6 { - font-size: 16px; -} - -p { - margin: 10px 0 15px 0; -} - -footer p { - color: #f2f2f2; -} - -a { - text-decoration: none; - color: #007edf; - text-shadow: none; - - transition: color 0.5s ease; - transition: text-shadow 0.5s ease; - -webkit-transition: color 0.5s ease; - -webkit-transition: text-shadow 0.5s ease; - -moz-transition: color 0.5s ease; - -moz-transition: text-shadow 0.5s ease; - -o-transition: color 0.5s ease; - -o-transition: text-shadow 0.5s ease; - -ms-transition: color 0.5s ease; - -ms-transition: text-shadow 0.5s ease; -} - -#main_content a:hover { - color: #0069ba; - text-shadow: #0090ff 0px 0px 2px; -} - -footer a:hover { - color: #43adff; - text-shadow: #0090ff 0px 0px 2px; -} - -em { - font-style: italic; -} - -strong { - font-weight: bold; -} - -img { - position: relative; - margin: 0 auto; - max-width: 739px; - padding: 5px; - margin: 10px 0 10px 0; - border: 1px solid #ebebeb; - - box-shadow: 0 0 5px #ebebeb; - -webkit-box-shadow: 0 0 5px #ebebeb; - -moz-box-shadow: 0 0 5px #ebebeb; - -o-box-shadow: 0 0 5px #ebebeb; - -ms-box-shadow: 0 0 5px #ebebeb; -} - -pre, code { - width: 100%; - color: #222; - background-color: #fff; - - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; - font-size: 14px; - - border-radius: 2px; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - - - -} - -pre { - width: 100%; - padding: 10px; - box-shadow: 0 0 10px rgba(0,0,0,.1); - overflow: auto; -} - -code { - padding: 3px; - margin: 0 3px; - box-shadow: 0 0 10px rgba(0,0,0,.1); -} - -pre code { - display: block; - box-shadow: none; -} - -blockquote { - color: #666; - margin-bottom: 20px; - padding: 0 0 0 20px; - border-left: 3px solid #bbb; -} - -ul, ol, dl { - margin-bottom: 15px -} - -ul li { - list-style: inside; - padding-left: 20px; -} - -ol li { - list-style: decimal inside; - padding-left: 20px; -} - -dl dt { - font-weight: bold; -} - -dl dd { - padding-left: 20px; - font-style: italic; -} - -dl p { - padding-left: 20px; - font-style: italic; -} - -hr { - height: 1px; - margin-bottom: 5px; - border: none; - background: url('../images/bg_hr.png') repeat-x center; -} - -table { - border: 1px solid #373737; - margin-bottom: 20px; - text-align: left; - } - -th { - font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif; - padding: 10px; - background: #373737; - color: #fff; - } - -td { - padding: 10px; - border: 1px solid #373737; - } - -form { - background: #f2f2f2; - padding: 20px; -} - -img { - width: 100%; - max-width: 100%; -} - -/******************************************************************************* -Full-Width Styles -*******************************************************************************/ - -.outer { - width: 100%; -} - -.inner { - position: relative; - max-width: 640px; - padding: 20px 10px; - margin: 0 auto; -} - -#forkme_banner { - display: block; - position: absolute; - top:0; - right: 10px; - z-index: 10; - padding: 10px 50px 10px 10px; - color: #fff; - background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%; - font-weight: 700; - box-shadow: 0 0 10px rgba(0,0,0,.5); - border-bottom-left-radius: 2px; - border-bottom-right-radius: 2px; -} - -#header_wrap { - background: #212121; - background: -moz-linear-gradient(top, #373737, #212121); - background: -webkit-linear-gradient(top, #373737, #212121); - background: -ms-linear-gradient(top, #373737, #212121); - background: -o-linear-gradient(top, #373737, #212121); - background: linear-gradient(top, #373737, #212121); -} - -#header_wrap .inner { - padding: 50px 10px 30px 10px; -} - -#project_title { - margin: 0; - color: #fff; - font-size: 42px; - font-weight: 700; - text-shadow: #111 0px 0px 10px; -} - -#project_tagline { - color: #fff; - font-size: 24px; - font-weight: 300; - background: none; - text-shadow: #111 0px 0px 10px; -} - -#downloads { - position: absolute; - width: 210px; - z-index: 10; - bottom: -40px; - right: 0; - height: 70px; - background: url('../images/icon_download.png') no-repeat 0% 90%; -} - -.zip_download_link { - display: block; - float: right; - width: 90px; - height:70px; - text-indent: -5000px; - overflow: hidden; - background: url(../images/sprite_download.png) no-repeat bottom left; -} - -.tar_download_link { - display: block; - float: right; - width: 90px; - height:70px; - text-indent: -5000px; - overflow: hidden; - background: url(../images/sprite_download.png) no-repeat bottom right; - margin-left: 10px; -} - -.zip_download_link:hover { - background: url(../images/sprite_download.png) no-repeat top left; -} - -.tar_download_link:hover { - background: url(../images/sprite_download.png) no-repeat top right; -} - -#main_content_wrap { - background: #f2f2f2; - border-top: 1px solid #111; - border-bottom: 1px solid #111; -} - -#main_content { - padding-top: 40px; -} - -#footer_wrap { - background: #212121; -} - - - -/******************************************************************************* -Small Device Styles -*******************************************************************************/ - -@media screen and (max-width: 480px) { - body { - font-size:14px; - } - - #downloads { - display: none; - } - - .inner { - min-width: 320px; - max-width: 480px; - } - - #project_title { - font-size: 32px; - } - - h1 { - font-size: 28px; - } - - h2 { - font-size: 24px; - } - - h3 { - font-size: 21px; - } - - h4 { - font-size: 18px; - } - - h5 { - font-size: 14px; - } - - h6 { - font-size: 12px; - } - - code, pre { - min-width: 320px; - max-width: 480px; - font-size: 11px; - } - -} From caef231f7ec6b951f9668b27818353560174dad0 Mon Sep 17 00:00:00 2001 From: Julian Descottes Date: Thu, 23 Aug 2012 07:53:22 +0200 Subject: [PATCH 03/10] de-uglified button a bit --- css/style.css | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/css/style.css b/css/style.css index 33cf7319..043d9577 100644 --- a/css/style.css +++ b/css/style.css @@ -66,9 +66,25 @@ ul, li { } .action-button { - background-color : white; - width : 150px; - display : inline-block; + background-color: white; + width: 118px; + padding: 5px; + text-align: center; + border-radius: 2px; + display: inline-block; + font-family: Arial; + cursor: pointer; + color: white; + background: #aaa; + text-shadow: 0 -1px 0 #888; +} + +.action-button:hover { + background: #b0b0b0; +} + +.action-button:active { + background: #9a9a9a; } #preview-list li{ From 817d375d8f11ba9bf71e3a92ac80dd0d6df53406 Mon Sep 17 00:00:00 2001 From: Julian Descottes Date: Tue, 28 Aug 2012 00:53:27 +0200 Subject: [PATCH 04/10] copied 2 pull requests from grosbouddha --- css/piskel.css | 36 ++++ css/style.css | 89 ++++++--- img/transparent_background.png | Bin 0 -> 48266 bytes index.html | 21 +- js/frameSheetModel.js | 76 ++++++++ js/piskel.js | 342 +++++++++++++++++++++++++-------- 6 files changed, 457 insertions(+), 107 deletions(-) create mode 100644 css/piskel.css create mode 100644 img/transparent_background.png create mode 100644 js/frameSheetModel.js diff --git a/css/piskel.css b/css/piskel.css new file mode 100644 index 00000000..c384327b --- /dev/null +++ b/css/piskel.css @@ -0,0 +1,36 @@ +html, body { + height : 100%; +} + +.debug { + border : 1px Solid black; +} + +.left-nav { + position:absolute; + top : 0; + bottom : 0; + width : 200px; + background : #000; +} + +.main-panel { + position:absolute; + top : 0; + bottom : 0; + left : 200px; + right : 0; + background : #ccc; +} + +.preview-container { + position : absolute; + top : 30px; + right : 0; + height : 200px; + width : 200px; + background : white; + border : 0px Solid black; + border-radius:5px 0px 0px 5px; + box-shadow : 0px 0px 2px rgba(0,0,0,0.2); +} \ No newline at end of file diff --git a/css/style.css b/css/style.css index 043d9577..9136c5f0 100644 --- a/css/style.css +++ b/css/style.css @@ -24,6 +24,7 @@ ul, li { top : 0; bottom : 0; width : 200px; + overflow-y: scroll; background : #000; padding : 10px; } @@ -32,7 +33,7 @@ ul, li { position:absolute; top : 0; bottom : 0; - left : 200px; + left : 220px; right : 0; background : #ccc; } @@ -49,7 +50,7 @@ ul, li { box-shadow : 0px 0px 2px rgba(0,0,0,0.2); } -.preview-container canvas{ +.preview-container canvas { border : 0px Solid transparent; border-radius:5px 0px 0px 5px; } @@ -66,34 +67,74 @@ ul, li { } .action-button { - background-color: white; - width: 118px; - padding: 5px; - text-align: center; - border-radius: 2px; - display: inline-block; - font-family: Arial; - cursor: pointer; - color: white; - background: #aaa; - text-shadow: 0 -1px 0 #888; + background-color : white; + width : 150px; + display : inline-block; } -.action-button:hover { - background: #b0b0b0; +#preview-list { + list-style-type: none; } -.action-button:active { - background: #9a9a9a; +.preview-tile { + padding : 10px; + overflow: hidden; + background-color: gray; } -#preview-list li{ - margin : 10px 0; - width : 128px; - height : 128px; +.preview-tile .canvas-container { + float: left; } -#preview-list li.selected{ - margin : 8px -2px; - border : 2px Solid red; +.preview-tile .tile-view { + float: left; + border: blue 1px solid; +} + +.preview-tile .tile-action { + display: none; + float: right; +} + +.preview-tile:hover .tile-action { + display: block; +} + +.preview-tile:hover { + background-color: lightgray; +} + +#preview-list .preview-tile.selected { + background-color: lightyellow; +} + +.canvas-container { + position: relative; + display: block; +} + +.canvas-container .canvas-background { + background: url(../img/transparent_background.png) repeat; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.canvas { + position: relative; + z-index: 1; +} + +/* Force apparition of scrollbars on leopard */ +::-webkit-scrollbar { + -webkit-appearance: none; + width: 7px; +} + +::-webkit-scrollbar-thumb { + border-radius: 4px; + background-color: rgba(180,180,180,.7); + -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5); } \ No newline at end of file diff --git a/img/transparent_background.png b/img/transparent_background.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1f7a8e591c8d0cffd8b628b21c0a52a230ce58 GIT binary patch literal 48266 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�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 xWt1^R_}r8?VSHyqQi8R07q{Hg+&p38#N4G5 - +
- +
-
+
+
+
- +
+
+
+
+ +
+ diff --git a/js/frameSheetModel.js b/js/frameSheetModel.js new file mode 100644 index 00000000..5ea52a0d --- /dev/null +++ b/js/frameSheetModel.js @@ -0,0 +1,76 @@ + +var FrameSheetModel = (function() { + + var inst; + var frames = []; + var width; + var height; + + var createEmptyFrame_ = function() { + var emptyFrame = new Array(width); + for (var columnIndex=0; columnIndex < width; columnIndex++) { + emptyFrame[columnIndex] = new Array(height); + } + return emptyFrame; + }; + + return { + validate: function() { + return true; // I'm always right dude + }, + + // Could be use to pass around model using long GET param (good enough for simple models) and + // do some temporary locastorage + serialize: function() { + throw "FrameSheet.serialize Not implemented" + }, + + addEmptyFrame: function() { + frames.push(createEmptyFrame_()); + }, + + getFrameCount: function() { + return frames.length; + }, + + getFrameByIndex: function(index) { + if (isNaN(index)) { + throw "Bad argument value for getFrameByIndex method: <" + index + ">" + } else if (index < 0 || index > frames.length) { + throw "Out of bound index for frameSheet object." + } + + return frames[index]; + }, + + removeFrameByIndex: function(index) { + if(index < 0 || index > inst.getFrameCount()) { + throw "Bad index value for removeFrameByIndex."; + } + frames.splice(index, 1); + }, + + duplicateFrameByIndex: function(frameToDuplicateIndex) { + var frame = inst.getFrameByIndex(frameToDuplicateIndex); + var clonedFrame = []; + for(var i=0, l=frame.length; i 100) { + animPreviewFPS = 100; + } + animFPSTuner.value = animPreviewFPS; + refreshUpdater = startPreviewRefresh(); + }); }, createPreviews : function () { - var container = $('preview-list'); + var container = $('preview-list'), previewTile; container.innerHTML = ""; - for (var i = 0 ; i < frames.length ; i++) { - var preview = document.createElement("li"); - if (index == i) { - preview.className = "selected"; - } - var canvasPreview = document.createElement("canvas"); - - canvasPreview.setAttribute('width', '128'); - canvasPreview.setAttribute('height', '128'); - - canvasPreview.setAttribute('onclick', 'piskel.setFrame('+i+')'); - - canvasPreview.getContext('2d').drawImage(frames[i], 0, 0, 320, 320, 0, 0 , 128, 128); - preview.appendChild(canvasPreview); - - - container.appendChild(preview); - + for (var i = 0, l = frameSheet.getFrameCount(); i < l ; i++) { + previewTile = this.createPreviewTile(i); + container.appendChild(previewTile); } }, - refreshAnimatedPreview : function () { - var context = $('animated-preview').getContext('2d'); - // erase canvas, verify proper way - context.fillStyle = "white"; - context.fillRect(0, 0, 256, 256); + createPreviewTile: function(tileNumber) { + var previewTileRoot = document.createElement("li"); + var classname = "preview-tile"; - context.drawImage(frames[animIndex++], 0, 0, 320, 320, 0, 0 , 256, 256); - if (animIndex == frames.length) { + if (this.getActiveFrameIndex() == tileNumber) { + classname += " selected"; + } + previewTileRoot.className = classname; + + var canvasContainer = document.createElement("div"); + canvasContainer.className = "canvas-container"; + canvasContainer.setAttribute('style', + 'width:' + framePixelWidth * previewTileCanvasDpi + 'px; height:' + framePixelHeight * previewTileCanvasDpi + 'px;'); + + var canvasBackground = document.createElement("div"); + canvasBackground.className = "canvas-background"; + canvasContainer.appendChild(canvasBackground); + + var canvasPreview = document.createElement("canvas"); + canvasPreview.className = "canvas tile-view" + + canvasPreview.setAttribute('width', framePixelWidth * previewTileCanvasDpi); + canvasPreview.setAttribute('height', framePixelHeight * previewTileCanvasDpi); + + previewTileRoot.addEventListener('click', function(evt) { + // has not class tile-action: + // TODO: let me know when you want to start using a framework :) + if(!evt.target.className.match(new RegExp('(\\s|^)'+ 'tile-action' +'(\\s|$)'))) { + piskel.setActiveFrameAndRedraw(tileNumber); + } + }); + + var canvasPreviewDuplicateAction = document.createElement("button"); + canvasPreviewDuplicateAction.className = "tile-action" + canvasPreviewDuplicateAction.innerHTML = "dup" + + canvasPreviewDuplicateAction.addEventListener('click', function(evt) { + piskel.duplicateFrame(tileNumber); + }); + + this.drawFrameToCanvas(frameSheet.getFrameByIndex(tileNumber), canvasPreview, previewTileCanvasDpi); + canvasContainer.appendChild(canvasPreview); + previewTileRoot.appendChild(canvasContainer); + previewTileRoot.appendChild(canvasPreviewDuplicateAction); + + if(tileNumber > 0 || frameSheet.getFrameCount() > 1) { + var canvasPreviewDeleteAction = document.createElement("button"); + canvasPreviewDeleteAction.className = "tile-action" + canvasPreviewDeleteAction.innerHTML = "del" + canvasPreviewDeleteAction.addEventListener('click', function(evt) { + frameSheet.removeFrameByIndex(tileNumber); + animIndex = 0; + piskel.createPreviews(); + }); + previewTileRoot.appendChild(canvasPreviewDeleteAction); + } + + return previewTileRoot; + }, + + refreshAnimatedPreview : function () { + piskel.drawFrameToCanvas(frameSheet.getFrameByIndex(animIndex), previewCanvas, previewAnimationCanvasDpi); + animIndex++; + if (animIndex == frameSheet.getFrameCount()) { animIndex = 0; } }, - setFrame : function (frameIndex) { - index = frameIndex; - $('canvas-container').innerHTML = ""; - $('canvas-container').appendChild(this.getCurrentCanvas()); - this.createPreviews(); + removeFrame: function(frameIndex) { + frameSheet.removeFrameByIndex(frameIndex); + + this.setActiveFrameAndRedraw(frameIndex - 1); + }, + + duplicateFrame: function(frameIndex) { + frameSheet.duplicateFrameByIndex(frameIndex); + + this.setActiveFrameAndRedraw(frameIndex + 1); }, updateCursorInfo : function (event) { @@ -78,26 +243,73 @@ onCanvasMousedown : function (event) { isClicked = true; - button = event.button; var coords = this.getRelativeCoordinates(event.clientX, event.clientY); - this.drawAt(coords.x, coords.y); + if(event.button == 0) { + this.drawAt(coords.x, coords.y, penColor); + } else { + // Right click used to delete. + isRightClicked = true; + this.drawAt(coords.x, coords.y, TRANSPARENT_COLOR); + } + }, + + onCanvasMousemove : function (event) { + //this.updateCursorInfo(event); + if (isClicked) { + var coords = this.getRelativeCoordinates(event.clientX, event.clientY); + if(isRightClicked) { + this.drawAt(coords.x, coords.y, TRANSPARENT_COLOR); + } else { + this.drawAt(coords.x, coords.y, penColor); + } + } }, onCanvasMouseup : function (event) { + if(isClicked || isRightClicked) { + // A mouse button was clicked on the drawing canvas before this mouseup event, + // the user was probably drawing on the canvas. + // Note: The mousemove movement (and the mouseup) may end up outside + // of the drawing canvas. + this.createPreviews(); + } isClicked = false; + isRightClicked = false; }, - drawAt : function (x, y) { - if (x < 0 || y < 0 || x > 320 || y > 320) return; - var context = this.getCurrentCanvas().getContext('2d'); - if (button == 0) { - context.fillStyle = "black"; - } else { - context.fillStyle = "white"; - } + drawAt : function (x, y, color) { + var pixelWidthIndex = (x - x%drawingCanvasDpi) / 10; + var pixelHeightIndex = (y - y%drawingCanvasDpi) / 10; + + // Update model: + var currentFrame = frameSheet.getFrameByIndex(this.getActiveFrameIndex()); + + // TODO: make a better accessor for pixel state update: + // TODO: Make pen color dynamic: + currentFrame[pixelWidthIndex][pixelHeightIndex] = color; + + // Update view: + // TODO: Create a per pixel update function for perf ? + this.drawFrameToCanvas(currentFrame, drawingAreaCanvas, drawingCanvasDpi); + }, - context.fillRect(x - x%brushSize, y - y%brushSize, brushSize, brushSize); - this.createPreviews(); + // TODO: move that to a FrameRenderer (/w cache) ? + drawFrameToCanvas: function(frame, canvasElement, dpi) { + var pixelColor, context = canvasElement.getContext('2d'); + for(var col = 0, num_col = frame.length; col < num_col; col++) { + for(var row = 0, num_row = frame[col].length; row < num_row; row++) { + pixelColor = frame[col][row]; + + if(pixelColor == undefined || pixelColor == TRANSPARENT_COLOR) { + context.clearRect(col * dpi, row * dpi, dpi, dpi); + } else { + context.fillStyle = pixelColor; + context.fillRect(col * dpi, row * dpi, dpi, dpi); + } + + + } + } }, onCanvasContextMenu : function (event) { @@ -106,33 +318,13 @@ event.cancelBubble = true; return false; }, + getRelativeCoordinates : function (x, y) { - var canvas = this.getCurrentCanvas(); - var canvasRect = canvas.getBoundingClientRect(); + var canvasRect = drawingAreaCanvas.getBoundingClientRect(); return { x : x - canvasRect.left, y : y - canvasRect.top } - }, - - addFrame : function () { - var canvas = document.createElement("canvas"); - canvas.setAttribute('width', '320'); - canvas.setAttribute('height', '320'); - canvas.setAttribute('onmousemove', 'piskel.onCanvasMousemove(arguments[0])'); - canvas.setAttribute('oncontextmenu', 'piskel.onCanvasContextMenu(arguments[0])'); - canvas.setAttribute('onclick', 'piskel.onCanvasClick(arguments[0])'); - var context = canvas.getContext('2d'); - - context.fillStyle = "white"; - context.fillRect(0, 0, 320, 320); - - if(frames[index]) { //is a valid canvas - context.drawImage(frames[index], 0, 0, 320, 320, 0, 0 , 320, 320); - } - - frames.push(canvas); - this.setFrame(frames.length - 1); } }; From a07b5c7f35530259ec66c12db6294b6aae79e80f Mon Sep 17 00:00:00 2001 From: Firstname Lastname Date: Tue, 28 Aug 2012 11:56:40 +0200 Subject: [PATCH 05/10] added preview --- preview/css/piskel.css | 36 ++++ preview/css/style.css | 140 ++++++++++++ preview/index.html | 42 ++++ preview/js/app.js | 35 +++ preview/js/frameSheetModel.js | 106 ++++++++++ preview/js/piskel.js | 388 ++++++++++++++++++++++++++++++++++ 6 files changed, 747 insertions(+) create mode 100644 preview/css/piskel.css create mode 100644 preview/css/style.css create mode 100644 preview/index.html create mode 100644 preview/js/app.js create mode 100644 preview/js/frameSheetModel.js create mode 100644 preview/js/piskel.js diff --git a/preview/css/piskel.css b/preview/css/piskel.css new file mode 100644 index 00000000..c384327b --- /dev/null +++ b/preview/css/piskel.css @@ -0,0 +1,36 @@ +html, body { + height : 100%; +} + +.debug { + border : 1px Solid black; +} + +.left-nav { + position:absolute; + top : 0; + bottom : 0; + width : 200px; + background : #000; +} + +.main-panel { + position:absolute; + top : 0; + bottom : 0; + left : 200px; + right : 0; + background : #ccc; +} + +.preview-container { + position : absolute; + top : 30px; + right : 0; + height : 200px; + width : 200px; + background : white; + border : 0px Solid black; + border-radius:5px 0px 0px 5px; + box-shadow : 0px 0px 2px rgba(0,0,0,0.2); +} \ No newline at end of file diff --git a/preview/css/style.css b/preview/css/style.css new file mode 100644 index 00000000..9136c5f0 --- /dev/null +++ b/preview/css/style.css @@ -0,0 +1,140 @@ +html, body { + height : 100%; + margin : 0; + cursor : default; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +ul, li { + margin : 0; + padding : 0; +} + +.debug { + border : 1px Solid black; +} + +.left-nav { + position:absolute; + top : 0; + bottom : 0; + width : 200px; + overflow-y: scroll; + background : #000; + padding : 10px; +} + +.main-panel { + position:absolute; + top : 0; + bottom : 0; + left : 220px; + right : 0; + background : #ccc; +} + +.preview-container { + position : absolute; + top : 30px; + right : 0; + height : 256px; + width : 256px; + background : white; + border : 0px Solid black; + border-radius:5px 0px 0px 5px; + box-shadow : 0px 0px 2px rgba(0,0,0,0.2); +} + +.preview-container canvas { + border : 0px Solid transparent; + border-radius:5px 0px 0px 5px; +} + +#cursorInfo { + position : fixed; + cursor : default; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.action-button { + background-color : white; + width : 150px; + display : inline-block; +} + +#preview-list { + list-style-type: none; +} + +.preview-tile { + padding : 10px; + overflow: hidden; + background-color: gray; +} + +.preview-tile .canvas-container { + float: left; +} + +.preview-tile .tile-view { + float: left; + border: blue 1px solid; +} + +.preview-tile .tile-action { + display: none; + float: right; +} + +.preview-tile:hover .tile-action { + display: block; +} + +.preview-tile:hover { + background-color: lightgray; +} + +#preview-list .preview-tile.selected { + background-color: lightyellow; +} + +.canvas-container { + position: relative; + display: block; +} + +.canvas-container .canvas-background { + background: url(../img/transparent_background.png) repeat; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.canvas { + position: relative; + z-index: 1; +} + +/* Force apparition of scrollbars on leopard */ +::-webkit-scrollbar { + -webkit-appearance: none; + width: 7px; +} + +::-webkit-scrollbar-thumb { + border-radius: 4px; + background-color: rgba(180,180,180,.7); + -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5); +} \ No newline at end of file diff --git a/preview/index.html b/preview/index.html new file mode 100644 index 00000000..c08fa6e8 --- /dev/null +++ b/preview/index.html @@ -0,0 +1,42 @@ + + + + + + + Piskel + + + + + + + + + +
+ Get URL + +
    +
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + diff --git a/preview/js/app.js b/preview/js/app.js new file mode 100644 index 00000000..d66a847f --- /dev/null +++ b/preview/js/app.js @@ -0,0 +1,35 @@ +// Generated by CoffeeScript 1.3.1 +(function() { + + $(document).ready(function() { + var Piskel; + Piskel = Em.Application.create(); + Piskel.mainView = Em.View.create({ + templateName: 'main', + onCanvasClick: function() {} + }); + Piskel.mainView.append; + Piskel.Art = Ember.Object.extend({ + setContext: function(context) { + this.context = context; + }, + clear: function() { + this.context.save(); + return this.context.clearRect(0, 0, this.context.canvas.width, this.context.canvas.height); + } + }); + $('#main').ready(function() { + var context, mainCanvas; + mainCanvas = document.getElementById('main'); + context = mainCanvas.getContext('2d'); + context.save(); + context.clearRect(0, 0, context.canvas.width, context.canvas.height); + context.fillStyle = 'white'; + context.fillRect(0, 0, context.canvas.width, context.canvas.height); + context.restore(); + return Piskel.mainCanvas = document.getElementById('main'); + }); + return window.Piskel = Piskel; + }); + +}).call(this); diff --git a/preview/js/frameSheetModel.js b/preview/js/frameSheetModel.js new file mode 100644 index 00000000..1b4d573f --- /dev/null +++ b/preview/js/frameSheetModel.js @@ -0,0 +1,106 @@ + +var FrameSheetModel = (function() { + + var inst; + var frames = []; + var width; + var height; + + var createEmptyFrame_ = function() { + var emptyFrame = new Array(width); + for (var columnIndex=0; columnIndex < width; columnIndex++) { + emptyFrame[columnIndex] = new Array(height); + } + return emptyFrame; + }; + + var serializeFrame_ = function (frame) { + var buffer = []; + var serializedLine = ""; + for (var i = 0 ; i < frame.length ; i++) { + for(var j = 0 ; j < frame[i].length ; j++) { + if (typeof frame[i][j] == 'undefined' || frame[i][j] == 'tc') { + serializedLine += "0" + } else { + serializedLine += "1" + } + } + if (i%2 == 1) { + console.log(i); + buffer.push(parseInt(serializedLine, 2).toString(36)); + serializedLine = ""; + } + + } + return buffer.join(","); + }; + + return { + validate: function() { + return true; // I'm always right dude + }, + + // Could be use to pass around model using long GET param (good enough for simple models) and + // do some temporary locastorage + serialize: function() { + var buffer = []; + for (var i = 0 ; i < frames.length ; i++) { + buffer.push(serializeFrame_(frames[i])); + } + return buffer.join("+"); + //throw "FrameSheet.serialize Not implemented" + }, + + addEmptyFrame: function() { + this.addFrame(createEmptyFrame_()); + }, + + addFrame : function (frame) { + frames.push(frame); + }, + + getFrameCount: function() { + return frames.length; + }, + + getFrameByIndex: function(index) { + if (isNaN(index)) { + throw "Bad argument value for getFrameByIndex method: <" + index + ">" + } else if (index < 0 || index > frames.length) { + throw "Out of bound index for frameSheet object." + } + + return frames[index]; + }, + + removeFrameByIndex: function(index) { + if(index < 0 || index > inst.getFrameCount()) { + throw "Bad index value for removeFrameByIndex."; + } + frames.splice(index, 1); + }, + + duplicateFrameByIndex: function(frameToDuplicateIndex) { + var frame = inst.getFrameByIndex(frameToDuplicateIndex); + var clonedFrame = []; + for(var i=0, l=frame.length; i 100) { + animPreviewFPS = 100; + } + animFPSTuner.value = animPreviewFPS; + refreshUpdater = startPreviewRefresh(); + }); + }, + + createPreviews : function () { + var container = $('preview-list'), previewTile; + container.innerHTML = ""; + for (var i = 0, l = frameSheet.getFrameCount(); i < l ; i++) { + previewTile = this.createPreviewTile(i); + container.appendChild(previewTile); + } + }, + + createPreviewTile: function(tileNumber) { + var previewTileRoot = document.createElement("li"); + var classname = "preview-tile"; + + if (this.getActiveFrameIndex() == tileNumber) { + classname += " selected"; + } + previewTileRoot.className = classname; + + var canvasContainer = document.createElement("div"); + canvasContainer.className = "canvas-container"; + canvasContainer.setAttribute('style', + 'width:' + framePixelWidth * previewTileCanvasDpi + 'px; height:' + framePixelHeight * previewTileCanvasDpi + 'px;'); + + var canvasBackground = document.createElement("div"); + canvasBackground.className = "canvas-background"; + canvasContainer.appendChild(canvasBackground); + + var canvasPreview = document.createElement("canvas"); + canvasPreview.className = "canvas tile-view" + + canvasPreview.setAttribute('width', framePixelWidth * previewTileCanvasDpi); + canvasPreview.setAttribute('height', framePixelHeight * previewTileCanvasDpi); + + previewTileRoot.addEventListener('click', function(evt) { + // has not class tile-action: + // TODO: let me know when you want to start using a framework :) + if(!evt.target.className.match(new RegExp('(\\s|^)'+ 'tile-action' +'(\\s|$)'))) { + piskel.setActiveFrameAndRedraw(tileNumber); + } + }); + + var canvasPreviewDuplicateAction = document.createElement("button"); + canvasPreviewDuplicateAction.className = "tile-action" + canvasPreviewDuplicateAction.innerHTML = "dup" + + canvasPreviewDuplicateAction.addEventListener('click', function(evt) { + piskel.duplicateFrame(tileNumber); + }); + + this.drawFrameToCanvas(frameSheet.getFrameByIndex(tileNumber), canvasPreview, previewTileCanvasDpi); + canvasContainer.appendChild(canvasPreview); + previewTileRoot.appendChild(canvasContainer); + previewTileRoot.appendChild(canvasPreviewDuplicateAction); + + if(tileNumber > 0 || frameSheet.getFrameCount() > 1) { + var canvasPreviewDeleteAction = document.createElement("button"); + canvasPreviewDeleteAction.className = "tile-action" + canvasPreviewDeleteAction.innerHTML = "del" + canvasPreviewDeleteAction.addEventListener('click', function(evt) { + frameSheet.removeFrameByIndex(tileNumber); + animIndex = 0; + piskel.createPreviews(); + }); + previewTileRoot.appendChild(canvasPreviewDeleteAction); + } + + return previewTileRoot; + }, + + refreshAnimatedPreview : function () { + piskel.drawFrameToCanvas(frameSheet.getFrameByIndex(animIndex), previewCanvas, previewAnimationCanvasDpi); + animIndex++; + if (animIndex == frameSheet.getFrameCount()) { + animIndex = 0; + } + }, + + removeFrame: function(frameIndex) { + frameSheet.removeFrameByIndex(frameIndex); + + this.setActiveFrameAndRedraw(frameIndex - 1); + }, + + duplicateFrame: function(frameIndex) { + frameSheet.duplicateFrameByIndex(frameIndex); + + this.setActiveFrameAndRedraw(frameIndex + 1); + }, + + updateCursorInfo : function (event) { + var cursor = $('cursorInfo'); + cursor.style.top = event.clientY + 10 + "px"; + cursor.style.left = event.clientX + 10 + "px"; + + var coordinates = this.getRelativeCoordinates(event.clientX, event.clientY) + cursor.innerHTML = [ + "X : " + coordinates.x, + "Y : " + coordinates.y + ].join(", "); + }, + + onCanvasMousedown : function (event) { + isClicked = true; + var coords = this.getRelativeCoordinates(event.clientX, event.clientY); + if(event.button == 0) { + this.drawAt(coords.x, coords.y, penColor); + } else { + // Right click used to delete. + isRightClicked = true; + this.drawAt(coords.x, coords.y, TRANSPARENT_COLOR); + } + }, + + onCanvasMousemove : function (event) { + //this.updateCursorInfo(event); + if (isClicked) { + var coords = this.getRelativeCoordinates(event.clientX, event.clientY); + if(isRightClicked) { + this.drawAt(coords.x, coords.y, TRANSPARENT_COLOR); + } else { + this.drawAt(coords.x, coords.y, penColor); + } + } + }, + + onCanvasMouseup : function (event) { + if(isClicked || isRightClicked) { + // A mouse button was clicked on the drawing canvas before this mouseup event, + // the user was probably drawing on the canvas. + // Note: The mousemove movement (and the mouseup) may end up outside + // of the drawing canvas. + this.createPreviews(); + } + isClicked = false; + isRightClicked = false; + }, + + drawAt : function (x, y, color) { + var pixelWidthIndex = (x - x%drawingCanvasDpi) / 10; + var pixelHeightIndex = (y - y%drawingCanvasDpi) / 10; + + // Update model: + var currentFrame = frameSheet.getFrameByIndex(this.getActiveFrameIndex()); + + // TODO: make a better accessor for pixel state update: + // TODO: Make pen color dynamic: + currentFrame[pixelWidthIndex][pixelHeightIndex] = color; + + // Update view: + // TODO: Create a per pixel update function for perf ? + this.drawFrameToCanvas(currentFrame, drawingAreaCanvas, drawingCanvasDpi); + }, + + // TODO: move that to a FrameRenderer (/w cache) ? + drawFrameToCanvas: function(frame, canvasElement, dpi) { + var pixelColor, context = canvasElement.getContext('2d'); + for(var col = 0, num_col = frame.length; col < num_col; col++) { + for(var row = 0, num_row = frame[col].length; row < num_row; row++) { + pixelColor = frame[col][row]; + + if(pixelColor == undefined || pixelColor == TRANSPARENT_COLOR) { + context.clearRect(col * dpi, row * dpi, dpi, dpi); + } else { + context.fillStyle = pixelColor; + context.fillRect(col * dpi, row * dpi, dpi, dpi); + } + + + } + } + }, + + onCanvasContextMenu : function (event) { + event.preventDefault(); + event.stopPropagation(); + event.cancelBubble = true; + return false; + }, + + getRelativeCoordinates : function (x, y) { + var canvasRect = drawingAreaCanvas.getBoundingClientRect(); + return { + x : x - canvasRect.left, + y : y - canvasRect.top + } + } + }; + + window.piskel = piskel; + piskel.init(); + +})(function(id){return document.getElementById(id)}); \ No newline at end of file From 36751a2f605adad4ed02ff06fde81164a36e0550 Mon Sep 17 00:00:00 2001 From: Firstname Lastname Date: Tue, 28 Aug 2012 11:58:07 +0200 Subject: [PATCH 06/10] missing img --- preview/img/transparent_background.png | Bin 0 -> 48266 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 preview/img/transparent_background.png diff --git a/preview/img/transparent_background.png b/preview/img/transparent_background.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1f7a8e591c8d0cffd8b628b21c0a52a230ce58 GIT binary patch literal 48266 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�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 xWt1^R_}r8?VSHyqQi8R07q{Hg+&p38#N4G5 Date: Tue, 28 Aug 2012 15:36:21 +0300 Subject: [PATCH 07/10] Update preview/js/piskel.js --- preview/js/piskel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/preview/js/piskel.js b/preview/js/piskel.js index 09c943b1..f9d81306 100644 --- a/preview/js/piskel.js +++ b/preview/js/piskel.js @@ -69,7 +69,7 @@ binaryFrames[i] = ""; for (var j =0 ; j < chunks.length ; j++) { var binaryEnding = parseInt(chunks[j], 36).toString(2); - var missingZeros = (new Array(1 + 64 - binaryEnding.length)).join("0"); + var missingZeros = (new Array(1 + 32 - binaryEnding.length)).join("0"); binaryFrames[i] += (missingZeros + binaryEnding); console.log((missingZeros + binaryEnding).length); } From c1828a1a704e3d659877e47b5ad2b96da71eef0e Mon Sep 17 00:00:00 2001 From: Julian Descottes Date: Tue, 28 Aug 2012 15:36:51 +0300 Subject: [PATCH 08/10] Update preview/js/frameSheetModel.js --- preview/js/frameSheetModel.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/preview/js/frameSheetModel.js b/preview/js/frameSheetModel.js index 1b4d573f..d4d2712b 100644 --- a/preview/js/frameSheetModel.js +++ b/preview/js/frameSheetModel.js @@ -1,4 +1,3 @@ - var FrameSheetModel = (function() { var inst; @@ -16,8 +15,8 @@ var FrameSheetModel = (function() { var serializeFrame_ = function (frame) { var buffer = []; - var serializedLine = ""; for (var i = 0 ; i < frame.length ; i++) { + var serializedLine = ""; for(var j = 0 ; j < frame[i].length ; j++) { if (typeof frame[i][j] == 'undefined' || frame[i][j] == 'tc') { serializedLine += "0" @@ -25,11 +24,7 @@ var FrameSheetModel = (function() { serializedLine += "1" } } - if (i%2 == 1) { - console.log(i); - buffer.push(parseInt(serializedLine, 2).toString(36)); - serializedLine = ""; - } + buffer.push(parseInt(serializedLine, 2).toString(36)); } return buffer.join(","); From b8c59702e98d7d2d75c811634d5ae000d6c7ae8f Mon Sep 17 00:00:00 2001 From: juliandescottes Date: Wed, 29 Aug 2012 11:51:40 +0200 Subject: [PATCH 09/10] test --- js/piskel.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/piskel.js b/js/piskel.js index e3ca2d35..95433cc0 100644 --- a/js/piskel.js +++ b/js/piskel.js @@ -369,4 +369,5 @@ window.piskel = piskel; piskel.init(); -})(function(id){return document.getElementById(id)}); \ No newline at end of file +})(function(id){return document.getElementById(id)}); +//small change for checking my git setup :( \ No newline at end of file From 00c5975c653c9d7c1193c56374d3d7985884904c Mon Sep 17 00:00:00 2001 From: juliandescottes Date: Wed, 29 Aug 2012 13:43:36 +0200 Subject: [PATCH 10/10] slider --- index.html | 3 ++- js/piskel.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index f167a51d..1a3c3389 100644 --- a/index.html +++ b/index.html @@ -33,7 +33,8 @@
- + + 12 fps
diff --git a/js/piskel.js b/js/piskel.js index 95433cc0..bdeb03f1 100644 --- a/js/piskel.js +++ b/js/piskel.js @@ -148,7 +148,7 @@ }; var refreshUpdater = startPreviewRefresh(); - animFPSTuner.addEventListener('keyup', function(evt) { + animFPSTuner.addEventListener('change', function(evt) { window.clearInterval(refreshUpdater); animPreviewFPS = parseInt(animFPSTuner.value, 10); if(isNaN(animPreviewFPS)) { @@ -167,6 +167,7 @@ animPreviewFPS = 100; } animFPSTuner.value = animPreviewFPS; + $("fps-value").innerHTML = animPreviewFPS + " fps"; refreshUpdater = startPreviewRefresh(); }); },