local str
-- str = [[정당은 그 목적, 조직과 활동이 민주적이어야 하며, 국민의 정치적 의사형성에 참여하는 데 필요한 조직을 가져야 한다. 정당은 그 목적, 조직과 활동이 민주적이어야 하며, 국민의 정치적 의사형성에 참여하는 데 필요한 조직을 가져야 한다. 언론·출판이 타인의 명예나 권리를 침해한 때에는 피해자는 이에 대한 피해의 배상을 청구할 수 있다. 훈장 등의 영전은 이를 받은 자에게만 효력이 있고, 어떠한 특권도 이에 따르지 아니한다. 국회의 회의는 공개한다. 다만, 출석의원 과반수의 찬성이 있거나 의장이 국가의 안전보장을 위하여 필요하다고 인정할 때에는 공개하지 아니할 수 국가는 모성의 보호를 위하여 노력하여야 한다. 누구든지 법률에 의하지 아니하고는 체포, 구속, 압수, 수색 또는 심문을 받지 아니하며, 법률과 적법한 절차에 의하지 아니하고는 처벌·보안처분 또는 강제노역을 받지 아니한다. 국회의원은 국가이익을 우선하여 양심에 따라 직무를 행한다. 국교는 인정되지 아니하며, 종교와 정치는 분리된다. 국회의 정기회는 법률이 정하는 바에 의하여 매년 1회 집회되며, 국회의 임시회는 대통령 또는 국회재적의원 4분의 1 이상의 요구에 의하여 집회된다.누구든지 체포 또는 구속을 당한 때에는 적부의 심사를 법원에 청구할 권리를 가진다. 저작자·발명가·과학기술자와 예술가의 권리는 법률로써 보호한다. 혼인과 가족생활은 개인의 존엄과 양성의 평등을 기초로 성립되고 유지되어야 하며, 국가는 이를 보장한다. 국회의원은 그 지위를 남용하여 국가·공공단체 또는 기업체와의 계약이나 그 처분에 의하여 재산상의 권리·이익 또는 직위를 취득하거나 타인을 위하여 그 취득을 알선할 수 없다. 모든 국민은 보건에 관하여 국가의 보호를 받는다. 국회의 회의는 공개한다. 다만, 출석의원 과반수의 찬성이 있거나 의장이 국가의 안전보장을 위하여 필요하다고 인정할 때에는 공개하지 아니할 수 모든 국민은 법률이 정하는 바에 의하여 선거권을 가진다. 국회의원의 임기는 4년으로 한다.국회의원은 국가이익을 우선하여 양심에 따라 직무를 행한다. 학교교육 및 평생교육을 포함한 교육제도와 그 운영, 교육재정 및 교원의 지위에 관한 기본적인 사항은 법률로 정한다. 다만, 형사피고인이 스스로 변호인을 구할 수 없을 때에는 법률이 정하는 바에 의하여 국가가 변호인을 붙인다. 사회적 특수계급의 제도는 인정되지 아니하며, 어떠한 형태로도 이를 창설할 수 없다. 국회의원은 법률이 정하는 직을 겸할 수 없다. 국회의원이 회기 전에 체포 또는 구금된 때에는 현행범이 아닌 한 국회의 요구가 있으면 회기 중 석방된다. 신체장애자 및 질병·노령 기타의 사유로 생활능력이 없는 국민은 법률이 정하는 바에 의하여 국가의 보호를 받는다. 모든 국민은 근로의 의무를 진다. 대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다.통신·방송의 시설기준과 신문의 기능을 보장하기 위하여 필요한 사항은 법률로 정한다. 공무원의 직무상 불법행위로 손해를 받은 국민은 법률이 정하는 바에 의하여 국가 또는 공공단체에 정당한 배상을 청구할 수 있다. 이 경우 공무원 자신의 책임은 면제되지 아니한다. 국회의 정기회는 법률이 정하는 바에 의하여 매년 1회 집회되며, 국회의 임시회는 대통령 또는 국회재적의원 4분의 1 이상의 요구에 의하여 집회된다. 대통령이 임시회의 집회를 요구할 때에는 기간과 집회요구의 이유를 명시하여야 한다. 모든 국민은 종교의 자유를 가진다. 모든 국민은 언론·출판의 자유와 집회·결사의 자유를 가진다. 통신·방송의 시설기준과 신문의 기능을 보장하기 위하여 필요한 사항은 법률로 정한다.입법권은 국회에 속한다. 헌법에 의하여 체결·공포된 조약과 일반적으로 승인된 국제법규는 국내법과 같은 효력을 가진다. 모든 국민은 거주 이전의 자유를 가진다. 정당의 목적이나 활동이 민주적 기본질서에 위배될 때에는 정부는 헌법재판소에 그 해산을 제소할 수 있고, 정당은 헌법재판소의 심판에 의하여 해산된다. 누구든지 체포 또는 구속을 당한 때에는 즉시 변호인의 조력을 받을 권리를 가진다. 훈장 등의 영전은 이를 받은 자에게만 효력이 있고, 어떠한 특권도 이에 따르지 아니한다.]]
str = utility.BuildRandomWords(100)
-- str = "Hello! this is a complete sentence. It also has some, although not many, commas and a veryveryverylongword."
local font = fonts.CreateFont({
	size = 15,
})
gfx.SetFont(font)
local widths = {}
local sentence_width = math.min(gfx.GetTextSize(str), window.GetSize().x / 8)

for i = 1, 20 do
	widths[i] = sentence_width / i

	if widths[i] < gfx.GetTextSize() then break end
end

function goluwa.PreDrawGUI()
	gfx.SetFont(font)

	if not window.IsFocused() then
		local offset = 0

		for i, x in ipairs(widths) do
			render2d.SetColor(0, 1, 0, 0.5)
			gfx.DrawLine(offset, 0, offset, 10000)
			render2d.SetColor(1, 0, 0, 0.5)
			gfx.DrawLine(offset + x, 0, offset + x, 10000)
			render2d.SetColor(1, 1, 1, 1)
			gfx.SetTextPosition(offset, 0)
			gfx.DrawText(gfx.WrapString(str, x))
			offset = offset + sentence_width / i + 20
		end
	else
		render2d.SetColor(1, 1, 1, 1)
		local x, y = gfx.GetMousePosition()
		gfx.SetTextPosition(0, 0)
		gfx.DrawText(gfx.WrapString(str, x))
		render2d.SetColor(1, 0, 0, 1)
		gfx.DrawLine(x, 0, x, 10000)
	end
end