You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by jo...@apache.org on 2020/05/26 15:12:25 UTC
[isis] 02/02: ISIS-2342 scale image with buttons 3/3
This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 9e53cfade07a8b3d70bbb5cae03ca9921ff8eba4
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Tue May 26 17:11:56 2020 +0200
ISIS-2342 scale image with buttons 3/3
---
.../kroviz/core/aggregator/BaseAggregator.kt | 5 --
.../isis/client/kroviz/core/model/ObjectDM.kt | 10 +++-
.../apache/isis/client/kroviz/ui/kv/RoDialog.kt | 6 +--
.../client/kroviz/utils/ScalableVectorGraphic.kt | 58 ++++++++--------------
.../ScalableVectorGraphicTest.kt | 28 ++++++++---
5 files changed, 54 insertions(+), 53 deletions(-)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
index 6d6a4d7..9be799b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
@@ -38,11 +38,6 @@ abstract class BaseAggregator {
throw Throwable("[BaseAggregator.log] no handler found: ${this::class.simpleName}")
}
- @Deprecated("use extension function")
- fun invokeWith(link: Link) {
- RoXmlHttpRequest().invoke(link, this)
- }
-
fun TObject.getLayoutLink(): Link? {
return links.firstOrNull { l ->
l.isLayout()
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt
index 88fbef3..29da7fe 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt
@@ -1,7 +1,9 @@
package org.apache.isis.client.kroviz.core.model
+import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator
import org.apache.isis.client.kroviz.core.event.EventStore
import org.apache.isis.client.kroviz.core.event.ResourceSpecification
+import org.apache.isis.client.kroviz.core.event.RoXmlHttpRequest
import org.apache.isis.client.kroviz.to.Link
import org.apache.isis.client.kroviz.to.Method
import org.apache.isis.client.kroviz.to.TObject
@@ -48,10 +50,10 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
val putLink = Link(method = Method.PUT.operation, href = href)
val logEntry = EventStore.find(reSpec)
val aggregator = logEntry?.getAggregator()!!
- aggregator.invokeWith(putLink)
+ putLink.invokeWith(aggregator)
// now data should be reloaded - wait for invoking PUT?
- aggregator.invokeWith(getLink)
+ getLink.invokeWith(aggregator)
//refresh of display to be triggered?
}
}
@@ -62,4 +64,8 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
}
}
+ fun Link.invokeWith(aggregator: BaseAggregator) {
+ RoXmlHttpRequest().invoke(this, aggregator)
+ }
+
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoDialog.kt
index d410d3b..42206fc 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoDialog.kt
@@ -42,7 +42,7 @@ class RoDialog(
private val scaleUpButton = Button(
"",
- "fas fa-plus",
+ "fas fa-minus", // TODO fix brain twister
ButtonStyle.OUTLINEINFO)
.onClick {
(command as ImageDialog).scale(Direction.UP)
@@ -50,7 +50,7 @@ class RoDialog(
private val scaleDownButton = Button(
"",
- "fas fa-minus",
+ "fas fa-plus", // TODO fix brain twister
ButtonStyle.OUTLINEINFO)
.onClick {
(command as ImageDialog).scale(Direction.DOWN)
@@ -110,7 +110,7 @@ class RoDialog(
}
private fun hasScalableContent(): Boolean {
- val scalable = items.firstOrNull() { it.type == ValueType.IMAGE.type }
+ val scalable = items.firstOrNull { it.type == ValueType.IMAGE.type }
return scalable != null
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/ScalableVectorGraphic.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/ScalableVectorGraphic.kt
index 61f1edc..af1b059 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/ScalableVectorGraphic.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/ScalableVectorGraphic.kt
@@ -1,10 +1,7 @@
package org.apache.isis.client.kroviz.utils
import org.w3c.dom.Document
-import org.w3c.dom.Element
import org.w3c.dom.parsing.DOMParser
-import org.w3c.dom.parsing.XMLSerializer
-import org.w3c.dom.svg.SVGSVGElement
enum class Direction(val id: String) {
UP("UP"),
@@ -13,56 +10,43 @@ enum class Direction(val id: String) {
class ScalableVectorGraphic(val data: String) {
- val parser = DOMParser()
- val mimeType = "image/svg+xml"
+ private val parser = DOMParser()
+ private val mimeType = "image/svg+xml"
+ private val tag = "viewBox"
var document: Document
+ var viewBox: ViewBox
init {
document = parser.parseFromString(data, mimeType)
- }
-
- fun asDocumentElement(): Element? {
- val xs = XMLSerializer()
- val str = xs.serializeToString(document)
- val svg = parser.parseFromString(str, mimeType)
- return svg.documentElement
- }
- private fun root(): SVGSVGElement {
- return document.rootElement!!
+ val root = document.rootElement!!
+ val raw = root.getAttribute(tag) as String
+ val arr = raw.split(" ")
+ viewBox = ViewBox(arr[0].toInt(), arr[1].toInt(), arr[2].toInt(), arr[3].toInt())
}
- fun setHeight(height: Int) {
- root().setAttribute("height", height.toString() + "px")
- }
-
- fun getHeight(): Int {
- val raw = root().getAttribute("height") as String
- val value = raw.replace("px", "")
- return value.toInt()
- }
-
- fun setWidth(width: Int) {
- root().setAttribute("width", width.toString() + "px")
- }
-
- fun getWidth(): Int {
- val raw = root().getAttribute("width") as String
- val value = raw.replace("px", "")
- return value.toInt()
+ private fun setCorner(width: Int, height: Int) {
+ viewBox.width = width
+ viewBox.height = height
+ document.rootElement?.setAttribute(tag, viewBox.asArgs())
}
fun scaleUp(factor: Double = 0.1) {
var f = factor
if (factor < 1) f = 1 + factor
- val oldHeight = getHeight()
- val oldWidth = getWidth()
- setHeight((oldHeight * f).toInt())
- setWidth((oldWidth * f).toInt())
+ val newWidth = (viewBox.width * f).toInt()
+ val newHeight = (viewBox.height * f).toInt()
+ setCorner(newWidth, newHeight)
}
fun scaleDown(factor: Double = 0.1) {
scaleUp(factor * -1)
}
+ class ViewBox(val x: Int, val y: Int, var width: Int, var height: Int) {
+ fun asArgs(): String {
+ return "$x $y $width $height"
+ }
+ }
+
}
diff --git a/incubator/clients/kroviz/src/test/kotlin/org.apache.isis.client.kroviz.util/ScalableVectorGraphicTest.kt b/incubator/clients/kroviz/src/test/kotlin/org.apache.isis.client.kroviz.util/ScalableVectorGraphicTest.kt
index fb1533c..b460ff9 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org.apache.isis.client.kroviz.util/ScalableVectorGraphicTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org.apache.isis.client.kroviz.util/ScalableVectorGraphicTest.kt
@@ -9,6 +9,22 @@ import kotlin.test.assertEquals
class ScalableVectorGraphicTest {
@Test
+ fun testViewBox() {
+ //given
+ val response = PUML_SVG.str
+ val type = "image/svg+xml"
+ val p = DOMParser()
+ //when
+ val svg = ScalableVectorGraphic(response)
+ val viewBox = svg.viewBox
+ // then
+ assertEquals(0, viewBox.x)
+ assertEquals(0, viewBox.y)
+ assertEquals(309, viewBox.width)
+ assertEquals(203, viewBox.height)
+ }
+
+ @Test
fun testScaleDown() {
//given
val response = PUML_SVG.str
@@ -19,8 +35,8 @@ class ScalableVectorGraphicTest {
svg.scaleDown()
// then
- assertEquals((203 * 0.9).toInt(), svg.getHeight())
- assertEquals((309 * 0.9).toInt(), svg.getWidth())
+ assertEquals((203 * 0.9).toInt(), svg.viewBox.height)
+ assertEquals((309 * 0.9).toInt(), svg.viewBox.width)
}
@Test
@@ -34,8 +50,8 @@ class ScalableVectorGraphicTest {
svg.scaleUp()
// then
- assertEquals((203 * 1.1).toInt(), svg.getHeight())
- assertEquals((309 * 1.1).toInt(), svg.getWidth())
+ assertEquals((203 * 1.1).toInt(), svg.viewBox.height)
+ assertEquals((309 * 1.1).toInt(), svg.viewBox.width)
}
@Test
@@ -49,8 +65,8 @@ class ScalableVectorGraphicTest {
svg.scaleUp(2.0)
//then
- assertEquals(406, svg.getHeight())
- assertEquals(618, svg.getWidth())
+ assertEquals(406, svg.viewBox.height)
+ assertEquals(618, svg.viewBox.width)
}
}