You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2019/11/12 14:24:30 UTC
[sis] 02/02: Fix an IndexOutOfBoundsException when showing an empty
list of features. Avoid drawing a line on image border when rectangle cross
anti-meridian.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 5f84c5bf4c1c69ae3c6d47c0b0728c26ff10d7a6
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Tue Nov 12 11:41:46 2019 +0100
Fix an IndexOutOfBoundsException when showing an empty list of features.
Avoid drawing a line on image border when rectangle cross anti-meridian.
---
.../java/org/apache/sis/gui/dataset/ExpandableList.java | 2 +-
.../org/apache/sis/gui/metadata/IdentificationInfo.java | 17 ++++++++++++-----
2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java
index 3d07ca8..1ecabce 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java
@@ -236,7 +236,7 @@ final class ExpandableList extends TransformationList<Feature,Feature>
@Override
public int size() {
int size = getSource().size();
- if (expansion != null) {
+ if (size != 0 && expansion != null) {
size += expansion.length - 1;
}
return size;
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/IdentificationInfo.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/IdentificationInfo.java
index e70019c..eecfca6 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/IdentificationInfo.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/IdentificationInfo.java
@@ -307,6 +307,7 @@ final class IdentificationInfo extends Section<Identification> {
}
final double wi = Math.min(w, MAP_WIDTH - x); // Width of part inside [-180 … +180]°.
w -= wi; // Width of part not drawn by `wi`.
+ final boolean crossAntimeridian = (w > 0);
/*
* At this point we got the coordinates of the rectangle to draw, adjusted for making sure
* that they are inside valid ranges. The `w` variable is usually 0, unless we had to cut
@@ -325,13 +326,19 @@ final class IdentificationInfo extends Section<Identification> {
gc.setStroke(Color.DARKBLUE);
gc.setGlobalAlpha(0.1);
gc.fillRect(x, y, wi, h);
- if (w > 0) {
- gc.fillRect(0, y, w, h);
+ if (crossAntimeridian) {
+ gc.fillRect(0, y, w, h); // Second half of rectangle crossing anti-meridian.
}
gc.setGlobalAlpha(1.0);
- gc.strokeRect(x, y, wi, h);
- if (w > 0) {
- gc.strokeRect(0, y, w, h);
+ if (!crossAntimeridian) {
+ gc.strokeRect(x, y, wi, h);
+ } else {
+ double xw = x + wi;
+ double yh = y + h;
+ gc.strokePolyline(new double[] {xw, x, x, xw},
+ new double[] {y, y, yh, yh}, 4);
+ gc.strokePolyline(new double[] {0, w, w, 0},
+ new double[] {y, y, yh, yh}, 4);
}
}
return false;