From 1d5a4113dcf2b87b177cdebda236a0849ea77a5e Mon Sep 17 00:00:00 2001 From: rlx <0x0073@0x2620.org> Date: Sun, 7 Aug 2011 18:30:14 +0000 Subject: [PATCH] new icon script --- pandora/scripts/item_icon | 25 +++++++++------ pandora/templates/api.html | 2 +- pandora/templates/embed.html | 2 +- pandora/templates/index.html | 15 ++++----- static/js/pandora/UI.js | 10 ++---- static/js/pandora/ui/menu.js | 41 ++++++++++++------------- static/png/icon.mask.png | Bin 3581 -> 0 bytes static/png/{icon.16.png => icon16.png} | Bin static/png/iconMask.png | Bin 0 -> 6446 bytes static/png/iconTimeline.png | Bin 0 -> 2997 bytes static/png/iconTimelineInnerMask.png | Bin 0 -> 1831 bytes static/png/iconTimelineOuterMask.png | Bin 0 -> 1924 bytes 12 files changed, 47 insertions(+), 48 deletions(-) delete mode 100644 static/png/icon.mask.png rename static/png/{icon.16.png => icon16.png} (100%) create mode 100644 static/png/iconMask.png create mode 100644 static/png/iconTimeline.png create mode 100644 static/png/iconTimelineInnerMask.png create mode 100644 static/png/iconTimelineOuterMask.png diff --git a/pandora/scripts/item_icon b/pandora/scripts/item_icon index 94b7b40..16267c1 100755 --- a/pandora/scripts/item_icon +++ b/pandora/scripts/item_icon @@ -20,13 +20,13 @@ import sys static_root = os.path.join(os.path.dirname(__file__), '..', '..', 'static') def render_icon(frame, timeline, icon): - icon_width = 512 - icon_height = 512 + icon_width = 1024 + icon_height = 1024 icon_image = Image.new('RGBA', (icon_width, icon_height), (0, 0, 0, 0)) frame_width = icon_width - frame_ratio = 4 / 3 + frame_ratio = 1 frame_height = int(round(frame_width / frame_ratio)) - frame_image = Image.open(frame) if frame else Image.new('RGB', (512, 384), (0, 0, 0)) + frame_image = Image.open(frame) if frame else Image.new('RGB', (1024, 768), (0, 0, 0)) frame_image_ratio = frame_image.size[0] / frame_image.size[1] if frame_ratio < frame_image_ratio: frame_image = frame_image.resize((int(frame_height * frame_image_ratio), frame_height), Image.ANTIALIAS) @@ -36,13 +36,20 @@ def render_icon(frame, timeline, icon): frame_image = frame_image.resize((frame_width, int(frame_width / frame_image_ratio)), Image.ANTIALIAS) top = int((frame_image.size[1] - frame_height) / 2) frame_image = frame_image.crop((0, top, frame_width, top + frame_height)) - mask_image = Image.open(os.path.join(static_root, 'png', 'icon.mask.png')) icon_image.paste(frame_image, (0, 0)) - timeline_image = Image.open(timeline) if timeline else Image.new('RGB', (512, 128), (0, 0, 0)) - timeline_image = timeline_image.resize((icon_width, 128), Image.ANTIALIAS) - icon_image.paste(timeline_image, (0, icon_height - 128)) + timeline_left = 64 + timeline_top = 832 + timeline_width = 896 + timeline_height = 128 + timeline_image = Image.new('RGB', (timeline_width + 8, timeline_height + 8), (255, 255, 255)) + mask_image = Image.open(os.path.join(static_root, 'png', 'iconTimelineOuterMask.png')) + icon_image.paste(timeline_image, (timeline_left - 4, timeline_top - 4), mask=mask_image) + timeline_image = Image.open(timeline) if timeline else Image.new('RGB', (timeline_width, timeline_height), (0, 0, 0)) + timeline_image = timeline_image.resize((timeline_width, timeline_height), Image.ANTIALIAS) + mask_image = Image.open(os.path.join(static_root, 'png', 'iconTimelineInnerMask.png')) + icon_image.paste(timeline_image, (timeline_left, timeline_top), mask=mask_image) # we're using jpegs with border-radius - # mask_image = Image.open(os.path.join(static_root, 'png', 'icon.mask.png')) + # mask_image = Image.open(os.path.join(static_root, 'png', 'iconMask.png')) # icon_image.putalpha(mask_image) icon_image.save(icon) diff --git a/pandora/templates/api.html b/pandora/templates/api.html index 59d3da7..0d64e93 100644 --- a/pandora/templates/api.html +++ b/pandora/templates/api.html @@ -4,7 +4,7 @@ {{sitename}} API - + diff --git a/pandora/templates/embed.html b/pandora/templates/embed.html index c4e2cc0..4bcb82f 100644 --- a/pandora/templates/embed.html +++ b/pandora/templates/embed.html @@ -3,7 +3,7 @@ {{settings.SITENAME}} - + + + diff --git a/static/js/pandora/UI.js b/static/js/pandora/UI.js index d7a13ef..8804bb3 100644 --- a/static/js/pandora/UI.js +++ b/static/js/pandora/UI.js @@ -1,13 +1,8 @@ // vim: et:ts=4:sw=4:sts=4:ft=javascript pandora.UI = (function() { return { - set: function(obj) { - if (arguments.length == 2) { - // translate (key, value) to {key: value} - var obj_ = {}; - obj_[arguments[0]] = arguments[1]; - obj = obj_; - } + set: function(/*{key: val} or key, val*/) { + var obj = Ox.makeObject(arguments); $.each(obj, function(key, val) { Ox.print('key', key, 'val', val); var i = 0, @@ -24,7 +19,6 @@ pandora.UI = (function() { } }); Ox.len(obj) && pandora.api.setUI(obj); - //alert('set ' + JSON.stringify(obj)) } } }()); diff --git a/static/js/pandora/ui/menu.js b/static/js/pandora/ui/menu.js index 53e3731..47352d9 100644 --- a/static/js/pandora/ui/menu.js +++ b/static/js/pandora/ui/menu.js @@ -165,36 +165,33 @@ pandora.ui.mainMenu = function() { }) .bindEvent({ change: function(event, data) { + var value = data.checked[0].id; if (data.id == 'find') { - var id = data.checked[0].id; - pandora.$ui.findSelect.selectItem(id); - } else if (data.id == 'icons') { + pandora.$ui.findSelect.selectItem(value); + } else if (data.id == 'movieview') { + var id = document.location.pathname.split('/')[1]; + if (value == 'info') + url(id + '/info'); + else + url(id); + } else if (data.id == 'ordermovies') { + pandora.$ui.list.sortList(pandora.user.ui.lists[pandora.user.ui.list].sort[0].key, value == 'ascending' ? '' : '-'); + } else if (data.id == 'sortmovies') { + var operator = pandora.getSortOperator(value); + pandora.$ui.mainMenu.checkItem('sortMenu_ordermovies_' + (operator === '' ? 'ascending' : 'descending')); + pandora.$ui.sortSelect.selectItem(value); + pandora.$ui.list.sortList(value, operator); + pandora.URL.set(pandora.Query.toString()); + } else if (data.id == 'viewicons') { + pandora.UI.set({icons: value}) var $list = !pandora.user.ui.item ? pandora.$ui.list : pandora.$ui.browser; /* list.options({ item: }); */ - } else if (data.id == 'movieview') { - var view = data.checked[0].id; - var id = document.location.pathname.split('/')[1]; - if (view == 'info') - url(id + '/info'); - else - url(id); - } else if (data.id == 'ordermovies') { - var id = data.checked[0].id; - pandora.$ui.list.sortList(pandora.user.ui.lists[pandora.user.ui.list].sort[0].key, id == 'ascending' ? '' : '-'); - } else if (data.id == 'sortmovies') { - var id = data.checked[0].id, - operator = pandora.getSortOperator(id); - pandora.$ui.mainMenu.checkItem('sortMenu_ordermovies_' + (operator === '' ? 'ascending' : 'descending')); - pandora.$ui.sortSelect.selectItem(id); - pandora.$ui.list.sortList(id, operator); - pandora.URL.set(pandora.Query.toString()); } else if (data.id == 'viewmovies') { - var view = data.checked[0].id; - url('#view=' + view); + url('#view=' + value); } }, click: function(event, data) { diff --git a/static/png/icon.mask.png b/static/png/icon.mask.png deleted file mode 100644 index f13365385e59262da27f23f98f2f135aa24d761e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3581 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 P^{+!AUF?~*_|*RbuP1MH diff --git a/static/png/icon.16.png b/static/png/icon16.png similarity index 100% rename from static/png/icon.16.png rename to static/png/icon16.png diff --git a/static/png/iconMask.png b/static/png/iconMask.png new file mode 100644 index 0000000000000000000000000000000000000000..df3efd76d8b1fc44cbdc422dfe9bb01093a6da9d GIT binary patch literal 6446 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 Sdi_5LIQsL6!$pUPzx@wM!HsYL literal 0 HcmV?d00001 diff --git a/static/png/iconTimeline.png b/static/png/iconTimeline.png new file mode 100644 index 0000000000000000000000000000000000000000..58098d0826c06d35060806455a91d3bb99ba4f9e GIT binary patch literal 2997 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 VOQJgeyi@=H002ovPDHLkV1mosQ78Za literal 0 HcmV?d00001 diff --git a/static/png/iconTimelineOuterMask.png b/static/png/iconTimelineOuterMask.png new file mode 100644 index 0000000000000000000000000000000000000000..a9db0b90616be5c29c01c24cf51b9f78460ffbf5 GIT binary patch literal 1924 zcmV-~2YdL5P)*t5}iMOMZ)$dq!5w~pKw6V4NzXO<&eEsU>iz@f2u88gJ+qZEV3RIGM_H<;VnjNaB zRdnZ$4q6EKlNx^VIN^J??`G}V)7er}9>A*cp$CtAPW4yBhJ9UK4YlV1jG7)Cyf^J< zqMss0y1VzzFAiYV{egj0XHVq>U%ssT473s zA~qgAw4q*U0JGlQx;a&LLir+YJ#w&~X#lfs-*{ebbJ-#uJr=ER7{IK=wd-ZJmMP-u zlP9=-57bNQ%H@wGHX>>n<*sbmpjr`81%1~BX0rFe-grHXj^%(9@u z0A_u?aIyG?;zeB0+v@^M16VcF*Y~^F`l3Z_I@=Ry7{IRn^TqBPE>^_mzmEqU1~BXD zxrxG+Mb1E*=phiC<9|05t}HC#g0u7x2+;Af3kud17O}S{geZVvJ-r313W|8Ta1MaF z>OGymCclWWGhDX-0_M)d^4H`JJ5F&O9|+vCQysZ0a*MdShu^gUAz0V5I%k|)#FPBa z8wkbjlR3kjA|5>vY81e*6GyX0*+txXjQbCPkVKAc%^GDDvGEA^;{&0I9%;-BvWj?^ z=hFZoI(Rs7{fLBL{e% zHxRNV2htZR(naj%{T4vz_IG;=UJ)C*OHKt4m~QWNhh7o)?Nv(x7`Auc?7v+F5ogfWUM{MZ6;JY|)JZ*wwOA#4F+s z-6VizJ49xm^xghH?n4B$r2acHdqixfhk%+$yUZ4GyLJ-5vh5<`M7C_x4gy%VZHtH# z+02oANyJIhM(r4YZ5x}!Nn5LS48XS5HgU3EI|X3fdU3+TOaWz4 zak5rB1Yq4-am&|ehXAZwv)rv(q#XjVZqX{&s+|EqtK(KgKwXPlsT~2pO1DBg0)Q2+ zSvvxNX17#30)VA%v33Lii`_!)2mltk#>$fb1gkMJ!~OYywv?+p2SCu=zuE}^{OhK) zBLJ9kzqBI&_~m|RM*#4{ebbHr;G3J!jsRf7eb$Zu;IsRr9Ra{6H?AE4z_?3lM*xs? zV?VVs0M`8+b6-AahXAbm@Wsh{?GS)<@5M<%I|N`|LY%zS4gpyAR-B9`wNn7LB}c`{ z_D+^%N_dDsIm(IO0cqp!v1u!chAa(l_-E& zZ!$-}Oc6(KX+#0+x-~ktm?@&%yd8cLz^>ajGs{^;oVvjyPJz%QZcJqcSw)oR*SJF% z2ubSN^Q=*J5#{=okh1`0UAdk;$|<5;ei&*Lz^sRtbB4J^{Mi34%q)Oa@A^OHjB|@9 z!7zQxv>!rL0MdcMy;umH@3j-K6b0PnSZ23i$i+v$w0nF;Vn7^i=h|<>|MiRiT z{=%bOVG)0yzZymsz^bd~e;2GPETT-FqlrLZuAZALTp1}gv*~P4z*zvR`p*~XVeul$ zg5KUDhe`nRG}G5tcwQ={iYRjW%(4K}05*NSQ1E@}tWrgk*r|0vg#nCucd68aFiI9t zI(l{o69zEqVSmXNul=XwPQ%Hu6QyekpgO55mp_)=Shi|Mk45XA2Cyk{?RuH5<&Sw= zj~uLT7{I98H=dW7majx@11uTz^3~H13n(g=I;VU!@jPrhI!@z?3o@Myyxq6 z+`g|A?%LDYQhOf2pz)yxk9