diff --git a/index.html b/index.html index 95ec6ae..56dfa6d 100644 --- a/index.html +++ b/index.html @@ -6,7 +6,7 @@ miniPaint - image editor - + diff --git a/src/css/layout.css b/src/css/layout.css index 80c924d..6b6eb7e 100644 --- a/src/css/layout.css +++ b/src/css/layout.css @@ -1,9 +1,13 @@ .wrapper{ display: -ms-grid; display: grid; - height: calc(100vh - 30px); margin: 0; - position: relative; + position: fixed; /* dont change it, vh does not work on mobiles with bottom footer */ + top: 30px; + right: 0; + left: 0; + bottom: 5px; + height: auto; overflow: hidden; -ms-grid-rows: auto 1fr; @@ -624,6 +628,9 @@ canvas{ body{ padding-top:50px; } + .wrapper{ + top: 50px; + } } @media screen and (max-width:550px){ .canvas_wrapper{ diff --git a/src/css/popup.css b/src/css/popup.css index c0e68b3..23ccfef 100644 --- a/src/css/popup.css +++ b/src/css/popup.css @@ -161,6 +161,9 @@ } @media screen and (max-width:500px){ + #popup { + max-height: calc(80vh - 20px); /* mobile phones has bottom menu */ + } #popup tr{ display: block; margin-bottom: 10px; diff --git a/src/css/reset.css b/src/css/reset.css index a6ad683..439d98f 100644 --- a/src/css/reset.css +++ b/src/css/reset.css @@ -1,7 +1,3 @@ -*{ - box-sizing: border-box; - background-repeat: no-repeat; -} :root { /* original - default */ --background: radial-gradient(circle, #aaa 0%, #4d5355 100%); @@ -41,9 +37,6 @@ --scrollbar-thumb-color: #2f3739; --mobile-menu-toggle-filter: invert(1); } -html { - font-size: 10px; /* Base is 10px for easy REM calculation */ -} body.theme-light{ /* light */ --background: #f9f9fa; @@ -112,6 +105,14 @@ body.theme-green{ --scrollbar-thumb-color: #80937d; --mobile-menu-toggle-filter: invert(1); } + +*{ + box-sizing: border-box; + background-repeat: no-repeat; +} +html { + font-size: 10px; /* Base is 10px for easy REM calculation */ +} body{ margin: 0px; padding: 0px; diff --git a/src/js/core/base-gui.js b/src/js/core/base-gui.js index 9da1cf7..a775516 100644 --- a/src/js/core/base-gui.js +++ b/src/js/core/base-gui.js @@ -270,11 +270,8 @@ class Base_gui_class { if (auto_size == false) { //screen size is smaller then 400x300 - config.WIDTH = parseInt(page_w) - 5; + config.WIDTH = parseInt(page_w) - 15; config.HEIGHT = parseInt(page_h) - 10; - if (page_w < 585) { - config.HEIGHT = config.HEIGHT - 15; - } } } } diff --git a/src/js/core/base-tools.js b/src/js/core/base-tools.js index 0e2a6ff..c300dc9 100644 --- a/src/js/core/base-tools.js +++ b/src/js/core/base-tools.js @@ -139,7 +139,7 @@ class Base_tools_class { if (event.changedTouches) { //using touch events - event = event.changedTouches[0]; //@todo - also use others? + event = event.changedTouches[0]; } var mouse_x = event.pageX - this.Base_gui.canvas_offset.x; diff --git a/src/js/core/gui/gui-preview.js b/src/js/core/gui/gui-preview.js index 091b30b..98202a8 100644 --- a/src/js/core/gui/gui-preview.js +++ b/src/js/core/gui/gui-preview.js @@ -40,6 +40,8 @@ class GUI_preview_class { // preview mini window size on right sidebar this.PREVIEW_SIZE = {w: 176, h: 100}; + this.canvas_offset = {x: 0, y: 0}; + this.zoom_data = { x: 0, y: 0, @@ -65,6 +67,7 @@ class GUI_preview_class { set_events() { var _this = this; + var is_touch = false; document.addEventListener('mousedown', function (e) { _this.mouse_pressed = true; @@ -72,6 +75,12 @@ class GUI_preview_class { document.addEventListener('mouseup', function (e) { _this.mouse_pressed = false; }, false); + document.addEventListener('touchstart', function (e) { + _this.mouse_pressed = true; + }, false); + document.addEventListener('touchend', function (e) { + _this.mouse_pressed = false; + }, false); document.getElementById('zoom_range').addEventListener('input', function (e) { _this.set_center_zoom(); _this.zoom(this.value); @@ -113,15 +122,36 @@ class GUI_preview_class { config.need_render = true; }, false); document.getElementById("canvas_preview").addEventListener('mousedown', function (e) { - //change zoom offset + if(is_touch) + return; _this.set_zoom_position(e); }, false); document.getElementById("canvas_preview").addEventListener('mousemove', function (e) { - //change zoom offset + if(is_touch) + return; if (_this.mouse_pressed == false) return; _this.set_zoom_position(e); }, false); + + document.getElementById("canvas_preview").addEventListener('touchstart', function (e) { + is_touch = true; + + //calc canvas position offset + var bodyRect = document.body.getBoundingClientRect(); + var canvas_el = document.getElementById("canvas_preview").getBoundingClientRect(); + _this.canvas_offset.x = canvas_el.left - bodyRect.left; + _this.canvas_offset.y = canvas_el.top - bodyRect.top; + + //change zoom offset + _this.set_zoom_position(e); + }); + document.getElementById("canvas_preview").addEventListener('touchmove', function (e) { + //change zoom offset + if (_this.mouse_pressed == false) + return; + _this.set_zoom_position(e); + }); } prepare_canvas() { @@ -271,14 +301,24 @@ class GUI_preview_class { this.zoom_data.y = config.visible_height / 2; } - set_zoom_position(e) { + set_zoom_position(event) { + var mouse_x = event.offsetX; + var mouse_y = event.offsetY; + if (event.changedTouches) { + //touch events + event = event.changedTouches[0]; + + mouse_x = event.pageX - this.canvas_offset.x; + mouse_y = event.pageY - this.canvas_offset.y; + } + var visible_w = config.visible_width / config.ZOOM; var visible_h = config.visible_height / config.ZOOM; var mini_w = this.PREVIEW_SIZE.w * visible_w / config.WIDTH; var mini_h = this.PREVIEW_SIZE.h * visible_h / config.HEIGHT; - var change_x = (e.offsetX - mini_w / 2) / this.PREVIEW_SIZE.w * config.WIDTH; - var change_y = (e.offsetY - mini_h / 2) / this.PREVIEW_SIZE.h * config.HEIGHT; + var change_x = (mouse_x - mini_w / 2) / this.PREVIEW_SIZE.w * config.WIDTH; + var change_y = (mouse_y - mini_h / 2) / this.PREVIEW_SIZE.h * config.HEIGHT; var zoom_data = this.zoom_data; zoom_data.move_pos = {}; diff --git a/src/js/libs/popup.js b/src/js/libs/popup.js index 3d6cf06..6d51daa 100644 --- a/src/js/libs/popup.js +++ b/src/js/libs/popup.js @@ -169,7 +169,7 @@ class Dialog_class { return; event.preventDefault(); _this.resize_clicked.x = event.pageX; - _this.resize_clicked.y = event.pageY;s + _this.resize_clicked.y = event.pageY; var target = document.querySelector('#popup'); _this.element_offset.x = target.offsetTop;