mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-06-28 09:59:41 -06:00
libui/windows: some work on hiDPI shit
still looks derpy but atleast the rendering and touchscreen aren't broken
This commit is contained in:
@ -26,12 +26,14 @@
|
|||||||
<Add library="advapi32" />
|
<Add library="advapi32" />
|
||||||
<Add library="wsock32" />
|
<Add library="wsock32" />
|
||||||
<Add library="oleacc" />
|
<Add library="oleacc" />
|
||||||
|
<Add library="ole32" />
|
||||||
<Add library="usp10" />
|
<Add library="usp10" />
|
||||||
<Add library="gdi32" />
|
<Add library="gdi32" />
|
||||||
<Add library="d2d1" />
|
<Add library="d2d1" />
|
||||||
<Add library="dwrite" />
|
<Add library="dwrite" />
|
||||||
<Add library="uxtheme" />
|
<Add library="uxtheme" />
|
||||||
<Add library="ole32" />
|
<Add library="iphlpapi" />
|
||||||
|
<Add library="user32" />
|
||||||
</Linker>
|
</Linker>
|
||||||
</Target>
|
</Target>
|
||||||
<Target title="Release Windows">
|
<Target title="Release Windows">
|
||||||
@ -61,6 +63,8 @@
|
|||||||
<Add library="d2d1" />
|
<Add library="d2d1" />
|
||||||
<Add library="dwrite" />
|
<Add library="dwrite" />
|
||||||
<Add library="uxtheme" />
|
<Add library="uxtheme" />
|
||||||
|
<Add library="iphlpapi" />
|
||||||
|
<Add library="user32" />
|
||||||
</Linker>
|
</Linker>
|
||||||
</Target>
|
</Target>
|
||||||
<Target title="DebugFast Windows">
|
<Target title="DebugFast Windows">
|
||||||
@ -89,6 +93,8 @@
|
|||||||
<Add library="d2d1" />
|
<Add library="d2d1" />
|
||||||
<Add library="dwrite" />
|
<Add library="dwrite" />
|
||||||
<Add library="uxtheme" />
|
<Add library="uxtheme" />
|
||||||
|
<Add library="iphlpapi" />
|
||||||
|
<Add library="user32" />
|
||||||
</Linker>
|
</Linker>
|
||||||
</Target>
|
</Target>
|
||||||
</Build>
|
</Build>
|
||||||
|
@ -26,6 +26,16 @@ static HRESULT doPaint(uiArea *a, ID2D1RenderTarget *rt, RECT *clip)
|
|||||||
|
|
||||||
rt->BeginDraw();
|
rt->BeginDraw();
|
||||||
|
|
||||||
|
{
|
||||||
|
float dpi_x, dpi_y;
|
||||||
|
D2D1_MATRIX_3X2_F dm;
|
||||||
|
rt->GetDpi(&dpi_x, &dpi_y);
|
||||||
|
ZeroMemory(&dm, sizeof (D2D1_MATRIX_3X2_F));
|
||||||
|
dm._11 = 96.f/dpi_x;
|
||||||
|
dm._22 = 96.f/dpi_y;
|
||||||
|
rt->SetTransform(&dm);
|
||||||
|
}
|
||||||
|
|
||||||
if (a->scrolling) {
|
if (a->scrolling) {
|
||||||
ZeroMemory(&scrollTransform, sizeof (D2D1_MATRIX_3X2_F));
|
ZeroMemory(&scrollTransform, sizeof (D2D1_MATRIX_3X2_F));
|
||||||
scrollTransform._11 = 1;
|
scrollTransform._11 = 1;
|
||||||
|
@ -101,7 +101,7 @@ static void areaMouseEvent(uiArea *a, int down, int up, WPARAM wParam, LPARAM l
|
|||||||
xpix = (double) GET_X_LPARAM(lParam);
|
xpix = (double) GET_X_LPARAM(lParam);
|
||||||
ypix = (double) GET_Y_LPARAM(lParam);
|
ypix = (double) GET_Y_LPARAM(lParam);
|
||||||
// these are in pixels; we need points
|
// these are in pixels; we need points
|
||||||
pixelsToDIP(a, &xpix, &ypix);
|
//pixelsToDIP(a, &xpix, &ypix);
|
||||||
me.X = xpix;
|
me.X = xpix;
|
||||||
me.Y = ypix;
|
me.Y = ypix;
|
||||||
if (a->scrolling) {
|
if (a->scrolling) {
|
||||||
|
@ -14,6 +14,7 @@ void loadAreaSize(uiArea *a, ID2D1RenderTarget *rt, double *width, double *heigh
|
|||||||
size = realGetSize(rt);
|
size = realGetSize(rt);
|
||||||
*width = size.width;
|
*width = size.width;
|
||||||
*height = size.height;
|
*height = size.height;
|
||||||
|
dipToPixels(a, width, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -560,6 +560,13 @@ void uiDrawBitmapDraw(uiDrawContext* c, uiDrawBitmap* bmp, uiRect* srcrect, uiRe
|
|||||||
D2D_RECT_F _srcrect = D2D1::RectF(srcrect->X, srcrect->Y, srcrect->X+srcrect->Width, srcrect->Y+srcrect->Height);
|
D2D_RECT_F _srcrect = D2D1::RectF(srcrect->X, srcrect->Y, srcrect->X+srcrect->Width, srcrect->Y+srcrect->Height);
|
||||||
D2D_RECT_F _dstrect = D2D1::RectF(dstrect->X, dstrect->Y, dstrect->X+dstrect->Width, dstrect->Y+dstrect->Height);
|
D2D_RECT_F _dstrect = D2D1::RectF(dstrect->X, dstrect->Y, dstrect->X+dstrect->Width, dstrect->Y+dstrect->Height);
|
||||||
|
|
||||||
|
float dpix, dpiy;
|
||||||
|
c->rt->GetDpi(&dpix, &dpiy);
|
||||||
|
_srcrect.left = (_srcrect.left * 96.0f) / dpix;
|
||||||
|
_srcrect.top = (_srcrect.top * 96.0f) / dpiy;
|
||||||
|
_srcrect.right = (_srcrect.right * 96.0f) / dpix;
|
||||||
|
_srcrect.bottom = (_srcrect.bottom * 96.0f) / dpiy;
|
||||||
|
|
||||||
c->rt->DrawBitmap(bmp->bmp, &_dstrect, 1.0f, filter ? D2D1_BITMAP_INTERPOLATION_MODE_LINEAR : D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR, &_srcrect);
|
c->rt->DrawBitmap(bmp->bmp, &_dstrect, 1.0f, filter ? D2D1_BITMAP_INTERPOLATION_MODE_LINEAR : D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR, &_srcrect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ const char *uiInit(uiInitOptions *o)
|
|||||||
if ((si.dwFlags & STARTF_USESHOWWINDOW) != 0)
|
if ((si.dwFlags & STARTF_USESHOWWINDOW) != 0)
|
||||||
nCmdShow = si.wShowWindow;
|
nCmdShow = si.wShowWindow;
|
||||||
|
|
||||||
// LONGTERM set DPI awareness
|
SetProcessDPIAware();
|
||||||
|
|
||||||
hDefaultIcon = LoadIconW(NULL, IDI_APPLICATION);
|
hDefaultIcon = LoadIconW(NULL, IDI_APPLICATION);
|
||||||
if (hDefaultIcon == NULL)
|
if (hDefaultIcon == NULL)
|
||||||
|
Reference in New Issue
Block a user