Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
using MauiPdfGenerator.Common.Models;
using MauiPdfGenerator.Common.Models.Layouts;

namespace MauiPdfGenerator.Fluent.Models;
namespace MauiPdfGenerator.Common.Models.Layouts;

public class PdfLayoutDefaultOptions
{
Expand All @@ -18,11 +15,6 @@ public record struct DefaultOptions(
VerticalOptions: LayoutAlignment.Start
);

private static readonly DefaultOptions GridCellDefaults = new(
HorizontalOptions: LayoutAlignment.Start,
VerticalOptions: LayoutAlignment.Start
);

private static readonly DefaultOptions VerticalStackLayoutDefaults = new(
HorizontalOptions: LayoutAlignment.Fill,
VerticalOptions: LayoutAlignment.Start
Expand Down
6 changes: 0 additions & 6 deletions MauiPdfGenerator/Common/PdfGeneratorConstants.cs

This file was deleted.

9 changes: 0 additions & 9 deletions MauiPdfGenerator/Core/Implementation/Sk/Models/SpanRun.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,3 @@ internal record SpanRun(
TextDecorations? Decorations,
TextTransform? Transform
);

internal record LineRunInfo(
string Line,
int LineStartIndex,
List<SpanRun> IntersectingRuns
)
{
public bool HasMultipleRuns => IntersectingRuns.Count > 1;
}

This file was deleted.

6 changes: 2 additions & 4 deletions MauiPdfGenerator/Core/Implementation/Sk/Utils/SkiaUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,7 @@ internal static class SkiaUtils
typefaceFromExplicitFile?.Dispose();
return finalTypeface;
}
internal static string? GetMauiFontFilePath(string fontAlias)
{
return null;
}

public static SKColor ConvertToSkColor(Color? mauiColor)
{
if (mauiColor is null) return SKColors.Black;
Expand All @@ -127,6 +124,7 @@ public static SKColor ConvertToSkColor(Color? mauiColor)
float a = Math.Clamp(mauiColor.Alpha, 0f, 1f);
return new SKColor((byte)(r * 255), (byte)(g * 255), (byte)(b * 255), (byte)(a * 255));
}

public static SKSize GetSkPageSize(PageSizeType size, PageOrientationType orientation)
{
float width, height;
Expand Down
126 changes: 0 additions & 126 deletions MauiPdfGenerator/Core/Implementation/Sk/Views/TextRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -658,36 +658,6 @@ private void DrawTextDecorations(SKCanvas canvas, SKFont font, SKPaint paint, Te
return resultingLines;
}

private List<string> WrapTextToLines(string text, SKFont font, float maxWidth, LineBreakMode lineBreakMode, MultiFontTextRenderer? multiFontRenderer = null)
{
var lines = new List<string>();
if (string.IsNullOrEmpty(text)) return lines;

string normalizedText = PdfStringUtils.NormalizeNewlines(text);
string[] textSegments = normalizedText.Split(PdfStringUtils.NormalizeNewline);

foreach (string segment in textSegments)
{
if (maxWidth <= 0 || lineBreakMode is LineBreakMode.NoWrap)
{
lines.Add(segment);
continue;
}

if (lineBreakMode is LineBreakMode.HeadTruncation or LineBreakMode.MiddleTruncation or LineBreakMode.TailTruncation)
{
float segmentWidth = multiFontRenderer?.MeasureTextWidth(segment) ?? font.MeasureText(segment);
if (segmentWidth <= maxWidth) lines.Add(segment);
else lines.Add(ApplyLineBreakModeTruncation(segment, font, maxWidth, lineBreakMode, multiFontRenderer));
}
else
{
lines.AddRange(ApplyLineBreakModeWrapping(segment, font, maxWidth, lineBreakMode, multiFontRenderer));
}
}
return lines;
}

private string ApplyLineBreakModeTruncation(string textSegment, SKFont font, float maxWidth, LineBreakMode lineBreakMode, MultiFontTextRenderer? multiFontRenderer = null)
{
float ellipsisWidth = multiFontRenderer?.MeasureTextWidth(Ellipsis) ?? font.MeasureText(Ellipsis);
Expand Down Expand Up @@ -775,91 +745,6 @@ private long CountCharactersInWidth(string text, float maxWidth, MultiFontTextRe
return text.Length;
}

private List<string> ApplyLineBreakModeWrapping(string singleLine, SKFont font, float maxWidth, LineBreakMode lineBreakMode, MultiFontTextRenderer? multiFontRenderer = null)
{
var resultingLines = new List<string>();
if (string.IsNullOrEmpty(singleLine)) { resultingLines.Add(string.Empty); return resultingLines; }

float singleLineWidth = multiFontRenderer?.MeasureTextWidth(singleLine) ?? font.MeasureText(singleLine);
if (singleLineWidth <= maxWidth) { resultingLines.Add(singleLine); return resultingLines; }

int currentPosition = 0;
int textLength = singleLine.Length;
while (currentPosition < textLength)
{
long countMeasured;
if (multiFontRenderer != null)
{
countMeasured = CountCharactersInWidth(singleLine.Substring(currentPosition), maxWidth, multiFontRenderer);
}
else
{
countMeasured = font.BreakText(singleLine.AsSpan(currentPosition), maxWidth);
}
int count = (int)countMeasured;

if (count == 0 && currentPosition < textLength)
{
float charWidth = multiFontRenderer?.MeasureTextWidth(singleLine[currentPosition].ToString()) ?? font.MeasureText(singleLine[currentPosition].ToString());
if (charWidth > maxWidth)
{
resultingLines.Add(singleLine.Substring(currentPosition, 1));
currentPosition += 1;
continue;
}
count = 1;
}

int breakPositionAttempt = currentPosition + count;

if (breakPositionAttempt >= textLength)
{
resultingLines.Add(singleLine[currentPosition..]);
break;
}

int actualBreakPosition = breakPositionAttempt;

if (lineBreakMode is LineBreakMode.WordWrap)
{
string segmentToConsider = singleLine.Substring(currentPosition, count);
int lastValidBreakInSegment = -1;
for (int k = segmentToConsider.Length - 1; k >= 0; --k)
{
if (char.IsWhiteSpace(segmentToConsider[k]) || segmentToConsider[k] == '-')
{
lastValidBreakInSegment = k;
break;
}
}

if (lastValidBreakInSegment > 0 && currentPosition + lastValidBreakInSegment + 1 > currentPosition)
{
actualBreakPosition = currentPosition + lastValidBreakInSegment + 1;
}
else
{
actualBreakPosition = currentPosition + count;
}
}

if (actualBreakPosition <= currentPosition && currentPosition < textLength)
{
actualBreakPosition = currentPosition + 1;
}

string lineToAdd = singleLine[currentPosition..actualBreakPosition].TrimEnd();
resultingLines.Add(lineToAdd);
currentPosition = actualBreakPosition;

while (currentPosition < textLength && char.IsWhiteSpace(singleLine[currentPosition]))
{
currentPosition++;
}
}
return resultingLines;
}

#region Span Support
private async Task<List<SpanRun>> ResolveSpanRunsAsync(
PdfParagraphData paragraph,
Expand Down Expand Up @@ -960,16 +845,5 @@ private async Task<List<SpanRun>> ResolveSpanRunsAsync(

return runs;
}

private string ApplyTextTransform(string text, TextTransform? transform)
{
return transform switch
{
TextTransform.Uppercase => text.ToUpperInvariant(),
TextTransform.Lowercase => text.ToLowerInvariant(),
_ => text
};
}

#endregion
}
6 changes: 0 additions & 6 deletions MauiPdfGenerator/Core/Interfaces/ITextFragment.cs

This file was deleted.

8 changes: 0 additions & 8 deletions MauiPdfGenerator/Core/Interfaces/ITextLine.cs

This file was deleted.

Loading
Loading