struct newresource *scaleresource (struct newresource *res, HWND parent) { DLGTEMPLATEEX *d; DLGTEMPLATEEX_END *d2; DLGITEMTEMPLATEEX *dt; BYTE *p, *p2; int i; struct newresource *ns; d = (DLGTEMPLATEEX*)res->resource; d2 = (DLGTEMPLATEEX_END*)res->resource; if (d->dlgVer != 1 || d->signature != 0xffff) return 0; if (!(d->style & (DS_SETFONT | DS_SHELLFONT))) return 0; ns = xcalloc (struct newresource, 1); ns->inst = res->inst; ns->size = res->size; ns->tmpl = res->tmpl; ns->resource = (LPCDLGTEMPLATEW)xmalloc (uae_u8, ns->size); memcpy ((void*)ns->resource, res->resource, ns->size); d = (DLGTEMPLATEEX*)ns->resource; d2 = (DLGTEMPLATEEX_END*)ns->resource; p = (BYTE*)d + sizeof (DLGTEMPLATEEX); p = skiptext (p); p = skiptext (p); p = skiptext (p); d2 = (DLGTEMPLATEEX_END*)p; p2 = p; p2 += sizeof (DLGTEMPLATEEX_END); p2 = skiptextone (p2); p2 = todword (p2); modifytemplatefont (d, d2); p += sizeof (DLGTEMPLATEEX_END); p = skiptextone (p); p = todword (p); if (p != p2) memmove (p, p2, ns->size - (p2 - (BYTE*)ns->resource)); modifytemplate(d, d2, ns->tmpl, mult); for (i = 0; i < d->cDlgItems; i++) { dt = (DLGITEMTEMPLATEEX*)p; modifyitem (d, d2, dt, ns->tmpl, mult); p += sizeof (DLGITEMTEMPLATEEX); p = skiptextone (p); p = skiptext (p); p += ((WORD*)p)[0]; p += sizeof (WORD); p = todword (p); } ns->width = d->cx; ns->height = d->cy; return ns; }
static struct newresource *scaleresource2 (struct newresource *res, HWND parent, int resize, int fullscreen, DWORD exstyle) { DLGTEMPLATEEX *d, *s; DLGTEMPLATEEX_END *d2, *s2; DLGITEMTEMPLATEEX *dt; BYTE *p, *p2, *ps, *ps2; int i; struct newresource *ns; listviewcnt = 0; d = (DLGTEMPLATEEX*)res->resource; d2 = (DLGTEMPLATEEX_END*)res->resource; if (d->dlgVer != 1 || d->signature != 0xffff) return 0; if (!(d->style & (DS_SETFONT | DS_SHELLFONT))) return 0; ns = xcalloc (struct newresource, 1); ns->inst = res->inst; ns->size = res->size; ns->tmpl = res->tmpl; ns->resource = (LPCDLGTEMPLATEW)xmalloc (uae_u8, ns->size + 32); memcpy ((void*)ns->resource, res->resource, ns->size); d = (DLGTEMPLATEEX*)ns->resource; s = (DLGTEMPLATEEX*)res->resource; int width = d->cx; int height = d->cy; if (resize > 0) { d->style &= ~DS_MODALFRAME; d->style |= WS_THICKFRAME; } else if (resize == 0) { d->style |= DS_MODALFRAME; d->style &= ~WS_THICKFRAME; } if (fullscreen > 0) { //d->style |= SW_MAXIMIZE; d->style |= WS_THICKFRAME; } else { d->style |= WS_MINIMIZEBOX; } d->exStyle |= exstyle; d2 = (DLGTEMPLATEEX_END*)ns->resource; p = (BYTE*)d + sizeof (DLGTEMPLATEEX); p = skiptext (p); p = skiptext (p); p = skiptext (p); s2 = (DLGTEMPLATEEX_END*)res->resource; ps = (BYTE*)s2 + sizeof (DLGTEMPLATEEX); ps = skiptext (ps); ps = skiptext (ps); ps = skiptext (ps); d2 = (DLGTEMPLATEEX_END*)p; p2 = p; p2 += sizeof (DLGTEMPLATEEX_END); p2 = skiptextone (p2); p2 = todword (p2); s2 = (DLGTEMPLATEEX_END*)ps; ps2 = ps; ps2 += sizeof (DLGTEMPLATEEX_END); ps2 = skiptextone (ps2); ps2 = todword (ps2); modifytemplatefont (d, d2); p += sizeof (DLGTEMPLATEEX_END); p = skiptextone (p); p = todword (p); memcpy (p, ps2, ns->size - (ps2 - (BYTE*)res->resource)); modifytemplate(d, d2, ns->tmpl, fullscreen); for (i = 0; i < d->cDlgItems; i++) { dt = (DLGITEMTEMPLATEEX*)p; modifyitem (d, d2, dt, ns->tmpl); p += sizeof (DLGITEMTEMPLATEEX); p = skiptextone (p); p = skiptext (p); p += ((WORD*)p)[0]; p += sizeof (WORD); p = todword (p); } ns->width = width; ns->height = height; return ns; }