Skip to content

Commit 63fee42

Browse files
author
Hugh Sanderson
committed
Add TextField.lineSpaceScale
1 parent 4e2aeba commit 63fee42

File tree

6 files changed

+29
-6
lines changed

6 files changed

+29
-6
lines changed

project/include/TextField.h

+3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class TextField : public DisplayObject
3636
float sharpness;
3737
int textColor;
3838
float thickness;
39+
float lineSpaceScale;
3940
bool useRichTextClipboard;
4041
bool wordWrap;
4142
bool isInput;
@@ -122,6 +123,8 @@ class TextField : public DisplayObject
122123
void modifyLocalMatrix(Matrix &ioMatrix);
123124
void setAntiAliasType(int inVal);
124125
int getAntiAliasType() const { return (int)antiAliasType; }
126+
void setLineSpaceScale(double inVal);
127+
inline float getLineSpaceScale() const { return lineSpaceScale; }
125128

126129

127130
int getCaretIndex() { return caretIndex; }

project/src/common/ExternalInterface.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -4137,6 +4137,7 @@ TEXT_PROP_PRIME(embed_fonts,EmbedFonts,bool);
41374137
TEXT_PROP_PRIME(auto_size,AutoSize,int);
41384138
TEXT_PROP_PRIME(caret_index,CaretIndex,int);
41394139
TEXT_PROP_PRIME(anti_alias_type,AntiAliasType,int);
4140+
TEXT_PROP_PRIME(line_space_scale,LineSpaceScale,double);
41404141
TEXT_PROP_GET_PRIME(text_width,TextWidth,double);
41414142
TEXT_PROP_GET_PRIME(text_height,TextHeight,double);
41424143
TEXT_PROP_GET_PRIME(max_scroll_h,MaxScrollH,int);

project/src/common/FreeType.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ class FreeTypeFont : public FontFace
288288
if (!sGammaLUTInit)
289289
{
290290
for(int i=0;i<256;i++)
291-
sGammaLUT[i] = pow(i/255.0,1.25)*255 + 0.5;
291+
sGammaLUT[i] = pow(i/255.0,1.6)*255 + 0.5;
292292
sGammaLUTInit = true;
293293
}
294294
lut = sGammaLUT;

project/src/common/TextField.cpp

+17-3
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ TextField::TextField(bool inInitRef) : DisplayObject(inInitRef),
4545
sharpness(0),
4646
textColor(0x000000),
4747
thickness(0),
48+
lineSpaceScale(1.0f),
4849
useRichTextClipboard(false),
4950
wordWrap(false),
5051
isInput(false)
@@ -301,6 +302,16 @@ void TextField::setAntiAliasType(int inVal)
301302
}
302303

303304

