effect.rml 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <rml>
  2. <head>
  3. <link type="text/rcss" href="/assets/rml.rcss"/>
  4. <link type="text/rcss" href="effect_style.rcss"/>
  5. <title>Effect Sample</title>
  6. <style>
  7. @spritesheet effect-sheet
  8. {
  9. src: /assets/invader.tga;
  10. icon-invader: 179px 152px 51px 39px;
  11. }
  12. .filter {
  13. transform-origin: 50% 0;
  14. }
  15. .box {
  16. color: black;
  17. font-size: 18dp;
  18. width: 280dp;
  19. height: 70dp;
  20. background: #fff8;
  21. border: 2dp #def6f7;
  22. margin: 10dp auto;
  23. padding: 15dp;
  24. border-radius: 30dp 8dp;
  25. box-sizing: border-box;
  26. position: relative;
  27. }
  28. .box img, .box .placeholder {
  29. float: left;
  30. margin-right: 8dp;
  31. }
  32. .box .placeholder {
  33. width: 51dp;
  34. height: 39dp;
  35. }
  36. .box .label {
  37. color: #bbba;
  38. position: absolute;
  39. font-size: 0.75em;
  40. bottom: 0.1em;
  41. right: 1.5em;
  42. }
  43. .box.window {
  44. position: absolute;
  45. left: 30dp;
  46. margin: 0;
  47. }
  48. .box.window handle {
  49. position: absolute;
  50. top: 0; right: 0; bottom: 0; left: 0;
  51. display: block;
  52. cursor: move;
  53. }
  54. .box.big {
  55. width: 500dp;
  56. height: 260dp;
  57. max-width: 100%;
  58. border-color: #333;
  59. }
  60. .transform, .filter.transform_all > .box { transform: rotate3d(0.2, 0.4, 0.1, 15deg); }
  61. .brightness { filter: brightness(0.5); }
  62. .contrast { filter: contrast(0.5); }
  63. .sepia { filter: sepia(80%); }
  64. .grayscale { filter: grayscale(0.9); }
  65. .saturate { filter: saturate(200%); }
  66. .hue_rotate { filter: hue-rotate(260deg); }
  67. .invert { filter: invert(100%); }
  68. .opacity_low { filter: opacity(0.2); }
  69. .blur { filter: blur(25px); }
  70. .back_blur { backdrop-filter: blur(15px); }
  71. .dropshadow { filter: drop-shadow(#f33f 30px 20px 5px); }
  72. </style>
  73. </head>
  74. <body
  75. data-model="effects"
  76. data-style-perspective="perspective >= 3000 ? 'none' : perspective + 'dp'"
  77. data-style-perspective-origin-x="perspective_origin_x + '%'"
  78. data-style-perspective-origin-y="perspective_origin_y + '%'"
  79. >
  80. <handle move_target="#document"><h1>Effect Sample</h1></handle>
  81. <handle class="size" size_target="#document"/>
  82. <div id="menu_button" data-class-open="show_menu" data-event-click="show_menu = !show_menu">—<br/>—<br/>—</div>
  83. <div id="menu" data-if="show_menu">
  84. <div id="submenu">
  85. <div data-event-click="submenu = 'filter'" data-class-selected="submenu == 'filter'">Filter</div>
  86. <div data-event-click="submenu = 'transform'" data-class-selected="submenu == 'transform'">Transform</div>
  87. </div>
  88. <table>
  89. <col style="width: 200%"/><col style="width: 300%"/><col style="width: 100%"/>
  90. <tbody data-if="submenu == 'filter'">
  91. <tr><td>Opacity</td><td><input type="range" min="0" max="1" step="0.01" data-value="opacity"/></td><td>{{ opacity }}</td></tr>
  92. <tr><td>Sepia</td><td><input type="range" min="0" max="1" step="0.01" data-value="sepia"/></td><td>{{ sepia*100 }} %</td></tr>
  93. <tr><td>Grayscale</td><td><input type="range" min="0" max="1" step="0.01" data-value="grayscale"/></td><td>{{ grayscale*100 }} %</td></tr>
  94. <tr><td>Saturate</td><td><input type="range" min="0" max="2" step="0.01" data-value="saturate"/></td><td>{{ saturate*100 }} %</td></tr>
  95. <tr><td>Brightness</td><td><input type="range" min="0" max="2" step="0.02" data-value="brightness"/></td><td>{{ brightness*100 }} %</td></tr>
  96. <tr><td>Contrast</td><td><input type="range" min="0" max="2" step="0.02" data-value="contrast"/></td><td>{{ contrast*100 }} %</td></tr>
  97. <tr><td>Hue</td><td><input type="range" min="0" max="360" step="1" data-value="hue_rotate"/></td><td>{{ hue_rotate }} deg</td></tr>
  98. <tr><td>Invert</td><td><input type="range" min="0" max="1" step="0.01" data-value="invert"/></td><td>{{ invert*100 }} %</td></tr>
  99. <tr><td>Blur</td><td><input type="range" min="0" max="150" step="1" data-value="blur"/></td><td>{{ blur }} px</td></tr>
  100. <tr><td><label for="drop_shadow">Drop shadow</label></td><td colspan="2"><input id="drop_shadow" type="checkbox" data-checked="drop_shadow"/></td></tr>
  101. </tbody>
  102. <tbody data-if="submenu == 'transform'">
  103. <tr><td>Scale</td><td><input type="range" min="0.1" max="2.0" step="0.1" data-value="scale"/></td><td>{{ scale | format(1) }}x</td></tr>
  104. <tr><td>Rotate X</td><td><input type="range" min="-90" max="90" step="5" data-value="rotate_x"/></td><td>{{ rotate_x }} deg</td></tr>
  105. <tr><td>Rotate Y</td><td><input type="range" min="-90" max="90" step="5" data-value="rotate_y"/></td><td>{{ rotate_y }} deg</td></tr>
  106. <tr><td>Rotate Z</td><td><input type="range" min="-90" max="90" step="5" data-value="rotate_z"/></td><td>{{ rotate_z }} deg</td></tr>
  107. <tr><td>Perspective</td><td><input type="range" min="100" max="3000" step="25" data-value="perspective"/></td><td>{{ perspective >= 3000 ? 'none' : perspective + ' dp' }}</td></tr>
  108. <tr><td>Perspective X</td><td><input type="range" min="-100" max="200" step="5" data-value="perspective_origin_x" data-attrif-disabled="perspective >= 3000"/></td><td>{{ perspective_origin_x }} %</td></tr>
  109. <tr><td>Perspective Y</td><td><input type="range" min="-100" max="200" step="5" data-value="perspective_origin_y" data-attrif-disabled="perspective >= 3000"/></td><td>{{ perspective_origin_y }} %</td></tr>
  110. <tr><td><label for="transform_all">Transform all</label></td><td colspan="2"><input id="transform_all" type="checkbox" data-checked="transform_all"/></td></tr>
  111. </tbody>
  112. </table>
  113. <button data-event-click="reset()">Reset</button>
  114. </div>
  115. <div class="filter"
  116. data-style-transform="'scale(' + scale + ') rotateX(' + rotate_x + 'deg) rotateY(' + rotate_y + 'deg) rotateZ(' + rotate_z + 'deg)'"
  117. data-style-filter="'opacity(' + opacity + ') sepia(' + sepia + ') grayscale(' + grayscale + ') saturate(' + saturate + ') brightness(' + brightness + ') contrast(' + contrast + ') hue-rotate(' + hue_rotate + 'deg) invert(' + invert + ') blur(' + blur + 'px)' + (drop_shadow ? ' drop-shadow(#f11b 10px 10px 8px)' : '')"
  118. data-class-transform_all="transform_all"
  119. >
  120. <div class="box"><img sprite="icon-invader"/>Hello, do you feel the funk?</div>
  121. <div class="box big"><img sprite="icon-invader"/>Hello, do you feel the funk?</div>
  122. <div class="box hue_rotate"><img sprite="icon-invader"/>Hello, do you feel the funk?</div>
  123. <div class="box saturate"><img sprite="icon-invader"/>Hello, do you feel the funk?</div>
  124. <div class="box invert"><img sprite="icon-invader"/>Hello, do you feel the funk?</div>
  125. <div class="box brightness"><img sprite="icon-invader"/>Hello, do you feel the funk?</div>
  126. <div class="box contrast"><img sprite="icon-invader"/>Hello, do you feel the funk?</div>
  127. <div class="box dropshadow"><img sprite="icon-invader"/>Hello, do you feel the funk?</div>
  128. <div class="box window sepia" style="top: 375dp"><handle move_target="#parent"/><img sprite="icon-invader"/>Hello, do you feel the funk?</div>
  129. <div class="box window back_blur" style="top: 475dp"><handle move_target="#parent"/><img sprite="icon-invader"/>Hello, do you feel the funk?</div>
  130. <div class="box grayscale"><img sprite="icon-invader"/>Hello, do you feel the funk?</div>
  131. <div class="box opacity_low"><img sprite="icon-invader"/>Hello, do you feel the funk?</div>
  132. </div>
  133. </body>
  134. </rml>