Skip to content

Commit

Permalink
Minor fixes in Android
Browse files Browse the repository at this point in the history
  • Loading branch information
sthewissen committed Mar 19, 2024
1 parent a739211 commit 1ed7bd5
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 78 deletions.
2 changes: 1 addition & 1 deletion src/Plugin.Maui.DebugRainbows/Models/GridLineOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ public class GridLineOptions
{
public Color Color { get; init; } = Color.FromRgb(255, 0, 0);
public double Opacity { get; init; }
public double Width { get; init; }
public double Width { get; set; }
}
172 changes: 95 additions & 77 deletions src/Plugin.Maui.DebugRainbows/Platforms/Android/MauiDebugGrid.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Android.Content;
using Android.Graphics;
using Android.Util;
using AndroidX.Core.View;
using Plugin.Maui.DebugRainbows.Controls;
using Microsoft.Maui.Platform;
using AView = Android.Views.View;
Expand All @@ -12,9 +13,8 @@ namespace Plugin.Maui.DebugRainbows.Platforms.Android;

public class MauiDebugGrid : AView
{
readonly DebugGrid _debugGrid;
int screenWidth;
int screenHeight;
private int _screenWidth;
private int _screenHeight;

public float HorizontalItemSize { get; set; }
public float VerticalItemSize { get; set; }
Expand All @@ -25,21 +25,19 @@ public class MauiDebugGrid : AView

public MauiDebugGrid(Context? context, DebugGrid debugGrid) : base(context)
{
_debugGrid = debugGrid;

HorizontalItemSize = (float)_debugGrid.HorizontalItemSize;
VerticalItemSize = (float)_debugGrid.VerticalItemSize;
MajorGridLines = _debugGrid.MajorGridLines;
MinorGridLines = _debugGrid.MinorGridLines;
GridOrigin = _debugGrid.GridOrigin;
MajorGridLineInterval = _debugGrid.MajorGridLineInterval;
HorizontalItemSize = (float)debugGrid.HorizontalItemSize;
VerticalItemSize = (float)debugGrid.VerticalItemSize;
MajorGridLines = debugGrid.MajorGridLines;
MinorGridLines = debugGrid.MinorGridLines;
GridOrigin = debugGrid.GridOrigin;
MajorGridLineInterval = debugGrid.MajorGridLineInterval;

Init();
}

public static float ConvertDpToPixel(float dp, Context context)
{
return dp * ((float)context.Resources.DisplayMetrics.DensityDpi / (int)DisplayMetricsDensity.Default);
return dp * ((float)context.Resources?.DisplayMetrics?.DensityDpi / (int)DisplayMetricsDensity.Default);
}

public void Init()
Expand All @@ -49,10 +47,20 @@ public void Init()

private void GetScreenDimensions()
{
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity)Context).WindowManager.DefaultDisplay.GetMetrics(displayMetrics);
screenWidth = displayMetrics.WidthPixels;
screenHeight = displayMetrics.HeightPixels;
if (OperatingSystem.IsAndroidVersionAtLeast(30))
{
var windowMetrics = (Context as Activity)?.WindowManager?.CurrentWindowMetrics;
var insets = windowMetrics.WindowInsets.GetInsetsIgnoringVisibility(WindowInsetsCompat.Type.SystemBars());
_screenWidth = windowMetrics.Bounds.Width() - insets.Left - insets.Right;
_screenHeight = windowMetrics.Bounds.Height() - insets.Top - insets.Bottom;
}
else if (OperatingSystem.IsAndroidVersionAtLeast(21))
{
var displayMetrics = new DisplayMetrics();
(Context as Activity)?.WindowManager?.DefaultDisplay?.GetMetrics(displayMetrics);
_screenWidth = displayMetrics.WidthPixels;
_screenHeight = displayMetrics.HeightPixels;
}
}

protected override void OnLayout(bool changed, int left, int top, int right, int bottom)
Expand Down Expand Up @@ -117,72 +125,82 @@ private void DrawNormal(Canvas canvas, Paint majorPaint, Paint minorPaint)
minorPaint.Color = MinorGridLines.Color.ToPlatform();
minorPaint.Alpha = (int)(255 * MinorGridLines.Opacity);

