はじめに
過去記事「テキストの高さ、および描画開始点の位置」*1(以下、単に「過去記事」という)では、テキストの高さ(単位はピクセル。heightとおく)が、テキストのxmlデータにおける「sizeM」という数値、および、フォントサイズ(pt)の2変数関数であることを確認した。
height = floor(1.5floor( pt(sizeM-1) )+1.5pt+6)
(ただし、heightの最小値は12)
また、過去記事では、あるheight, ptに対して、
sizeM* = (height - 5) / (1.5pt)
を、テキストのsizeMの値として設定する*2と、テキストの高さを、指定したheightに設定できる*3ことも分かった。
本記事では、これらの知見を応用して、テキストサイズをピクセル単位で微調整する方法を紹介する。
テキストサイズをピクセル単位で微調整する – GeoGebra
function setTextSize(txtName,height){
var xml = ggbApplet.getXML();
var indexOfGuiStart = xml.indexOf('<gui>');
var indexOfGuiEnd = xml.indexOf('</gui>');
var xmlGui = xml.slice(indexOfGuiStart,indexOfGuiEnd);
var indexOfFontStart = xmlGui.indexOf('<font');
var indexOfFontEnd = xmlGui.indexOf('/>', indexOfFontStart);
var xmlFont = xmlGui.slice(indexOfFontStart,indexOfFontEnd);
var indexOfSizeStart = xmlFont.indexOf('size');
var indexOfQuotStart = xmlFont.indexOf('\"', indexOfSizeStart);
var indexOfQuotEnd = xmlFont.indexOf('\"', indexOfQuotStart+1);
var xmlSize = xmlFont.slice(indexOfQuotStart+1,indexOfQuotEnd);
var pt = eval(xmlSize);
var sizeM = (height-5) / (1.5 * pt);
var indexOfElementStart = xml.indexOf('<element type=\"text\" label=\"'+txtName+'\">');
var indexOfElementEnd = xml.indexOf('</element>', indexOfElementStart);
var xmlElement = xml.slice(indexOfElementStart,indexOfElementEnd+10);
var indexOfElementFontStart = xmlElement.indexOf('<font');
if(indexOfElementFontStart==-1){
indexOfElementEnd = xmlElement.indexOf('</element>');
var xmlElementToEval = xmlElement.slice(0,indexOfElementEnd)+'<font serif=\"false\" sizeM=\"'+sizeM+'\" size=\"0\" style=\"0\"/>'+xmlElement.slice(indexOfElementEnd);
ggbApplet.evalXML(xmlElementToEval);
return;
}
var indexOfSizeMStart = xmlElement.indexOf('sizeM');
var indexOfSizeMStart = xmlElement.indexOf('sizeM');
var indexOfSizeMQuotStart = xmlElement.indexOf('\"', indexOfSizeMStart);
var xmlElementBefore = xmlElement.slice(0,indexOfSizeMQuotStart+1);
var indexOfSizeMQuotEnd = xmlElement.indexOf('\"', indexOfSizeMQuotStart+1);
var xmlElementAfter = xmlElement.slice(indexOfSizeMQuotEnd);
xmlElementToEval = xmlElementBefore + sizeM + xmlElementAfter;
ggbApplet.evalXML(xmlElementToEval);
}
バージョン情報
この記事は、以下のバージョンのGeoGebraを前提としています。
Version: 6.0.511.0-w (11 November 2018)