//Copyright (c) 1997-2000 Microsoft Corporation
#include "pch.hxx" // pch
#pragma hdrstop

#include "resource.h"
#include "DlgFonts.h"
#include "accwiz.h" // for g_Options


HFONT BigBoldFont = NULL;
HFONT BoldFont = NULL;
HFONT BigFont = NULL;


// Helper function
void SetControlFont(HFONT hFont, HWND hwnd, int nId)
{
	if(!hFont)
		return;
	HWND hwndControl = GetDlgItem(hwnd, nId);
	if(!hwndControl)
		return;
	SetWindowFont(hwndControl, hFont, TRUE);
}


void SetupFonts(HWND hwnd)
{
	// Only execute this code once
	static BOOL bOneTime = TRUE;
	if(bOneTime)
		bOneTime = FALSE;
	else
		return;

	// Create the fonts we need based on the dialog font
	NONCLIENTMETRICS ncm;
	memset(&ncm, 0, sizeof(ncm));
	ncm.cbSize = sizeof(ncm);
	SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);

	LOGFONT BigBoldLogFont = ncm.lfMessageFont;
	LOGFONT BoldLogFont = ncm.lfMessageFont;
	LOGFONT BigLogFont = ncm.lfMessageFont;

	// Create Big Bold Font and Bold Font
    BigBoldLogFont.lfWeight = FW_BOLD;
	BoldLogFont.lfWeight = FW_BOLD;
    BigLogFont.lfWeight = FW_NORMAL;

    TCHAR FontSizeString[24];
    int FontSizeBigBold;
    int FontSizeBold;
    int FontSizeBig;

    //
    // Load size and name from resources, since these may change
    // from locale to locale based on the size of the system font, etc.
    //
	BigBoldLogFont.lfCharSet = g_Options.m_lfCharSet;
	BoldLogFont.lfCharSet = g_Options.m_lfCharSet;
	BigLogFont.lfCharSet = g_Options.m_lfCharSet;

    if(!LoadString(g_hInstDll,IDS_BIGBOLDFONTNAME,BigBoldLogFont.lfFaceName,LF_FACESIZE)) {
        lstrcpy(BigBoldLogFont.lfFaceName,TEXT("MS Serif"));
    }

    if(!LoadString(g_hInstDll,IDS_BOLDFONTNAME,BoldLogFont.lfFaceName,LF_FACESIZE)) {
        lstrcpy(BoldLogFont.lfFaceName,TEXT("MS Serif"));
    }

    if(!LoadString(g_hInstDll,IDS_BIGFONTNAME,BigLogFont.lfFaceName,LF_FACESIZE)) {
        lstrcpy(BigLogFont.lfFaceName,TEXT("MS Serif"));
    }

    if(LoadString(g_hInstDll,IDS_BIGBOLDFONTSIZE,FontSizeString,sizeof(FontSizeString)/sizeof(TCHAR))) {
		FontSizeBigBold = _tcstoul(FontSizeString,NULL,10);
    } else {
        FontSizeBigBold = 16;
    }

    if(LoadString(g_hInstDll,IDS_BOLDFONTSIZE,FontSizeString,sizeof(FontSizeString)/sizeof(TCHAR))) {
        FontSizeBold = _tcstoul(FontSizeString,NULL,10);
    } else {
        FontSizeBold = 8;
    }

    if(LoadString(g_hInstDll,IDS_BIGFONTSIZE,FontSizeString,sizeof(FontSizeString)/sizeof(TCHAR))) {
        FontSizeBig = _tcstoul(FontSizeString,NULL,10);
    } else {
        FontSizeBig = 16;
    }

	HDC hdc;
    if(hdc = GetDC(hwnd)) {

        BigBoldLogFont.lfHeight = 0 - (int)((float)GetDeviceCaps(hdc,LOGPIXELSY) * (float)FontSizeBigBold / (float)72 + (float).5);
        BoldLogFont.lfHeight = 0 - (int)((float)GetDeviceCaps(hdc,LOGPIXELSY) * (float)FontSizeBold / (float)72 + (float).5);
        BigLogFont.lfHeight = 0 - (int)((float)GetDeviceCaps(hdc,LOGPIXELSY) * (float)FontSizeBig / (float)72 + (float).5);

        BigBoldFont = CreateFontIndirect(&BigBoldLogFont);
		BoldFont = CreateFontIndirect(&BoldLogFont);
        BigFont = CreateFontIndirect(&BigLogFont);

        ReleaseDC(hwnd,hdc);
    }

}

void DialogFonts_InitWizardPage(
	IN HWND hwndWizardPage
	)
{
	SetupFonts(hwndWizardPage);

	// If we are going to change the fonts of all wizard pages,
	// we can't allow the user to go back and change the size
	// they picked.  This is because this function is only called
	// once for each page.
/*
	if(-1 != g_Options.m_nMinimalFontSize)
	{
*/
	HWND hwndChild = GetTopWindow(hwndWizardPage);
	do
	{
		int nId = GetDlgCtrlID(hwndChild);
		switch(nId)
		{
		case IDC_BOLDTITLE:
			SetControlFont(BoldFont, hwndWizardPage, IDC_BOLDTITLE);
			break;
		case IDC_BIGBOLDTITLE:
			SetControlFont(BigBoldFont, hwndWizardPage, IDC_BIGBOLDTITLE);
			break;
		case IDC_BIGTITLE:
			SetControlFont(BigFont, hwndWizardPage, IDC_BIGTITLE);
			break;
#if 0 // This used to be for the icon size page
		case IDC_STATICNORMAL:
			SetWindowFont(hwndChild, g_Options.GetClosestMSSansSerif(8), TRUE);
			break;
		case IDC_STATICLARGE:
			SetWindowFont(hwndChild, g_Options.GetClosestMSSansSerif(12), TRUE);
			break;
		case IDC_STATICEXTRALARGE:
			SetWindowFont(hwndChild, g_Options.GetClosestMSSansSerif(18), TRUE);
			break;
#endif
		default:
#if 0 // We decided that we weren't going to resize the fonts in the dialog
			// DON'T go above 12 points for the dialog fonts
			SetWindowFont(hwndChild, g_Options.GetClosestMSSansSerif(min(12, g_Options.m_nMinimalFontSize)), TRUE);
#endif
			break;
		}
	}
	while(hwndChild = GetNextWindow(hwndChild, GW_HWNDNEXT));
}

