Esempio n. 1
0
/*----------------------------------------------------------------------------------------------
	Return the size of the text, in points.
----------------------------------------------------------------------------------------------*/
float FwGrTxtSrc::getVerticalOffset(toffset ich)
{
	LgCharRenderProps lgchrp;
	int ichMinBogus, ichLimBogus;
	GrResult res = (GrResult)m_qts->GetCharProps(GrToVwOffset(ich), &lgchrp, &ichMinBogus, &ichLimBogus);

	int dympOffset = lgchrp.dympOffset;

	if(lgchrp.ssv != kssvOff)
	{
		// psuedo device context works since we are getting proportions which are invariant
		HDC hdc = ::CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);

		IVwGraphicsWin32Ptr qvgW;
		qvgW.CreateInstance(CLSID_VwGraphicsWin32);
		qvgW->Initialize(hdc);

		IVwGraphicsPtr qvg;
		CheckHr(qvgW->QueryInterface(IID_IVwGraphics, (void **) &qvg));
		CheckHr(qvg->SetupGraphics(&lgchrp));

		if (lgchrp.ssv == kssvSuper)
		{
			int dSuperscriptYOffsetNumerator;
			int dSuperscriptYOffsetDenominator;
			CheckHr(qvg->GetSuperscriptYOffsetRatio(&dSuperscriptYOffsetNumerator, &dSuperscriptYOffsetDenominator));
			dympOffset += gr::GrEngine::GrIntMulDiv(lgchrp.dympHeight, dSuperscriptYOffsetNumerator, dSuperscriptYOffsetDenominator);
		}
		else if (lgchrp.ssv == kssvSub)
		{
			int dSubscriptYOffsetNumerator;
			int dSubscriptYOffsetDenominator;
			CheckHr(qvg->GetSubscriptYOffsetRatio(&dSubscriptYOffsetNumerator, &dSubscriptYOffsetDenominator));
			dympOffset -= gr::GrEngine::GrIntMulDiv(lgchrp.dympHeight, dSubscriptYOffsetNumerator, dSubscriptYOffsetDenominator);
		}
		qvgW.Clear();
		qvg.Clear();
		::DeleteDC(hdc);
	}

	return (float)(dympOffset / 1000);
}