Editor/HumanoidMocap/PhoneQrPainter.cs
using Editor;
using Sandbox;
using HumanoidMocap.Editor.PhoneQr;

namespace HumanoidMocap.Editor;

internal static class PhoneQrPainter
{
    // Official s&box mark supplied with the editor, also used by its own window chrome.
    static readonly Pixmap Logo=Pixmap.FromFile("logo_rounded.png");
    public static void Draw(QrCode code,int width,int height)
    {
        Paint.ClearPen();Paint.SetBrush(Theme.WindowBackground);Paint.DrawRect(new Rect(0,0,width,height));
        if(code is null)return;
        var (unit,left,top,logoStart,logoModules)=PhoneQrPresentation.Measure(code.Size,width,height);
        Paint.SetBrush(Color.White);Paint.DrawRect(new Rect(left-4*unit,top-4*unit,(code.Size+8)*unit,(code.Size+8)*unit),Theme.ControlRadius);
        Paint.SetBrush(Color.Black);
        for(var y=0;y<code.Size;y++)for(var x=0;x<code.Size;x++)if(code.GetModule(x,y))Paint.DrawRect(new Rect(left+x*unit,top+y*unit,unit,unit));
        if(Logo is null)return;
        var xLogo=left+logoStart*unit;var yLogo=top+logoStart*unit;var size=logoModules*unit;
        Paint.SetBrush(Color.White);Paint.DrawRect(new Rect(xLogo-unit,yLogo-unit,size+2*unit,size+2*unit));
        Paint.Draw(new Rect(xLogo,yLogo,size,size),Logo);
    }
}