diff --git a/photos/IMG_0129.JPG b/photos/IMG_0129.JPG new file mode 100644 index 0000000..63a8ea4 Binary files /dev/null and b/photos/IMG_0129.JPG differ diff --git a/photos/IMG_0139.JPG b/photos/IMG_0139.JPG new file mode 100644 index 0000000..aa4a921 Binary files /dev/null and b/photos/IMG_0139.JPG differ diff --git a/src/album/config/Item.java b/src/album/config/Item.java index 7027f6f..5e9cadc 100644 --- a/src/album/config/Item.java +++ b/src/album/config/Item.java @@ -1,7 +1,5 @@ package album.config; -import java.util.*; -import java.io.*; public class Item extends Entry diff --git a/src/album/config/Photo.java b/src/album/config/Photo.java index a86ffe7..d695f71 100644 --- a/src/album/config/Photo.java +++ b/src/album/config/Photo.java @@ -1,10 +1,5 @@ package album.config; -import java.util.*; -import java.io.*; -import javax.imageio.*; -import java.awt.image.*; -import java.awt.geom.*; public class Photo extends Item diff --git a/src/album/config/Transform.java b/src/album/config/Transform.java index 75eef03..2cc7d58 100644 --- a/src/album/config/Transform.java +++ b/src/album/config/Transform.java @@ -1,7 +1,7 @@ package album.config; -import java.awt.*; -import java.awt.geom.*; +import java.awt.Dimension; +import java.awt.Rectangle; public class Transform { Dimension size; diff --git a/src/album/editor/Editor.java b/src/album/editor/Editor.java index 18aac44..51e62ee 100644 --- a/src/album/editor/Editor.java +++ b/src/album/editor/Editor.java @@ -97,6 +97,7 @@ public class Editor } + @Override protected void paintComponent(Graphics g1) { super.paintComponent(g1); diff --git a/src/album/web/AlbumServlet.java b/src/album/web/AlbumServlet.java index 1aabc85..9360c58 100644 --- a/src/album/web/AlbumServlet.java +++ b/src/album/web/AlbumServlet.java @@ -11,12 +11,14 @@ public class AlbumServlet { File baseDir = new File("/home/knut"); + @Override public void init() throws ServletException { System.out.println("in init of Album"); } + @Override public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { @@ -113,6 +115,7 @@ public class AlbumServlet } + @Override public String getServletInfo() { return "Display a directory as an album"; } diff --git a/src/album/web/BitmapServlet.java b/src/album/web/BitmapServlet.java index 14f1347..7bc9643 100644 --- a/src/album/web/BitmapServlet.java +++ b/src/album/web/BitmapServlet.java @@ -23,6 +23,7 @@ public class BitmapServlet protected int size; + @Override public void init() throws ServletException { @@ -35,6 +36,7 @@ public class BitmapServlet } + @Override public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { diff --git a/src/album/web/PhotoServlet.java b/src/album/web/PhotoServlet.java index a1f5f29..bfbc19e 100644 --- a/src/album/web/PhotoServlet.java +++ b/src/album/web/PhotoServlet.java @@ -23,6 +23,7 @@ public class PhotoServlet protected int size; + @Override public void init() throws ServletException { @@ -35,6 +36,7 @@ public class PhotoServlet } + @Override public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { diff --git a/webapp/editor.html b/webapp/editor.html new file mode 100644 index 0000000..81bbe18 --- /dev/null +++ b/webapp/editor.html @@ -0,0 +1,27 @@ + + +Editor + + + + + + + +
+
+, +
+ +
+Knut +
+ + + diff --git a/webapp/editor.js b/webapp/editor.js new file mode 100644 index 0000000..ae3b86b --- /dev/null +++ b/webapp/editor.js @@ -0,0 +1,131 @@ + +var rotation; +var rotationStep; +var canvas; +var ctx; +var locationx; +var locationy; +var autoscale = false; +var radius = 1; // the radius of the circle whe put the photo inside +var zoomfactor = 1; +var baseCoordZoom; +var trX = 0; +var trY = 0; + +function initialize() { + rotation = 0.0; + rotationStep = 2 * Math.PI / 360; + canvas = document.getElementById("photoarea"); + locationx = document.getElementById("locationx"); + locationy = document.getElementById("locationy"); + if (canvas.getContext) { + ctx = canvas.getContext("2d"); + } + canvas.onmousemove = mouseMove; + canvas.onmousewheel = mouseWheel; + + var dside = Math.min(canvas.width, canvas.height) / 2; + baseCoordZoom = dside / radius; +} + + +function draw() { + + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.save(); + + var photo = document.getElementById("photo"); + + // Calculate a scale factor to make the image diagonal from center to corner be exactly 1.0 + var imgw = photo.width / 2; + var imgh = photo.height / 2; + var imgs = radius / Math.sqrt(imgw * imgw + imgh * imgh); + + baseAngle = Math.atan(imgh/imgw); + + if (autoscale) { + var angle1 = baseAngle + rotation; + var angle2 = baseAngle - rotation; + var maxY = Math.max(Math.abs(Math.sin(angle1)), Math.abs(Math.sin(angle2))); + var maxX = Math.max(Math.abs(Math.cos(angle1)), Math.abs(Math.cos(angle2))); + zoomfactor = Math.min((canvas.width/2)/maxX, (canvas.height/2)/maxY); + } + + ctx.translate(canvas.width / 2, canvas.height / 2); + ctx.scale(baseCoordZoom, -baseCoordZoom); + ctx.translate(trX, trY); + ctx.scale(zoomfactor, zoomfactor); + + ctx.save(); + ctx.rotate(rotation); + ctx.scale(imgs, -imgs); + ctx.drawImage(photo, -imgw, -imgh); + ctx.restore(); + + if (true) { + ctx.lineWidth = 0.01; + ctx.beginPath(); + ctx.moveTo(0, 0); + ctx.lineTo(0, 1); + ctx.moveTo(1, 0); + ctx.arc(0, 0, 1, 0, 2 * Math.PI, false); + ctx.stroke(); + } + ctx.restore(); +} + +// invoked by Canvas.onMouseMove. +function mouseMove(event) { + + locationx.innerHTML = screenToCoordX(event.clientX - canvas.offsetLeft).toFixed(3); + locationy.innerHTML = screenToCoordY(event.clientY - canvas.offsetTop).toFixed(3); + + // ctx.strokeRect(event.clientX, event.clientY, 20, 20); +} + + +function screenToCoordX(screenX) { + return (screenX - canvas.width/2) / (baseCoordZoom * zoomfactor); +} +function screenToCoordY(screenY) { + return (canvas.height/2 - screenY) / (baseCoordZoom * zoomfactor); +} + + + +function mouseWheel(event) { + // alert('delta: ' + event.wheelDelta); + zoomfactor *= (1 - event.wheelDelta/1000.0); + draw(); + mouseMove(event); +} + + +document.onkeydown = function(event) { + var keyCode; + var doDraw = false; + + if (event == null) { + keyCode = window.event.keyCode; + } else { + keyCode = event.keyCode; + } + switch (keyCode) { + // left + case 37: + rotation += rotationStep; + doDraw = true; + break; + // right + case 39: + rotation -= rotationStep; + doDraw = true; + break; + default: + break; + } + if (doDraw) { + draw(); + } +} +