diff --git a/bin/lang/matrixFont-win64-Release.en.po b/bin/lang/matrixFont-win64-Release.en.po
index 0c40bbe..d923b43 100644
--- a/bin/lang/matrixFont-win64-Release.en.po
+++ b/bin/lang/matrixFont-win64-Release.en.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2024-05-30 15:39+0300\n"
+"PO-Revision-Date: 2024-06-04 00:29+0300\n"
"Last-Translator: user <>\n"
"Language-Team: riva\n"
"Language: en\n"
@@ -1798,6 +1798,14 @@ msgstr "Internal name"
msgid "Параметры"
msgstr "Options"
+#: tfmrbf.lbspacew.caption
+msgid "Ширина пробела, %"
+msgstr "Space char width, %"
+
+#: tfmrbf.lbspacew.hint
+msgid "Ширина пробела в % от ширины шрифта"
+msgstr "Space char width in % of font width"
+
#: tfmrbf.lbspacing.caption
msgid "Межсимвольное расстояние, пикс."
msgstr "Сharacter spacing, px."
diff --git a/bin/lang/matrixFont-win64-Release.pot b/bin/lang/matrixFont-win64-Release.pot
index 8a293c0..2dfb319 100644
--- a/bin/lang/matrixFont-win64-Release.pot
+++ b/bin/lang/matrixFont-win64-Release.pot
@@ -1749,6 +1749,14 @@ msgstr ""
msgid "Параметры"
msgstr ""
+#: tfmrbf.lbspacew.caption
+msgid "Ширина пробела, %"
+msgstr ""
+
+#: tfmrbf.lbspacew.hint
+msgid "Ширина пробела в % от ширины шрифта"
+msgstr ""
+
#: tfmrbf.lbspacing.caption
msgid "Межсимвольное расстояние, пикс."
msgstr ""
diff --git a/source/_matrixFont.lpi b/source/_matrixFont.lpi
index eef30ac..7232f49 100644
--- a/source/_matrixFont.lpi
+++ b/source/_matrixFont.lpi
@@ -140,8 +140,8 @@
-
-
+
+
diff --git a/source/fm_rbf.lfm b/source/fm_rbf.lfm
index 54ca204..b1b6986 100644
--- a/source/fm_rbf.lfm
+++ b/source/fm_rbf.lfm
@@ -88,7 +88,7 @@ object fmRbf: TfmRbf
end
object pOptions: TPanel
Left = 0
- Height = 116
+ Height = 148
Top = 96
Width = 667
AutoSize = True
@@ -99,7 +99,7 @@ object fmRbf: TfmRbf
ChildSizing.EnlargeVertical = crsHomogenousSpaceResize
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 2
- ClientHeight = 116
+ ClientHeight = 148
ClientWidth = 667
TabOrder = 1
object seSpacing: TSpinEdit
@@ -165,23 +165,47 @@ object fmRbf: TfmRbf
Caption = 'Смещение базовой линии снизу, пикс.'
Layout = tlCenter
end
+ object seSpaceW: TSpinEdit
+ AnchorSideTop.Side = asrBottom
+ Left = 0
+ Height = 28
+ Top = 96
+ Width = 150
+ Constraints.MinWidth = 80
+ Increment = 5
+ MaxValue = 100
+ MinValue = 5
+ TabOrder = 3
+ Value = 40
+ end
+ object lbSpaceW: TLabel
+ AnchorSideTop.Side = asrCenter
+ Left = 160
+ Height = 28
+ Hint = 'Ширина пробела в % от ширины шрифта'
+ Top = 96
+ Width = 507
+ Caption = 'Ширина пробела, %'
+ Layout = tlCenter
+ end
object pMonospace: TPanel
Left = 0
Height = 20
- Top = 96
+ Top = 128
Width = 150
BevelOuter = bvNone
ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize
ChildSizing.Layout = cclTopToBottomThenLeftToRight
ClientHeight = 20
ClientWidth = 150
- TabOrder = 3
+ TabOrder = 4
object cbMonospace: TCheckBox
Left = 65
Height = 20
Top = 0
Width = 21
TabOrder = 0
+ OnChange = OptionChange
end
end
object lbMonospace: TLabel
@@ -189,7 +213,7 @@ object fmRbf: TfmRbf
Left = 160
Height = 20
Hint = 'Если флажок не установлен - пропорциональный'
- Top = 96
+ Top = 128
Width = 507
Caption = 'Моноширинный шрифт'
Layout = tlCenter
diff --git a/source/fm_rbf.lrj b/source/fm_rbf.lrj
index 29d998a..338ea86 100644
--- a/source/fm_rbf.lrj
+++ b/source/fm_rbf.lrj
@@ -8,6 +8,8 @@
{"hash":48973022,"name":"tfmrbf.lbinterline.caption","sourcebytes":[208,156,208,181,208,182,209,129,209,130,209,128,208,190,209,135,208,189,208,190,208,181,32,209,128,208,176,209,129,209,129,209,130,208,190,209,143,208,189,208,184,208,181,44,32,208,191,208,184,208,186,209,129,46],"value":"\u041C\u0435\u0436\u0441\u0442\u0440\u043E\u0447\u043D\u043E\u0435 \u0440\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u0435, \u043F\u0438\u043A\u0441."},
{"hash":106228928,"name":"tfmrbf.lbbaseline.hint","sourcebytes":[208,160,208,176,209,129,209,129,209,130,208,190,209,143,208,189,208,184,208,181,32,208,190,209,130,32,208,189,208,184,208,183,208,176,32,209,133,208,190,208,187,209,129,209,130,208,176,32,208,180,208,190,32,208,177,208,176,208,183,208,190,208,178,208,190,208,185,32,208,187,208,184,208,189,208,184,208,184,32,209,136,209,128,208,184,209,132,209,130,208,176],"value":"\u0420\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u043E\u0442 \u043D\u0438\u0437\u0430 \u0445\u043E\u043B\u0441\u0442\u0430 \u0434\u043E \u0431\u0430\u0437\u043E\u0432\u043E\u0439 \u043B\u0438\u043D\u0438\u0438 \u0448\u0440\u0438\u0444\u0442\u0430"},
{"hash":37571150,"name":"tfmrbf.lbbaseline.caption","sourcebytes":[208,161,208,188,208,181,209,137,208,181,208,189,208,184,208,181,32,208,177,208,176,208,183,208,190,208,178,208,190,208,185,32,208,187,208,184,208,189,208,184,208,184,32,209,129,208,189,208,184,208,183,209,131,44,32,208,191,208,184,208,186,209,129,46],"value":"\u0421\u043C\u0435\u0449\u0435\u043D\u0438\u0435 \u0431\u0430\u0437\u043E\u0432\u043E\u0439 \u043B\u0438\u043D\u0438\u0438 \u0441\u043D\u0438\u0437\u0443, \u043F\u0438\u043A\u0441."},
+{"hash":261688144,"name":"tfmrbf.lbspacew.hint","sourcebytes":[208,168,208,184,209,128,208,184,208,189,208,176,32,208,191,209,128,208,190,208,177,208,181,208,187,208,176,32,208,178,32,37,32,208,190,209,130,32,209,136,208,184,209,128,208,184,208,189,209,139,32,209,136,209,128,208,184,209,132,209,130,208,176],"value":"\u0428\u0438\u0440\u0438\u043D\u0430 \u043F\u0440\u043E\u0431\u0435\u043B\u0430 \u0432 % \u043E\u0442 \u0448\u0438\u0440\u0438\u043D\u044B \u0448\u0440\u0438\u0444\u0442\u0430"},
+{"hash":50102517,"name":"tfmrbf.lbspacew.caption","sourcebytes":[208,168,208,184,209,128,208,184,208,189,208,176,32,208,191,209,128,208,190,208,177,208,181,208,187,208,176,44,32,37],"value":"\u0428\u0438\u0440\u0438\u043D\u0430 \u043F\u0440\u043E\u0431\u0435\u043B\u0430, %"},
{"hash":170931801,"name":"tfmrbf.lbmonospace.hint","sourcebytes":[208,149,209,129,208,187,208,184,32,209,132,208,187,208,176,208,182,208,190,208,186,32,208,189,208,181,32,209,131,209,129,209,130,208,176,208,189,208,190,208,178,208,187,208,181,208,189,32,45,32,208,191,209,128,208,190,208,191,208,190,209,128,209,134,208,184,208,190,208,189,208,176,208,187,209,140,208,189,209,139,208,185],"value":"\u0415\u0441\u043B\u0438 \u0444\u043B\u0430\u0436\u043E\u043A \u043D\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D - \u043F\u0440\u043E\u043F\u043E\u0440\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0439"},
{"hash":43605042,"name":"tfmrbf.lbmonospace.caption","sourcebytes":[208,156,208,190,208,189,208,190,209,136,208,184,209,128,208,184,208,189,208,189,209,139,208,185,32,209,136,209,128,208,184,209,132,209,130],"value":"\u041C\u043E\u043D\u043E\u0448\u0438\u0440\u0438\u043D\u043D\u044B\u0439 \u0448\u0440\u0438\u0444\u0442"},
{"hash":105722585,"name":"tfmrbf.lbfontwiki.hint","sourcebytes":[104,116,116,112,115,58,47,47,101,110,46,119,105,107,105,112,101,100,105,97,46,111,114,103,47,119,105,107,105,47,84,121,112,101,102,97,99,101,95,97,110,97,116,111,109,121],"value":"https://en.wikipedia.org/wiki/Typeface_anatomy"},
diff --git a/source/fm_rbf.pas b/source/fm_rbf.pas
index a462f28..18fff88 100644
--- a/source/fm_rbf.pas
+++ b/source/fm_rbf.pas
@@ -22,6 +22,7 @@ type
lbName: TLabel;
lbOptions: TLabel;
lbSpacing: TLabel;
+ lbSpaceW: TLabel;
pControls: TPanel;
pMain: TPanel;
pMonospace: TPanel;
@@ -30,11 +31,13 @@ type
seBaseline: TSpinEdit;
seInterline: TSpinEdit;
seSpacing: TSpinEdit;
+ seSpaceW: TSpinEdit;
lbFontWiki: TLabel;
procedure FormShow(Sender: TObject);
procedure bbOKClick(Sender: TObject);
procedure lbFontWikiClick(Sender: TObject);
+ procedure OptionChange(Sender: TObject);
end;
var
@@ -82,4 +85,9 @@ procedure TfmRbf.lbFontWikiClick(Sender: TObject);
OpenURL(lbFontWiki.Hint);
end;
+procedure TfmRbf.OptionChange(Sender: TObject);
+ begin
+ seSpaceW.Enabled := not cbMonospace.Checked;
+ end;
+
end.
diff --git a/source/func/u_rbf.pas b/source/func/u_rbf.pas
index 31029bd..d9198ea 100644
--- a/source/func/u_rbf.pas
+++ b/source/func/u_rbf.pas
@@ -65,6 +65,7 @@ type
Interline: Integer; // spacing between lines
Baseline: Integer; // baseline offset from bottom of char canvas
Monospace: Boolean; // if TRUE then width will be the same for all chars
+ SpaceWdth: Integer; // space char #32 width in % of font width
Name: String[FNT_MAX_NAME];
constructor Create;
@@ -88,6 +89,7 @@ constructor TRBFFontConverter.Create;
Interline := 2;
Baseline := 2;
Monospace := False;
+ SpaceWdth := 40;
end;
destructor TRBFFontConverter.Destroy;
@@ -127,7 +129,6 @@ procedure TRBFFontConverter.LoadFromFile(AFilename: String);
FFont.Width := MaxWidth;
FFont.FontStartItem := CharFirst;
FFont.FontLength := CharLast - FFont.FontStartItem + 1;
- Self.Spacing := Spacing;
Self.Baseline := Baseline;
Self.Interline := Interline;
end;
@@ -182,7 +183,7 @@ procedure TRBFFontConverter.SaveToFile(AFilename: String);
begin
with header do
begin
- MaxWidth := FFont.Width;
+ MaxWidth := FFont.Width + Spacing;
CharSize := (MaxWidth + 7) div 8 * FFont.Height;
Points := FFont.Height;
Height := FFont.Height;
@@ -205,11 +206,19 @@ procedure TRBFFontConverter.SaveToFile(AFilename: String);
procedure WriteCharWidth;
var
- i: Integer;
+ i, w: Integer;
begin
for i := 0 to FFont.FontLength - 1 do
- memstr.WriteByte(Spacing +
- Monospace.Select(FFont.Width, FFont.Item[i].GetCharWidth));
+ begin
+ if Monospace then
+ w := FFont.Width + Spacing else
+ w := FFont.Item[i].GetCharWidth + Spacing;
+
+ if not Monospace and (FFont.FontStartItem + i = 32) then
+ w := round(FFont.Width * SpaceWdth / 100);
+
+ memstr.WriteByte(w);
+ end;
end;
procedure WriteCharData;
@@ -217,7 +226,7 @@ procedure TRBFFontConverter.SaveToFile(AFilename: String);
i, w, h, wmax: Integer;
b: Byte = 0;
begin
- wmax := ((FFont.Width + 7) div 8) * 8 - 1;
+ wmax := ((FFont.Width + Spacing + 7) div 8) * 8 - 1;
for i := 0 to FFont.FontLength - 1 do
for h := 0 to FFont.Height - 1 do
diff --git a/versions.md b/versions.md
index 6265f7d..454673f 100644
--- a/versions.md
+++ b/versions.md
@@ -710,6 +710,12 @@
---
+### `v2.1.2.84` `2024.06.04`
+
+1. Добавлена опция "Ширина пробела" для экспорта шрифта в RBF.
+
+---
+
# Идеи и планы
Идеи для расширения функционала. Намеченные планы.