mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-24 21:53:04 -04:00
63 lines
1.9 KiB
C#
63 lines
1.9 KiB
C#
// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
|
|
using System;
|
|
using System.Drawing;
|
|
using ClassicalSharp;
|
|
|
|
namespace Launcher.Drawing {
|
|
public unsafe static class Drawer2DExt {
|
|
|
|
public static void Clear(FastBitmap bmp, Rectangle rect, FastColour col) {
|
|
int x, y, width, height;
|
|
if (!ClampCoords(bmp, rect, out x, out y, out width, out height))
|
|
return;
|
|
int pixel = col.ToArgb();
|
|
|
|
for (int yy = 0; yy < height; yy++) {
|
|
int* row = bmp.GetRowPtr(y + yy);
|
|
for (int xx = 0; xx < width; xx++)
|
|
row[x + xx] = pixel;
|
|
}
|
|
}
|
|
|
|
public static bool ClampCoords(FastBitmap bmp, Rectangle rect, out int x,
|
|
out int y, out int width, out int height) {
|
|
width = rect.Width; height = rect.Height;
|
|
x = rect.X; y = rect.Y;
|
|
if (x >= bmp.Width || y >= bmp.Height) return false;
|
|
|
|
if (x < 0) { width += x; x = 0; }
|
|
if (y < 0) { height += y; y = 0; }
|
|
|
|
width = Math.Min(x + width, bmp.Width) - x;
|
|
height = Math.Min(y + height, bmp.Height) - y;
|
|
return width > 0 && height > 0;
|
|
}
|
|
|
|
|
|
public static void DrawClippedText(ref DrawTextArgs args, IDrawer2D drawer,
|
|
int x, int y, int maxWidth) {
|
|
Size size = drawer.MeasureSize(ref args);
|
|
// No clipping necessary
|
|
if (size.Width <= maxWidth) { drawer.DrawText(ref args, x, y); return; }
|
|
DrawTextArgs copy = args;
|
|
copy.SkipPartsCheck = true;
|
|
|
|
char[] chars = new char[args.Text.Length + 2];
|
|
for (int i = 0; i < args.Text.Length; i++)
|
|
chars[i] = args.Text[i];
|
|
chars[args.Text.Length] = '.';
|
|
chars[args.Text.Length + 1] = '.';
|
|
|
|
for (int len = args.Text.Length; len > 0; len--) {
|
|
chars[len] = '.';
|
|
if (chars[len - 1] == ' ') continue;
|
|
|
|
copy.Text = new string(chars, 0, len + 2);
|
|
size = drawer.MeasureSize(ref copy);
|
|
if (size.Width > maxWidth) continue;
|
|
|
|
drawer.DrawText(ref copy, x, y); return;
|
|
}
|
|
}
|
|
}
|
|
} |