Skip to content

Commit 401d68d

Browse files
committed
Moved Viewport from Map to MapControl and more #BREAKING
- Added INavigator and Navigator to MapControl - Added Map.Home Action<INavigator> to zoom to initial state - Changed to IMapRenderer interface to send more info to widgets.
1 parent 14a9a64 commit 401d68d

60 files changed

Lines changed: 554 additions & 453 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Mapsui.Rendering.Skia/MapRenderer.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,19 @@ public MapRenderer()
4242
WidgetRenders[typeof(ZoomInOutWidget)] = new ZoomInOutWidgetRenderer();
4343
}
4444

45-
public void Render(object target, IViewport viewport, IEnumerable<ILayer> layers,
45+
public void Render(object target, Map map, IViewport viewport, IEnumerable<ILayer> layers,
4646
IEnumerable<IWidget> widgets, Color background = null)
4747
{
4848
var allWidgets = layers.Select(l => l.Attribution).Where(w => w != null).ToList().Concat(widgets);
49-
Render((SKCanvas)target, viewport, layers, allWidgets, background);
49+
RenderTypeSave((SKCanvas)target, map, viewport, layers, allWidgets, background);
5050
}
5151

52-
private void Render(SKCanvas canvas, IViewport viewport, IEnumerable<ILayer> layers,
52+
private void RenderTypeSave(SKCanvas canvas, Map map, IViewport viewport, IEnumerable<ILayer> layers,
5353
IEnumerable<IWidget> widgets, Color background = null)
5454
{
5555
if (background != null) canvas.Clear(background.ToSkia(1));
5656
if (viewport.Initialized) Render(canvas, viewport, layers);
57-
Render(canvas, viewport, widgets, 1);
57+
Render(canvas, map, viewport, widgets, 1);
5858
}
5959

6060
public MemoryStream RenderToBitmapStream(IViewport viewport, IEnumerable<ILayer> layers, Color background = null)
@@ -146,9 +146,9 @@ private void RenderFeature(SKCanvas canvas, IViewport viewport, IStyle style, IF
146146
RasterRenderer.Draw(canvas, viewport, style, feature, layerOpacity * style.Opacity, _tileCache, _currentIteration);
147147
}
148148

149-
private void Render(object canvas, IViewport viewport, IEnumerable<IWidget> widgets, float layerOpacity)
149+
private void Render(object canvas, Map map, IReadOnlyViewport viewport, IEnumerable<IWidget> widgets, float layerOpacity)
150150
{
151-
WidgetRenderer.Render(canvas, viewport.Width, viewport.Height, widgets, WidgetRenders, layerOpacity);
151+
WidgetRenderer.Render(canvas, map, viewport, widgets, WidgetRenders, layerOpacity);
152152
}
153153
}
154154

Mapsui.Rendering.Skia/SkiaWidgets/HyperlinkWidgetRenderer.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Mapsui.Rendering.Skia.SkiaWidgets
66
{
77
public class HyperlinkWidgetRenderer : ISkiaWidgetRenderer
88
{
9-
public void Draw(SKCanvas canvas, double screenWidth, double screenHeight, IWidget widget,
9+
public void Draw(SKCanvas canvas, Map map, IReadOnlyViewport viewport, IWidget widget,
1010
float layerOpacity)
1111
{
1212
var hyperlink = (Hyperlink) widget;
@@ -22,8 +22,8 @@ public void Draw(SKCanvas canvas, double screenWidth, double screenHeight, IWidg
2222
var backRect = new SKRect(0, 0,
2323
textRect.Width + hyperlink.PaddingX * 2,
2424
textPaint.TextSize + hyperlink.PaddingY * 2); // Use the font's TextSize for consistency
25-
var offsetX = GetOffsetX(backRect.Width, hyperlink.MarginX, hyperlink.HorizontalAlignment, screenWidth);
26-
var offsetY = GetOffsetY(backRect.Height, hyperlink.MarginY, hyperlink.VerticalAlignment, screenHeight);
25+
var offsetX = GetOffsetX(backRect.Width, hyperlink.MarginX, hyperlink.HorizontalAlignment, viewport.Width);
26+
var offsetY = GetOffsetY(backRect.Height, hyperlink.MarginY, hyperlink.VerticalAlignment, viewport.Height);
2727
backRect.Offset(offsetX, offsetY);
2828
canvas.DrawRoundRect(backRect, hyperlink.CornerRadius, hyperlink.CornerRadius, backPaint);
2929
hyperlink.Envelope = backRect.ToMapsui();

Mapsui.Rendering.Skia/SkiaWidgets/ISkiaWidgetRenderer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace Mapsui.Rendering.Skia.SkiaWidgets
55
{
66
public interface ISkiaWidgetRenderer : IWidgetRenderer
77
{
8-
void Draw(SKCanvas canvas, double screenWidth, double screenHeight, IWidget widget,
8+
void Draw(SKCanvas canvas, Map map, IReadOnlyViewport viewport, IWidget widget,
99
float layerOpacity);
1010
}
1111
}

Mapsui.Rendering.Skia/SkiaWidgets/ScaleBarWidgetRenderer.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ public class ScaleBarWidgetRenderer : ISkiaWidgetRenderer
1414
private static SKPaint _paintScaleText;
1515
private static SKPaint _paintScaleTextStroke;
1616

17-
public void Draw(SKCanvas canvas, double screenWidth, double screenHeight, IWidget widget,
17+
public void Draw(SKCanvas canvas, Map map, IReadOnlyViewport viewport, IWidget widget,
1818
float layerOpacity)
1919
{
2020
var scaleBar = (ScaleBarWidget) widget;
21-
if (!scaleBar.CanTransform()) return;
21+
if (!scaleBar.CanTransform(map)) return;
2222

2323
// If this is the first time, we call this renderer, ...
2424
if (_paintScaleBar == null)
@@ -51,7 +51,7 @@ public void Draw(SKCanvas canvas, double screenWidth, double screenHeight, IWid
5151
float scaleBarLength2;
5252
string scaleBarText2;
5353

54-
(scaleBarLength1, scaleBarText1, scaleBarLength2, scaleBarText2) = scaleBar.GetScaleBarLengthAndText();
54+
(scaleBarLength1, scaleBarText1, scaleBarLength2, scaleBarText2) = scaleBar.GetScaleBarLengthAndText(map, viewport);
5555

5656
// Calc height of scale bar
5757
SKRect textSize = SKRect.Empty;
@@ -75,7 +75,7 @@ public void Draw(SKCanvas canvas, double screenWidth, double screenHeight, IWid
7575
// Draw lines
7676

7777
// Get lines for scale bar
78-
var points = scaleBar.GetScaleBarLinePositions(scaleBarLength1, scaleBarLength2, StrokeExternal);
78+
var points = scaleBar.GetScaleBarLinePositions(map, viewport, scaleBarLength1, scaleBarLength2, StrokeExternal);
7979

8080
// BoundingBox for scale bar
8181
BoundingBox envelop = new BoundingBox();
@@ -116,7 +116,7 @@ public void Draw(SKCanvas canvas, double screenWidth, double screenHeight, IWid
116116
_paintScaleTextStroke.MeasureText(scaleBarText1, ref textSize1);
117117
_paintScaleTextStroke.MeasureText(scaleBarText2, ref textSize2);
118118

119-
var (posX1, posY1, posX2, posY2) = scaleBar.GetScaleBarTextPositions(textSize.ToMapsui(), textSize1.ToMapsui(), textSize2.ToMapsui(), StrokeExternal);
119+
var (posX1, posY1, posX2, posY2) = scaleBar.GetScaleBarTextPositions(viewport, textSize.ToMapsui(), textSize1.ToMapsui(), textSize2.ToMapsui(), StrokeExternal);
120120

121121
// Now draw text
122122
canvas.DrawText(scaleBarText1, posX1, posY1 - textSize1.Top, _paintScaleTextStroke);

Mapsui.Rendering.Skia/SkiaWidgets/WidgetRenderer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ namespace Mapsui.Rendering.Skia.SkiaWidgets
77
{
88
public static class WidgetRenderer
99
{
10-
public static void Render(object target, double screenWidth, double screenHeight, IEnumerable<IWidget> widgets,
10+
public static void Render(object target, Map map, IReadOnlyViewport viewport, IEnumerable<IWidget> widgets,
1111
IDictionary<Type, IWidgetRenderer> renders, float layerOpacity)
1212
{
1313
var canvas = (SKCanvas) target;
1414

1515
foreach (var widget in widgets)
1616
{
17-
((ISkiaWidgetRenderer)renders[widget.GetType()]).Draw(canvas, screenWidth, screenHeight, widget, layerOpacity);
17+
((ISkiaWidgetRenderer)renders[widget.GetType()]).Draw(canvas, map, viewport, widget, layerOpacity);
1818
}
1919
}
2020
}

Mapsui.Rendering.Skia/SkiaWidgets/ZoomInOutWidgetRenderer.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,10 @@ public class ZoomInOutWidgetRenderer : ISkiaWidgetRenderer
1313
private static SKPaint _paintBackground;
1414
private static SKPaint _paintText;
1515

16-
public void Draw(SKCanvas canvas, double screenWidth, double screenHeight, IWidget widget,
16+
public void Draw(SKCanvas canvas, Map map, IReadOnlyViewport viewport, IWidget widget,
1717
float layerOpacity)
1818
{
1919
var zoomInOut = (ZoomInOutWidget)widget;
20-
// If this widget belongs to no viewport, than stop drawing
21-
if (zoomInOut.Map == null)
22-
return;
2320

2421
// If this is the first time, we call this renderer, ...
2522
if (_paintStroke == null)
@@ -37,8 +34,8 @@ public void Draw(SKCanvas canvas, double screenWidth, double screenHeight, IWidg
3734
_paintText.Color = zoomInOut.TextColor.ToSkia(zoomInOut.Opacity);
3835
}
3936

40-
var posX = zoomInOut.CalculatePositionX(0, (float)screenWidth, zoomInOut.Orientation == Orientation.Vertical ? zoomInOut.Size : zoomInOut.Size * 2 - Stroke);
41-
var posY = zoomInOut.CalculatePositionY(0, (float)screenHeight, zoomInOut.Orientation == Orientation.Vertical ? zoomInOut.Size * 2 - Stroke : zoomInOut.Size);
37+
var posX = zoomInOut.CalculatePositionX(0, (float)viewport.Width, zoomInOut.Orientation == Orientation.Vertical ? zoomInOut.Size : zoomInOut.Size * 2 - Stroke);
38+
var posY = zoomInOut.CalculatePositionY(0, (float)viewport.Height, zoomInOut.Orientation == Orientation.Vertical ? zoomInOut.Size * 2 - Stroke : zoomInOut.Size);
4239

4340
// Draw a rect for zoom in button
4441
SKRect rect;

Mapsui.Rendering.Xaml/MapRenderer.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,29 +40,29 @@ public MapRenderer()
4040
WidgetRenders[typeof(ZoomInOutWidget)] = new ZoomInOutWidgetRenderer();
4141
}
4242

43-
public void Render(object target, IViewport viewport, IEnumerable<ILayer> layers,
43+
public void Render(object target, Map map, IViewport viewport, IEnumerable<ILayer> layers,
4444
IEnumerable<IWidget> widgets, Color background = null)
4545
{
4646
var allWidgets = layers.Select(l => l.Attribution).ToList().Where(w => w != null).Concat(widgets).ToList();
4747

48-
Render((Canvas) target, viewport, layers, allWidgets, background);
48+
RenderTypeSave((Canvas) target, map, viewport, layers, allWidgets, background);
4949
}
50-
private void Render(Canvas canvas, IViewport viewport, IEnumerable<ILayer> layers,
50+
private void RenderTypeSave(Canvas canvas, Map map, IViewport viewport, IEnumerable<ILayer> layers,
5151
IEnumerable<IWidget> widgets, Color background = null)
5252
{
5353
Clear(canvas, background);
5454
if (viewport.Initialized) Render(canvas, viewport, layers);
55-
Render(canvas, widgets);
55+
Render(canvas, map, viewport, widgets);
5656
}
5757

5858
private void Render(Canvas target, IViewport viewport, IEnumerable<ILayer> layers)
5959
{
6060
Render(target, viewport, layers, _symbolCache, false);
6161
}
6262

63-
private void Render(object target, IEnumerable<IWidget> widgets)
63+
private void Render(object target, Map map, IReadOnlyViewport viewport, IEnumerable<IWidget> widgets)
6464
{
65-
WidgetRenderer.Render(target, widgets, WidgetRenders);
65+
WidgetRenderer.Render(target, map, viewport, widgets, WidgetRenders);
6666
}
6767

6868
private static void Render(Canvas canvas, IViewport viewport, IEnumerable<ILayer> layers,

Mapsui.Rendering.Xaml/XamlWidgets/HyperlinkWidgetRenderer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace Mapsui.Rendering.Xaml.XamlWidgets
88
{
99
public class HyperlinkWidgetRenderer : IXamlWidgetRenderer
1010
{
11-
public void Draw(Canvas canvas, IWidget widget)
11+
public void Draw(Canvas canvas, Map map, IReadOnlyViewport viewport, IWidget widget)
1212
{
1313
var hyperlink = (Hyperlink) widget;
1414
if (string.IsNullOrEmpty(hyperlink.Text)) return;

Mapsui.Rendering.Xaml/XamlWidgets/IXamlWidgetRenderer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ namespace Mapsui.Rendering.Xaml.XamlWidgets
55
{
66
interface IXamlWidgetRenderer : IWidgetRenderer
77
{
8-
void Draw(Canvas canvas, IWidget widget);
8+
void Draw(Canvas canvas, Map map, IReadOnlyViewport viewport, IWidget widget);
99
}
1010
}

Mapsui.Rendering.Xaml/XamlWidgets/ScaleBarWidgetRenderer.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ public class ScaleBarWidgetRenderer : IXamlWidgetRenderer
1818
private static Brush _brushScaleText;
1919
private static Brush _brushScaleTextStroke;
2020

21-
public void Draw(Canvas canvas, IWidget widget)
21+
public void Draw(Canvas canvas, Map map, IReadOnlyViewport viewport, IWidget widget)
2222
{
2323
var scaleBar = (ScaleBarWidget) widget;
2424

25-
if (!scaleBar.CanTransform()) return;
25+
if (!scaleBar.CanTransform(map)) return;
2626

2727
_brushScaleBar = new SolidColorBrush(scaleBar.TextColor.ToXaml());
2828
_brushScaleBarStroke = new SolidColorBrush(scaleBar.Halo.ToXaml());
@@ -44,7 +44,7 @@ public void Draw(Canvas canvas, IWidget widget)
4444
float scaleBarLength2;
4545
string scaleBarText2;
4646

47-
(scaleBarLength1, scaleBarText1, scaleBarLength2, scaleBarText2) = scaleBar.GetScaleBarLengthAndText();
47+
(scaleBarLength1, scaleBarText1, scaleBarLength2, scaleBarText2) = scaleBar.GetScaleBarLengthAndText(map, viewport);
4848

4949
// Calc height of scale bar
5050
Size textSize;
@@ -68,7 +68,7 @@ public void Draw(Canvas canvas, IWidget widget)
6868
// Draw lines
6969

7070
// Get lines for scale bar
71-
var points = scaleBar.GetScaleBarLinePositions(scaleBarLength1, scaleBarLength2, StrokeExternal);
71+
var points = scaleBar.GetScaleBarLinePositions(map, viewport, scaleBarLength1, scaleBarLength2, StrokeExternal);
7272

7373
// BoundingBox for scale bar
7474
BoundingBox envelop = new BoundingBox();
@@ -134,7 +134,7 @@ public void Draw(Canvas canvas, IWidget widget)
134134
var boundingBoxText1 = new BoundingBox(0, 0, textSize1.Width, textSize1.Height);
135135
var boundingBoxText2 = new BoundingBox(0, 0, textSize2.Width, textSize2.Height);
136136

137-
var (posX1, posY1, posX2, posY2) = scaleBar.GetScaleBarTextPositions(boundingBoxText, boundingBoxText1, boundingBoxText2, StrokeExternal);
137+
var (posX1, posY1, posX2, posY2) = scaleBar.GetScaleBarTextPositions(viewport, boundingBoxText, boundingBoxText1, boundingBoxText2, StrokeExternal);
138138

139139
// Now draw text
140140
textBlock.Text = scaleBarText1;

0 commit comments

Comments
 (0)