
// Store pointer to calling class in window's user data
WindowClass *w = (WindowClass *) (LPCREATESTRUCT(lParam) -> lpCreateParams); 
SetWindowLongPtr(hWnd, GWLP_USERDATA, (__int3264) (LONG_PTR) w);

/*
	size_t count = CharsInfo.size();
	for (size_t i = 0; i < count; i++)
	{
		// CharsInfo vector sorted by code
		FontCharInfo *charInfo = &CharsInfo[i];
		if (charInfo -> Code == code) return (charInfo);
		else if (charInfo -> Code > code) break;
	}
*/

int FontCharInfo::GetKerning(int code) const
{
	size_t count = Kerning.size();
	if (count == 0) return 0;

	for (size_t i = 0; i < count; i++)
	{
		const FontKerningInfo& info = Kerning[i];
		if (info.First == code) return (info.Amount);
		else if (info.First > code) break;
	}

	return 0;
}

/*
#include "StdAfx.h"
#include "WidgetEdit.h"

namespace Engine {

WidgetEditCaret::WidgetEditCaret()
{
	PositionPixel = 0;
	PositionChar = 0;
	
	Time = 0.0f;
	Alpha = 0.0f;
	Smooth = 0.1f;
}

void WidgetEditCaret::SetState(WidgetEditCaretState state)
{
	if (state == CARET_STATE_APPEAR)
	{
		Time = 0.5f - Smooth;
	}
	else if (state == CARET_STATE_DISAPPEAR)
	{
		Time = 1.0f - Smooth;
	}
	else if (state == CARET_STATE_VISIBLE)
	{
		Time = 0.5f;
	}
	else if (state == CARET_STATE_INVISIBLE)
	{
		Time = 0.0f;
	}
}

void WidgetEditCaret::Update(float dt)
{
	Time += dt * 0.4f;

	if (Time > 1.0f)
		Time -= 1.0f;

	UpdateState();
}

void WidgetEditCaret::UpdateState()
{
	float a = Time;
	float t0 = 0.5f - Smooth;
	float t1 = 0.5f;
	float t2 = 1.0f - Smooth;

	if (a > t2)
	{
		a = (a - t2) / Smooth;
		a = math::descent(a);
	}
	else if (a > t1)
	{
		a = 1.0f;
	}
	else if (a > t0)
	{
		a = (a - t0) / Smooth;
		a = math::ascent(a);
	}
	else
	{
		a = 0.0f;
	}

	Alpha = a;
}

void WidgetEditCaret::Show()
{
	SetState(CARET_STATE_APPEAR);
}

void WidgetEditCaret::Hide()
{
}

} // namespace Engine
*/
