Add backwards compat hack for DrawRectangle; make sure images displayed have normal blending (GDI+ apparently did this?)

This commit is contained in:
CasualPokePlayer 2024-05-25 18:17:04 -07:00
parent cb901b3aff
commit ab5d4750da
2 changed files with 29 additions and 1 deletions

View File

@ -280,7 +280,11 @@ namespace BizHawk.Bizware.Graphics
{ {
ClearStringOutput(); ClearStringOutput();
// synthesize an add image command for our string bitmap // synthesize an add image command for our string bitmap
_imGuiDrawList.AddCallback((IntPtr)DrawCallbackId.EnableBlendNormal, IntPtr.Zero); if (!_pendingBlendEnable)
{
// always normal blend the string (it covers the entire image, if it was alpha that'd obscure everything else)
_imGuiDrawList.AddCallback((IntPtr)DrawCallbackId.EnableBlendNormal, IntPtr.Zero);
}
DrawImage(_stringOutput, 0, 0); DrawImage(_stringOutput, 0, 0);
} }
@ -405,6 +409,12 @@ namespace BizHawk.Bizware.Graphics
public void DrawImage(Bitmap image, int x, int y) public void DrawImage(Bitmap image, int x, int y)
{ {
// use normal blending for images
if (_pendingBlendEnable)
{
_imGuiDrawList.AddCallback((IntPtr)DrawCallbackId.EnableBlendNormal, IntPtr.Zero);
}
var texture = new ImGuiUserTexture { Bitmap = image, WantCache = false }; var texture = new ImGuiUserTexture { Bitmap = image, WantCache = false };
var handle = GCHandle.Alloc(texture, GCHandleType.Normal); var handle = GCHandle.Alloc(texture, GCHandleType.Normal);
_gcHandles.Add(handle); _gcHandles.Add(handle);
@ -412,10 +422,21 @@ namespace BizHawk.Bizware.Graphics
user_texture_id: GCHandle.ToIntPtr(handle), user_texture_id: GCHandle.ToIntPtr(handle),
p_min: new(x, y), p_min: new(x, y),
p_max: new(x + image.Width, y + image.Height)); p_max: new(x + image.Width, y + image.Height));
if (_pendingBlendEnable)
{
_imGuiDrawList.AddCallback((IntPtr)DrawCallbackId.EnableBlendAlpha, IntPtr.Zero);
}
} }
public void DrawImage(Bitmap image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, bool cache) public void DrawImage(Bitmap image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, bool cache)
{ {
// use normal blending for images
if (_pendingBlendEnable)
{
_imGuiDrawList.AddCallback((IntPtr)DrawCallbackId.EnableBlendNormal, IntPtr.Zero);
}
var texture = new ImGuiUserTexture { Bitmap = image, WantCache = cache }; var texture = new ImGuiUserTexture { Bitmap = image, WantCache = cache };
var handle = GCHandle.Alloc(texture, GCHandleType.Normal); var handle = GCHandle.Alloc(texture, GCHandleType.Normal);
_gcHandles.Add(handle); _gcHandles.Add(handle);
@ -427,6 +448,11 @@ namespace BizHawk.Bizware.Graphics
p_max: new(destRect.Right, destRect.Bottom), p_max: new(destRect.Right, destRect.Bottom),
uv_min: new(srcX / imgWidth, srcY / imgHeight), uv_min: new(srcX / imgWidth, srcY / imgHeight),
uv_max: new((srcX + srcWidth) / imgWidth, (srcY + srcHeight) / imgHeight)); uv_max: new((srcX + srcWidth) / imgWidth, (srcY + srcHeight) / imgHeight));
if (_pendingBlendEnable)
{
_imGuiDrawList.AddCallback((IntPtr)DrawCallbackId.EnableBlendAlpha, IntPtr.Zero);
}
} }
public void DrawLine(Color color, int x1, int y1, int x2, int y2) public void DrawLine(Color color, int x1, int y1, int x2, int y2)

View File

@ -370,6 +370,8 @@ namespace BizHawk.Client.Common
var r = Get2DRenderer(surfaceID); var r = Get2DRenderer(surfaceID);
var w = Math.Max(width, 1); var w = Math.Max(width, 1);
var h = Math.Max(height, 1); var h = Math.Max(height, 1);
// GDI+ had an off by one here, we increment width and height to preserve backwards compatibility
w++; h++;
r.DrawRectangle(line ?? _defaultForeground, x, y, w, h); r.DrawRectangle(line ?? _defaultForeground, x, y, w, h);
var bg = background ?? _defaultBackground; var bg = background ?? _defaultBackground;
if (bg != null) r.FillRectangle(bg.Value, x + 1, y + 1, Math.Max(w - 2, 0), Math.Max(h - 2, 0)); if (bg != null) r.FillRectangle(bg.Value, x + 1, y + 1, Math.Max(w - 2, 0), Math.Max(h - 2, 0));