if (GridOrigin == DebugGridOrigin.TopLeft)
{
float verticalPosition = 0;
int i = 0;
while (verticalPosition <= screenHeight)
{
canvas.DrawLine(0, verticalPosition, screenWidth, verticalPosition, MajorGridLineInterval > 0 && i % MajorGridLineInterval == 0 ? majorPaint : minorPaint);
verticalPosition += VerticalItemSize;
i++;
}

float horizontalPosition = 0;
i = 0;
while (horizontalPosition <= screenWidth)
{
canvas.DrawLine(horizontalPosition, 0, horizontalPosition, screenHeight, MajorGridLineInterval > 0 && i % MajorGridLineInterval == 0 ? majorPaint : minorPaint);
horizontalPosition += HorizontalItemSize;
i++;
}
}
else if (GridOrigin == DebugGridOrigin.Center)
switch (GridOrigin)
{
var gridLinesHorizontalCenter = screenWidth / 2;
var gridLinesVerticalCenter = screenHeight / 2;
var amountOfVerticalLines = screenWidth / HorizontalItemSize;
var amountOfHorizontalLines = screenHeight / VerticalItemSize;

// Draw the horizontal lines.
for (int i = 0; i < (amountOfHorizontalLines / 2); i++)
case DebugGridOrigin.TopLeft:
{
canvas.DrawLine(
startX: 0,
startY: gridLinesVerticalCenter + (i * VerticalItemSize),
stopX: screenWidth,
stopY: gridLinesVerticalCenter + (i * VerticalItemSize),
paint: MajorGridLineInterval > 0 && i % MajorGridLineInterval == 0 ? majorPaint : minorPaint
);

canvas.DrawLine(
startX: 0,
startY: gridLinesVerticalCenter - (i * VerticalItemSize),
stopX: screenWidth,
stopY: gridLinesVerticalCenter - (i * VerticalItemSize),
paint: MajorGridLineInterval > 0 && i % MajorGridLineInterval == 0 ? majorPaint : minorPaint
);
var verticalPosition = 0f;
var i = 0;

while (verticalPosition <= _screenHeight)
{
canvas.DrawLine(0, verticalPosition, _screenWidth, verticalPosition, MajorGridLineInterval > 0 && i % MajorGridLineInterval == 0 ? majorPaint : minorPaint);
verticalPosition += VerticalItemSize;
i++;
}

float horizontalPosition = 0;
i = 0;
while (horizontalPosition <= _screenWidth)
{
canvas.DrawLine(horizontalPosition, 0, horizontalPosition, _screenHeight, MajorGridLineInterval > 0 && i % MajorGridLineInterval == 0 ? majorPaint : minorPaint);
horizontalPosition += HorizontalItemSize;
i++;
}

break;
}

// Draw vertical lines.
for (int i = 0; i < (amountOfVerticalLines / 2); i++)
case DebugGridOrigin.Center:
{
canvas.DrawLine(
startX: gridLinesHorizontalCenter + (i * HorizontalItemSize),
startY: 0,
stopX: gridLinesHorizontalCenter + (i * HorizontalItemSize),
stopY: screenHeight,
paint: MajorGridLineInterval > 0 && i % MajorGridLineInterval == 0 ? majorPaint : minorPaint
);

canvas.DrawLine(
startX: gridLinesHorizontalCenter - (i * HorizontalItemSize),
startY: 0,
stopX: gridLinesHorizontalCenter - (i * HorizontalItemSize),
stopY: screenHeight,
paint: MajorGridLineInterval > 0 && i % MajorGridLineInterval == 0 ? majorPaint : minorPaint
);
var gridLinesHorizontalCenter = _screenWidth / 2;
var gridLinesVerticalCenter = _screenHeight / 2;
var amountOfVerticalLines = _screenWidth / HorizontalItemSize;
var amountOfHorizontalLines = _screenHeight / VerticalItemSize;

// Draw the horizontal lines.
for (var i = 0; i < (amountOfHorizontalLines / 2); i++)
{
canvas.DrawLine(
startX: 0,
startY: gridLinesVerticalCenter + (i * VerticalItemSize),
stopX: _screenWidth,
stopY: gridLinesVerticalCenter + (i * VerticalItemSize),
paint: MajorGridLineInterval > 0 && i % MajorGridLineInterval == 0 ? majorPaint : minorPaint
);

canvas.DrawLine(
startX: 0,
startY: gridLinesVerticalCenter - (i * VerticalItemSize),
stopX: _screenWidth,
stopY: gridLinesVerticalCenter - (i * VerticalItemSize),
paint: MajorGridLineInterval > 0 && i % MajorGridLineInterval == 0 ? majorPaint : minorPaint
);
}

// Draw vertical lines.
for (var i = 0; i < (amountOfVerticalLines / 2); i++)
{
canvas.DrawLine(
startX: gridLinesHorizontalCenter + (i * HorizontalItemSize),
startY: 0,
stopX: gridLinesHorizontalCenter + (i * HorizontalItemSize),
stopY: _screenHeight,
paint: MajorGridLineInterval > 0 && i % MajorGridLineInterval == 0 ? majorPaint : minorPaint
);

canvas.DrawLine(
startX: gridLinesHorizontalCenter - (i * HorizontalItemSize),
startY: 0,
stopX: gridLinesHorizontalCenter - (i * HorizontalItemSize),
stopY: _screenHeight,
paint: MajorGridLineInterval > 0 && i % MajorGridLineInterval == 0 ? majorPaint : minorPaint
);
}

break;
}
default:
throw new ArgumentOutOfRangeException();
}
}

Expand Down

0 comments on commit 1ed7bd5

Please sign in to comment.