multi-line SmallTransparentTextOverlay that scales font size with map size

This commit is contained in:
Axel Uhl committed 2015-07-16 12:52:08 +02:00
1 parent 42b1d6aaef
commit c327260fec
2 files changed
+30 -8

No files matched your search

@@ -71,7 +71,7 @@
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-superDevMode -incremental -workDir &quot;${project_loc:com.sap.sailing.gwt.ui}/.tmp/gwt-work&quot; -war &quot;${project_loc:com.sap.sailing.gwt.ui}&quot; -noserver -remoteUI &quot;${gwt_remote_ui_server_port}:${unique_id}&quot; -logLevel INFO -codeServerPort 9997 -startupUrl /gwt/Home.html com.sap.sailing.gwt.home.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.regattaoverview.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup com.sap.sailing.gwt.home.Desktop com.sap.sailing.gwt.home.Home com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.ui.PolarSheets com.sap.sailing.gwt.regattaoverview.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.ui.RaceBoard"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-superDevMode -incremental -workDir &quot;${project_loc:com.sap.sailing.gwt.ui}/.tmp/gwt-work&quot; -war &quot;${project_loc:com.sap.sailing.gwt.ui}&quot; -noserver -remoteUI &quot;${gwt_remote_ui_server_port}:${unique_id}&quot; -logLevel INFO -codeServerPort 9997 -startupUrl /gwt/Home.html com.sap.sailing.gwt.home.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.regattaoverview.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup com.sap.sailing.gwt.home.Desktop com.sap.sailing.gwt.home.Home com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.ui.PolarSheets com.sap.sailing.gwt.regattaoverview.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.ui.RaceBoard com.sap.sailing.gwt.ui.EmbeddedMapAndWindChart"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms1024m -Xmx3072m"/>
</launchConfiguration>
@@ -52,19 +52,35 @@ public class SmallTransparentInfoOverlay extends CanvasOverlayV3 {
@Override
protected void draw() {
final int LINE_SPACING = 3;
final int BOTTOM_MARGIN = 8;
final int LEFT_MARGIN = 8;
final int RIGHT_MARGIN = 9;
final int POLE_LENGTH = 25;
if (mapProjection != null && position != null) {
LatLng latLngPosition = coordinateSystem.toLatLng(position);
Context2d context2d = getCanvas().getContext2d();
CssColor grayTransparentColor = CssColor.make("rgba(255,255,255,0.75)");
context2d.setFont("12px bold Verdana sans-serif");
TextMetrics measureText = context2d.measureText(infoText);
double textWidth = measureText.getWidth();
canvasWidth = (int) textWidth + 17;
final int fontSizeInPx = 12+2*Math.max(0, map.getZoom()-15);
final int LINE_HEIGHT = fontSizeInPx+LINE_SPACING;
context2d.setFont(""+fontSizeInPx+"px Roboto, Arial, sans-serif");
// context2d.setFont(""+fontSizeInPx+"px bold Verdana sans-serif");
double textWidth = 0;
infoBoxHeight = BOTTOM_MARGIN;
for (final String line : infoText.split("\n")) {
TextMetrics measureText = context2d.measureText(line);
if (measureText.getWidth() > textWidth) {
textWidth = measureText.getWidth();
}
infoBoxHeight += LINE_HEIGHT;
}
canvasWidth = (int) textWidth + LEFT_MARGIN + RIGHT_MARGIN;
infoBoxWidth = canvasWidth;
canvasHeight = infoBoxHeight + POLE_LENGTH;
getCanvas().setWidth(String.valueOf(canvasWidth));
getCanvas().setCoordinateSpaceWidth(canvasWidth);
getCanvas().setHeight(String.valueOf(canvasHeight));
getCanvas().setCoordinateSpaceHeight(canvasHeight);
// Change origin and dimensions to match true size (a stroke makes the shape a bit larger)
context2d.setFillStyle(grayTransparentColor);
@@ -83,7 +99,13 @@ public class SmallTransparentInfoOverlay extends CanvasOverlayV3 {
context2d.beginPath();
context2d.setFillStyle("black");
context2d.fillText(infoText, 8, 14);
// context2d.setFont(""+fontSizeInPx+"px bold Verdana sans-serif");
context2d.setFont(""+fontSizeInPx+"px Roboto, Arial, sans-serif");
int y = LINE_HEIGHT;
for (final String line : infoText.split("\n")) {
context2d.fillText(line, LEFT_MARGIN, y);
y += LINE_HEIGHT;
}
context2d.stroke();
Point objectPositionInPx = mapProjection.fromLatLngToDivPixel(latLngPosition);