305+
void TextField::setLineSpaceScale(double inScale)
306+
{
307+
if (lineSpaceScale!=inScale)
308+
{
309+
lineSpaceScale = (float)inScale;
310+
Layout();
311+
}
312+
}
313+
314+
304315
void TextField::setTextColor(int inCol)
305316
{
306317
textColor = inCol;
@@ -2233,9 +2244,10 @@ void TextField::Layout(const Matrix &inMatrix, const RenderTarget *inTarget)
22332244
if (ch=='\n' || ch=='\r')
22342245
{
22352246
// New line ...
2236-
line.mMetrics.fontToLocal(fontToLocal);
2247+
line.mMetrics.fontToLocal(fontToLocal*lineSpaceScale);
22372248
if (i+1<mCharGroups.size() || cid+1<g.Chars())
22382249
line.mMetrics.height += g.mFormat->leading;
2250+
22392251
charY += line.mMetrics.height;
22402252
mLines.push_back(line);
22412253
line.Clear();
@@ -2281,7 +2293,7 @@ void TextField::Layout(const Matrix &inMatrix, const RenderTarget *inTarget)
22812293
line.mChars = last_word_line_chars;
22822294
line.mMetrics.width = last_word_x;
22832295
}
2284-
line.mMetrics.fontToLocal(fontToLocal);
2296+
line.mMetrics.fontToLocal(fontToLocal*lineSpaceScale);
22852297
if (i+1<mCharGroups.size() || cid+1<g.Chars())
22862298
line.mMetrics.height += g.mFormat->leading;
22872299
charY += line.mMetrics.height;
@@ -2302,7 +2314,7 @@ void TextField::Layout(const Matrix &inMatrix, const RenderTarget *inTarget)
23022314
{
23032315
CharGroup *last=mCharGroups[mCharGroups.size()-1];
23042316
last->UpdateMetrics(line.mMetrics);
2305-
line.mMetrics.fontToLocal(fontToLocal);
2317+
line.mMetrics.fontToLocal(fontToLocal*lineSpaceScale);
23062318
if (endsWidthNewLine)
23072319
{
23082320
line.mY0 = charY;
@@ -2430,6 +2442,7 @@ void TextField::decodeStream(ObjectStreamIn &stream)
24302442
stream.get(sharpness);
24312443
stream.get(textColor);
24322444
stream.get(thickness);
2445+
stream.get(lineSpaceScale);
24332446
stream.get(useRichTextClipboard);
24342447
stream.get(wordWrap);
24352448
stream.get(isInput);
@@ -2489,6 +2502,7 @@ void TextField::encodeStream(ObjectStreamOut &stream)
24892502
stream.add(sharpness);
24902503
stream.add(textColor);
24912504
stream.add(thickness);
2505+
stream.add(lineSpaceScale);
24922506
stream.add(useRichTextClipboard);
24932507
stream.add(wordWrap);
24942508
stream.add(isInput);

project/src/windows/GDIFont.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class GDIFont : public FontFace
6363
if (!sGammaLUTInit)
6464
{
6565
for(int i=0;i<256;i++)
66-
sGammaLUT[i] = pow(i/255.0,1.25)*255 + 0.5;
66+
sGammaLUT[i] = pow(i/255.0,1.6)*255 + 0.5;
6767

6868
sGammaLUTInit = true;
6969
}
@@ -119,7 +119,7 @@ class GDIFont : public FontFace
119119
uint8 *dest = (uint8 *)outTarget.Row(y + outTarget.mRect.y) + outTarget.mRect.x;
120120
for(int x=0;x<outTarget.mRect.w;x++)
121121
{
122-
*dest++= sGammaLUT[ (src->r + src->g*2 + src->b + 2) / 4];
122+
*dest++= sGammaLUT[ (src->r + src->g + src->b + 1) / 3];
123123
src++;
124124
}
125125
}

src/nme/text/TextField.hx

+5
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class TextField extends InteractiveObject
2929
public var selectionEndIndex(get, null):Int;
3030
public var multiline(get, set):Bool;
3131
public var numLines(get, null):Int;
32+
public var lineSpaceScale(get, set):Float;
3233
public var scrollH(get, set):Int;
3334
public var scrollV(get, set):Int;
3435
public var selectable(get, set):Bool;
@@ -184,6 +185,8 @@ class TextField extends InteractiveObject
184185
private function set_text(inText:String):String { nme_text_field_set_text(nmeHandle, inText); return inText; }
185186
private function get_textColor():Int { return nme_text_field_get_text_color(nmeHandle); }
186187
private function set_textColor(inCol:Int):Int { nme_text_field_set_text_color(nmeHandle, inCol); return inCol; }
188+
private function get_lineSpaceScale():Float { return nme_text_field_get_line_space_scale(nmeHandle); }
189+
private function set_lineSpaceScale(inValue:Float):Float { nme_text_field_set_line_space_scale(nmeHandle, inValue); return inValue; }
187190
private function get_textWidth():Float { return nme_text_field_get_text_width(nmeHandle); }
188191
private function get_textHeight():Float { return nme_text_field_get_text_height(nmeHandle); }
189192
private function get_type():TextFieldType { return nme_text_field_get_type(nmeHandle) ? TextFieldType.INPUT : TextFieldType.DYNAMIC; }
@@ -270,6 +273,8 @@ class TextField extends InteractiveObject
270273
private static var nme_text_field_send_key = PrimeLoader.load("nme_text_field_send_key", "oiiiv");
271274
private static var nme_text_field_set_anti_alias_type = PrimeLoader.load("nme_text_field_set_anti_alias_type", "oiv");
272275
private static var nme_text_field_get_anti_alias_type = PrimeLoader.load("nme_text_field_get_anti_alias_type", "oi");
276+
private static var nme_text_field_set_line_space_scale = PrimeLoader.load("nme_text_field_set_line_space_scale", "odv");
277+
private static var nme_text_field_get_line_space_scale = PrimeLoader.load("nme_text_field_get_line_space_scale", "od");
273278
}
274279

275280
#else

0 commit comments

Comments
 (0)