Skip to content

Instantly share code, notes, and snippets.

@katahiromz
Last active November 4, 2019 17:03
Show Gist options
  • Select an option

  • Save katahiromz/a9646790ac00f15b44dbdb96212f6d8f to your computer and use it in GitHub Desktop.

Select an option

Save katahiromz/a9646790ac00f15b44dbdb96212f6d8f to your computer and use it in GitHub Desktop.
DoAspectAdapt.cpp
enum ASPECT_MODE
{
ASPECT_MODE_IGNORE,
ASPECT_MODE_FIT,
ASPECT_MODE_TRIM
};
BOOL DoAspectAdapt(ASPECT_MODE mode, const SIZE *psizSrc,
const RECT *prcScreen, RECT *prcFrame)
{
BOOL ret = TRUE;
INT cx, cy, cxScreen, cyScreen, cxFrame, cyFrame;
switch (mode)
{
case ASPECT_MODE_IGNORE:
*prcFrame = *prcScreen;
return ret;
case ASPECT_MODE_FIT:
cx = psizSrc->cx;
if (cx <= 0)
{
cx = 1;
ret = FALSE;
}
cy = psizSrc->cy;
if (cy <= 0)
{
cy = 1;
ret = FALSE;
}
cxScreen = prcScreen->right - prcScreen->left;
cyScreen = prcScreen->bottom - prcScreen->top;
if (cxScreen * cy < cx * cyScreen)
{
cxFrame = cxScreen;
cyFrame = cxScreen * cy / cx;
}
else
{
cyFrame = cyScreen;
cxFrame = cyScreen * cx / cy;
}
prcFrame->left = (prcScreen->left + prcScreen->right - cxFrame) / 2;
prcFrame->top = (prcScreen->top + prcScreen->bottom - cyFrame) / 2;
prcFrame->right = prcFrame->left + cxFrame;
prcFrame->bottom = prcFrame->top + cyFrame;
return ret;
case ASPECT_MODE_TRIM
cx = psizSrc->cx;
if (cx <= 0)
{
cx = 1;
ret = FALSE;
}
cy = psizSrc->cy;
if (cy <= 0)
{
cy = 1;
ret = FALSE;
}
cxScreen = prcScreen->right - prcScreen->left;
cyScreen = prcScreen->bottom - prcScreen->top;
if (cxScreen * cy < cx * cyScreen)
{
cyFrame = cyScreen;
cxFrame = cyScreen * cx / cy;
}
else
{
cxFrame = cxScreen;
cyFrame = cxScreen * cy / cx;
}
prcFrame->left = (prcScreen->left + prcScreen->right - cxFrame) / 2;
prcFrame->top = (prcScreen->top + prcScreen->bottom - cyFrame) / 2;
prcFrame->right = prcFrame->left + cxFrame;
prcFrame->bottom = prcFrame->top + cyFrame;
return ret;
default:
return FALSE;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment