summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: a024401)
raw | patch | inline | side by side (parent: a024401)
author | Ketmar Dark <ketmar@ketmar.no-ip.org> | |
Tue, 3 Oct 2017 14:33:48 +0000 (17:33 +0300) | ||
committer | Ketmar Dark <ketmar@ketmar.no-ip.org> | |
Tue, 3 Oct 2017 19:16:22 +0000 (22:16 +0300) |
index 7f722fea97090a79a967d319758fefc3e020ea09..797c73fa5ba87a81a31fa5f0a5f7a49e0d0f0842 100644 (file)
--- a/src/flexui/fui_ctls.pas
+++ b/src/flexui/fui_ctls.pas
mCancel: Boolean;
mDefault: Boolean;
// colors
+ mStyleLoaded: Boolean;
mCtl4Style: AnsiString;
mBackColor: array[0..ClrIdxMax] of TGxRGBA;
mTextColor: array[0..ClrIdxMax] of TGxRGBA;
// ////////////////////////////////////////////////////////////////////// //
TUIButton = class(TUITextLabel)
+ protected
+ mSkipLayPrepare: Boolean;
+ mShadowSize: Integer;
+ mAddMarkers: Boolean;
+ mHideMarkers: Boolean;
+ mPushed: Boolean;
+
protected
procedure setText (const s: AnsiString); override;
+ procedure cacheStyle (root: TUIStyle); override;
+
public
procedure AfterConstruction (); override; // so it will be correctly initialized when created from parser
+ procedure layPrepare (); override; // called before registering control in layouter
+
procedure drawControl (gx, gy: Integer); override;
procedure mouseEvent (var ev: THMouseEvent); override;
procedure keyEvent (var ev: THKeyEvent); override;
end;
+ // ////////////////////////////////////////////////////////////////////// //
+ TUIButtonRound = class(TUIButton)
+ protected
+ procedure setText (const s: AnsiString); override;
+
+ public
+ procedure AfterConstruction (); override; // so it will be correctly initialized when created from parser
+
+ procedure layPrepare (); override; // called before registering control in layouter
+
+ procedure drawControl (gx, gy: Integer); override;
+ end;
+
// ////////////////////////////////////////////////////////////////////// //
TUISwitchBox = class(TUITextLabel)
protected
if (ctl = nil) then exit;
lay := TFlexLayouter.Create();
try
+ if (not ctl.mStyleLoaded) then ctl.updateStyle();
if (ctl is TUITopWindow) and (TUITopWindow(ctl).fitToScreen) then TUITopWindow(ctl).flFitToScreen();
lay.setup(ctl);
if (Length(uiTopList) > 0) then uiTopList[High(uiTopList)].blurred();
SetLength(uiTopList, Length(uiTopList)+1);
uiTopList[High(uiTopList)] := ctl;
- ctl.updateStyle();
+ if (not ctl.mStyleLoaded) then ctl.updateStyle();
ctl.activated();
end;
mCtl4Style := '';
mAlign := -1; // left/top
mExpand := false;
+ mStyleLoaded := false;
end;
if (stl = nil) then stl := uiFindStyle(''); // default
cacheStyle(stl);
for ctl in mChildren do ctl.updateStyle();
+ mStyleLoaded := true;
end;
procedure TUIControl.cacheStyle (root: TUIStyle);
procedure TUIControl.layPrepare ();
begin
mLayDefSize := mDefSize;
- if (mLayDefSize.w <> 0) and (mLayDefSize.h <> 0) then
+ if (mLayDefSize.w <> 0) or (mLayDefSize.h <> 0) then
begin
mLayMaxSize := mMaxSize;
if (mLayMaxSize.w >= 0) then begin mLayDefSize.w += mFrameWidth*2; mLayMaxSize.w += mFrameWidth*2; end;
procedure TUIButton.AfterConstruction ();
begin
inherited;
- mHAlign := -1;
+ mHAlign := 0;
mVAlign := 0;
+ mShadowSize := 0;
mCanFocus := true;
- mDefSize := TLaySize.Create(uiContext.textWidth(mText)+8*2, uiContext.textHeight(mText)+2);
+ mDefSize := TLaySize.Create(uiContext.textWidth(mText)+uiContext.textWidth('[ ]'), uiContext.textHeight(mText));
mCtl4Style := 'button';
+ mSkipLayPrepare := false;
+ mAddMarkers := false;
+ mHideMarkers := false;
+end;
+
+
+procedure TUIButton.cacheStyle (root: TUIStyle);
+var
+ sz: Integer = 0;
+begin
+ inherited cacheStyle(root);
+ // shadow size
+ sz := nmax(0, root.get('shadow-size', 'active', mCtl4Style).asInt(0));
+ sz := nmax(sz, root.get('shadow-size', 'disabled', mCtl4Style).asInt(0));
+ sz := nmax(sz, root.get('shadow-size', 'inactive', mCtl4Style).asInt(0));
+ mShadowSize := sz;
+ // markers mode
+ mAddMarkers := root.get('add-markers', 'active', mCtl4Style).asBool(false);
+ mAddMarkers := mAddMarkers or root.get('add-markers', 'disabled', mCtl4Style).asBool(false);
+ mAddMarkers := mAddMarkers or root.get('add-markers', 'inactive', mCtl4Style).asBool(false);
+ // hide markers?
+ mHideMarkers := root.get('hide-markers', 'active', mCtl4Style).asBool(false);
+ mHideMarkers := mHideMarkers or root.get('hide-markers', 'disabled', mCtl4Style).asBool(false);
+ mHideMarkers := mHideMarkers or root.get('hide-markers', 'inactive', mCtl4Style).asBool(false);
end;
procedure TUIButton.setText (const s: AnsiString);
begin
inherited setText(s);
- mDefSize := TLaySize.Create(uiContext.textWidth(mText)+8*2, uiContext.textHeight(mText)+2);
+ if (mHideMarkers) then
+ begin
+ mDefSize := TLaySize.Create(uiContext.textWidth(mText)+10, uiContext.textHeight(mText));
+ end
+ else if (mAddMarkers) then
+ begin
+ mDefSize := TLaySize.Create(uiContext.textWidth(mText)+uiContext.textWidth('[<>]'), uiContext.textHeight(mText));
+ end
+ else
+ begin
+ mDefSize := TLaySize.Create(uiContext.textWidth(mText)+uiContext.textWidth('<>'), uiContext.textHeight(mText));
+ end;
+end;
+
+
+procedure TUIButton.layPrepare ();
+var
+ ods: TLaySize;
+ ww: Integer;
+begin
+ if (not mSkipLayPrepare) then
+ begin
+ ods := mDefSize;
+ if (ods.w <> 0) or (ods.h <> 0) then
+ begin
+ mDefSize := TLaySize.Create(uiContext.textWidth(mText), uiContext.textHeight(mText));
+ if (mHideMarkers) then
+ begin
+ ww := 10;
+ end
+ else if (mAddMarkers) then
+ begin
+ if (mDefault) then ww := uiContext.textWidth('[< >]')
+ else if (mCancel) then ww := uiContext.textWidth('[{ }]')
+ else ww := uiContext.textWidth('[ ]');
+ end
+ else
+ begin
+ ww := nmax(0, uiContext.textWidth('< >'));
+ ww := nmax(ww, uiContext.textWidth('{ }'));
+ ww := nmax(ww, uiContext.textWidth('[ ]'));
+ end;
+ mDefSize.w += ww+mShadowSize;
+ mDefSize.h += mShadowSize;
+ end;
+ end;
+ inherited layPrepare();
+ if (not mSkipLayPrepare) then mDefSize := ods;
end;
procedure TUIButton.drawControl (gx, gy: Integer);
var
- xpos, ypos: Integer;
+ wdt, hgt: Integer;
+ xpos, ypos, xofsl, xofsr{, sofs}: Integer;
cidx: Integer;
+ lch, rch: AnsiChar;
+ lstr, rstr: AnsiString;
begin
cidx := getColorIndex;
+ wdt := mWidth-mShadowSize;
+ hgt := mHeight-mShadowSize;
+ if (mPushed) {or (cidx = ClrIdxActive)} then
+ begin
+ //sofs := mShadowSize;
+ gx += mShadowSize;
+ gy += mShadowSize;
+ end
+ else
+ begin
+ //sofs := 0;
+ if (mShadowSize > 0) then
+ begin
+ uiContext.darkenRect(gx+mShadowSize, gy+hgt, wdt, mShadowSize, 96);
+ uiContext.darkenRect(gx+wdt, gy+mShadowSize, mShadowSize, hgt-mShadowSize, 96);
+ end;
+ end;
+
uiContext.color := mBackColor[cidx];
- uiContext.fillRect(gx+1, gy, mWidth-2, mHeight);
- uiContext.fillRect(gx, gy+1, 1, mHeight-2);
- uiContext.fillRect(gx+mWidth-1, gy+1, 1, mHeight-2);
+ //setScissor(sofs, sofs, wdt, hgt);
+ uiContext.fillRect(gx, gy, wdt, hgt);
- if (Length(mText) > 0) then
+ if (mVAlign < 0) then ypos := 0
+ else if (mVAlign > 0) then ypos := hgt-uiContext.textHeight(mText)
+ else ypos := (hgt-uiContext.textHeight(mText)) div 2;
+ ypos += gy;
+
+ uiContext.color := mTextColor[cidx];
+
+ if (mHideMarkers) then
begin
- if (mHAlign < 0) then xpos := 0
- else if (mHAlign > 0) then xpos := mWidth-uiContext.textWidth(mText)
- else xpos := (mWidth-uiContext.textWidth(mText)) div 2;
+ xofsl := 5;
+ xofsr := 5;
+ end
+ else
+ begin
+ if (mAddMarkers) then
+ begin
+ if (mDefault) then begin lstr := '[< '; rstr := ' >]'; end
+ else if (mCancel) then begin lstr := '[{ '; rstr := ' }]'; end
+ else begin lstr := '[ '; rstr := ' ]'; end;
+ xofsl := uiContext.textWidth(lstr);
+ xofsr := uiContext.textWidth(rstr);
+ uiContext.drawText(gx, ypos, lstr);
+ uiContext.drawText(gx+wdt-uiContext.textWidth(rstr), ypos, rstr);
+ end
+ else
+ begin
+ xofsl := nmax(0, uiContext.textWidth('< '));
+ xofsl := nmax(xofsl, uiContext.textWidth('{ '));
+ xofsl := nmax(xofsl, uiContext.textWidth('[ '));
+ xofsr := nmax(0, uiContext.textWidth(' >'));
+ xofsr := nmax(xofsr, uiContext.textWidth(' }'));
+ xofsr := nmax(xofsr, uiContext.textWidth(' ]'));
+ if (mDefault) then begin lch := '<'; rch := '>'; end
+ else if (mCancel) then begin lch := '{'; rch := '}'; end
+ else begin lch := '['; rch := ']'; end;
+ uiContext.drawChar(gx, ypos, lch);
+ uiContext.drawChar(gx+wdt-uiContext.charWidth(rch), ypos, rch);
+ end;
+ end;
- if (mVAlign < 0) then ypos := 0
- else if (mVAlign > 0) then ypos := mHeight-uiContext.textHeight(mText)
- else ypos := (mHeight-uiContext.textHeight(mText)) div 2;
+ if (Length(mText) > 0) then
+ begin
+ if (mHAlign < 0) then xpos := 0
+ else begin xpos := wdt-xofsl-xofsr-uiContext.textWidth(mText); if (mHAlign = 0) then xpos := xpos div 2; end;
+ xpos += xofsl;
- setScissor(8, 0, mWidth-16, mHeight);
- uiContext.color := mTextColor[cidx];
- uiContext.drawText(gx+xpos+8, gy+ypos, mText);
+ //setScissor(xofsl+sofs, sofs, wdt-xofsl-xofsr, hgt);
+ uiContext.drawText(gx+xpos, ypos, mText);
if (mHotChar <> #0) and (mHotChar <> ' ') then
begin
uiContext.color := mHotColor[cidx];
- uiContext.drawChar(gx+xpos+8+mHotOfs, gy+ypos, mHotChar);
+ uiContext.drawChar(gx+xpos+mHotOfs, ypos, mHotChar);
end;
end;
end;
if (uiGrabCtl = self) then
begin
ev.eat();
- if (ev = '-lmb') and focused and toLocal(ev.x, ev.y, lx, ly) then
+ mPushed := toLocal(ev.x, ev.y, lx, ly);
+ if (ev = '-lmb') and focused and mPushed then
begin
+ mPushed := false;
doAction();
end;
exit;
end;
if (ev.eaten) or (ev.cancelled) or (not enabled) or not focused then exit;
+ mPushed := true;
ev.eat();
end;
end;
+// ////////////////////////////////////////////////////////////////////////// //
+procedure TUIButtonRound.AfterConstruction ();
+begin
+ inherited;
+ mHAlign := -1;
+ mVAlign := 0;
+ mCanFocus := true;
+ mDefSize := TLaySize.Create(uiContext.textWidth(mText)+8*2, uiContext.textHeight(mText)+2);
+ mCtl4Style := 'button-round';
+ mSkipLayPrepare := true;
+end;
+
+
+procedure TUIButtonRound.setText (const s: AnsiString);
+begin
+ inherited setText(s);
+ mDefSize := TLaySize.Create(uiContext.textWidth(mText)+8*2, uiContext.textHeight(mText)+2);
+end;
+
+
+procedure TUIButtonRound.layPrepare ();
+var
+ ods: TLaySize;
+begin
+ ods := mDefSize;
+ if (ods.w <> 0) or (ods.h <> 0) then
+ begin
+ mDefSize := TLaySize.Create(uiContext.textWidth(mText)+8*2, uiContext.textHeight(mText)+2);
+ end;
+ inherited layPrepare();
+ mDefSize := ods;
+end;
+
+
+procedure TUIButtonRound.drawControl (gx, gy: Integer);
+var
+ xpos, ypos: Integer;
+ cidx: Integer;
+begin
+ cidx := getColorIndex;
+
+ uiContext.color := mBackColor[cidx];
+ uiContext.fillRect(gx+1, gy, mWidth-2, mHeight);
+ uiContext.fillRect(gx, gy+1, 1, mHeight-2);
+ uiContext.fillRect(gx+mWidth-1, gy+1, 1, mHeight-2);
+
+ if (Length(mText) > 0) then
+ begin
+ if (mHAlign < 0) then xpos := 0
+ else if (mHAlign > 0) then xpos := mWidth-uiContext.textWidth(mText)
+ else xpos := (mWidth-uiContext.textWidth(mText)) div 2;
+
+ if (mVAlign < 0) then ypos := 0
+ else if (mVAlign > 0) then ypos := mHeight-uiContext.textHeight(mText)
+ else ypos := (mHeight-uiContext.textHeight(mText)) div 2;
+
+ setScissor(8, 0, mWidth-16, mHeight);
+ uiContext.color := mTextColor[cidx];
+ uiContext.drawText(gx+xpos+8, gy+ypos, mText);
+
+ if (mHotChar <> #0) and (mHotChar <> ' ') then
+ begin
+ uiContext.color := mHotColor[cidx];
+ uiContext.drawChar(gx+xpos+8+mHotOfs, gy+ypos, mHotChar);
+ end;
+ end;
+end;
+
+
// ////////////////////////////////////////////////////////////////////////// //
procedure TUISwitchBox.AfterConstruction ();
begin
registerCtlClass(TUILine, 'line');
registerCtlClass(TUITextLabel, 'label');
registerCtlClass(TUIStaticText, 'static');
+ registerCtlClass(TUIButtonRound, 'round-button');
registerCtlClass(TUIButton, 'button');
registerCtlClass(TUICheckBox, 'checkbox');
registerCtlClass(TUIRadioBox, 'radiobox');
index a941f554dda7c9a76fe95319c90721b4113ebcb3..fc6e93a46e1716382681c2b15784df259b5f1dce 100644 (file)
FlagNoPad = LongWord(1) shl 1;
FlagExpand = LongWord(1) shl 2;
// internal
- FlagInGroup = LongWord(1) shl 8; // set if this control is a member of any group
+ FlagInGroupH = LongWord(1) shl 8; // set if this control is a member of any group
+ FlagInGroupV = LongWord(1) shl 9; // set if this control is a member of any group
private
type
procedure initialize (); inline;
function horizBox (): Boolean; inline;
- function inGroup (): Boolean; inline;
+ function inGroup (idx: Integer): Boolean; inline;
function noPad (): Boolean; inline;
function getExpand (): Boolean; inline;
procedure firstTimeSetup (cidx: LayControlIdx);
procedure doChildren (parent: LayControlIdx; child: ControlT);
procedure appendToGroup (const gname: AnsiString;cidx: LayControlIdx;gidx: Integer);
+ procedure clearGroups ();
procedure setupGroups ();
procedure distributeChildren (boxidx: LayControlIdx; maindir: Integer);
end;
function TFlexLayouterBase.TLayControl.horizBox (): Boolean; inline; begin result := ((flags and FlagHorizBox) <> 0); end;
-function TFlexLayouterBase.TLayControl.inGroup (): Boolean; inline; begin result := ((flags and FlagInGroup) <> 0); end;
+function TFlexLayouterBase.TLayControl.inGroup (idx: Integer): Boolean; inline; begin if (idx = 0) then result := ((flags and FlagInGroupH) <> 0) else if (idx = 1) then result := ((flags and FlagInGroupV) <> 0) else result := false; end;
function TFlexLayouterBase.TLayControl.noPad (): Boolean; inline; begin result := ((flags and FlagNoPad) <> 0); end;
function TFlexLayouterBase.TLayControl.getExpand (): Boolean; inline; begin result := ((flags and FlagExpand) <> 0); end;
procedure TFlexLayouterBase.clear ();
begin
+ clearGroups();
ctlist := nil;
- groups[0] := nil;
- groups[1] := nil;
end;
procedure TFlexLayouterBase.appendToGroup (const gname: AnsiString; cidx: LayControlIdx; gidx: Integer);
var
f: Integer;
+ gflg: LongWord;
begin
if (Length(gname) = 0) then exit;
assert((cidx >= 0) and (cidx < Length(ctlist)));
assert((gidx = 0) or (gidx = 1));
- ctlist[cidx].flags := ctlist[cidx].flags or FlagInGroup;
+ if (gidx = 0) then gflg := FlagInGroupH else gflg := FlagInGroupV;
+ ctlist[cidx].flags := ctlist[cidx].flags or gflg;
for f := 0 to High(groups[gidx]) do
begin
if (groups[gidx][f].name = gname) then
end;
+procedure TFlexLayouterBase.clearGroups ();
+var
+ gidx, f: Integer;
+begin
+ for gidx := 0 to 1 do
+ begin
+ for f := 0 to High(groups[gidx]) do groups[gidx][f].ctls := nil;
+ groups[gidx] := nil;
+ end;
+end;
+
+
procedure TFlexLayouterBase.setupGroups ();
var
- idx: Integer;
+ gflg: LongWord;
+ idx, gidx, f, c: Integer;
lc: PLayControl;
begin
+ clearGroups();
for idx := 0 to High(ctlist) do
begin
lc := @ctlist[idx];
appendToGroup(lc.ctl.getHGroup, LayControlIdx(idx), 0);
appendToGroup(lc.ctl.getVGroup, LayControlIdx(idx), 1);
end;
+ // if control is only one in a group, mark is as "not grouped"
+ for gidx := 0 to 1 do
+ begin
+ if (gidx = 0) then gflg := not LongWord(FlagInGroupH) else gflg := not LongWord(FlagInGroupV);
+ f := 0;
+ while (f < Length(groups[gidx])) do
+ begin
+ if (Length(groups[gidx][f].ctls) < 2) then
+ begin
+ // unmark controls
+ for c := 0 to High(groups[gidx][f].ctls) do
+ begin
+ lc := @ctlist[groups[gidx][f].ctls[c]];
+ lc.flags := lc.flags and gflg;
+ end;
+ // remove this group
+ groups[gidx][f].ctls := nil;
+ for c := f+1 to High(groups[gidx]) do groups[gidx][c-1] := groups[gidx][c];
+ c := High(groups[gidx]);
+ groups[gidx][c].ctls := nil;
+ SetLength(groups[gidx], c);
+ end
+ else
+ begin
+ Inc(f);
+ end;
+ end;
+ end;
end;
ctlist[0].myidx := 0;
ctlist[0].ctl := root;
doChildren(0, root.firstChild);
- setupGroups();
except
clear();
raise;
gtype: Integer;
begin
groupElementChanged := false;
+ setupGroups();
for f := 0 to High(ctlist) do firstTimeSetup(f);
// if we have any groups, set "group element changed" flag, so third pass will fix 'em
for gtype := 0 to 1 do
// relayout children if size was changed
if (not osz.equals(lc.desiredsize)) then
begin
- if (lc.inGroup) then groupElementChanged := true;
+ if (lc.inGroup(0)) or (lc.inGroup(1)) then groupElementChanged := true;
layBox(lc.myidx);
end;
end;
if (me.horizBox) then distributeChildren(me.myidx, 0) else distributeChildren(me.myidx, 1);
// relayout children if size was changed
if (osz.equals(me.desiredsize)) then break;
- if (me.inGroup) then groupElementChanged := true;
+ if (me.inGroup(0)) or (me.inGroup(1)) then groupElementChanged := true;
end;
end;
end;
maxsz: Integer;
grp: PLayGroup;
f, c: Integer;
+ maindir: Integer;
cidx: LayControlIdx;
ct: PLayControl;
loopsLeft: Integer = 64;
for f := 0 to High(ctlist) do
begin
ct := @ctlist[f];
- if (ct.inGroup) then
+ if (ct.parent <> -1) then
+ begin
+ if (ctlist[ct.parent].horizBox) then maindir := 0 else maindir := 1;
+ end
+ else
begin
- ct.expand := false; // don't expand grouped controls anymore
- ct.tempFlex := 0; // don't change control size anymore
+ maindir := 0; // arbitrary
end;
+ if (ct.inGroup(maindir)) then ct.tempFlex := 0; // don't change control size anymore
+ if (ct.inGroup(1-maindir)) then ct.expand := false; // don't expand grouped controls anymore
end;
if (not secondAgain) then break;
end;
index 1f08d3a1c8d72184cfe3ee8c688fe6d1d4b9f579..5738b9714eef0086a4b46575e02839596783b244 100644 (file)
fontList[4] := TGxBmpFont.Create('win8', 8, 8, @kgiWFont8[0], @kgiWFont8Wdt[0]);
fontList[5] := TGxBmpFont.Create('win8-prop', 0, 8, @kgiWFont8[0], @kgiWFont8Wdt[0]);
fontList[6] := TGxBmpFont.Create('win14', 8, 14, @kgiFont14[0], @kgiFont14Wdt[0]);
- fontList[7] := TGxBmpFont.Create('win14-prop', 9, 14, @kgiFont14[0], @kgiFont14Wdt[0]);
+ fontList[7] := TGxBmpFont.Create('win14-prop', 0, 14, @kgiFont14[0], @kgiFont14Wdt[0]);
fontList[8] := TGxBmpFont.Create('win16', 8, 16, @kgiFont16[0], @kgiFont16Wdt[0]);
fontList[9] := TGxBmpFont.Create('win16-prop', 0, 16, @kgiFont16[0], @kgiFont16Wdt[0]);
end;
index b520d471ec918c653749986786e3862da6fa31cf..4bda11dff64eda383b349a490aac0b455492bf2b 100644 (file)
@@ -349,7 +349,7 @@ $00,$00,$00,$00,$00,$f0,$60,$60,$7c,$66,$66,$fc,$00,$00,$00,$00,$00,$00,$00,$3c,
$00,$00,$00,$00,$00,$ce,$db,$db,$fb,$db,$db,$ce,$00,$00,$00,$00,$00,$00,$00,$7e,$cc,$cc,$fc,$6c,$cc,$ce,$00,$00);
const kgiFont14Wdt: array[0..256-1] of Byte = (
$00,$08,$08,$07,$07,$08,$08,$24,$08,$16,$08,$07,$16,$07,$08,$08,$07,$07,$16,$16,$08,$07,$07,$16,$16,$16,$07,$07,
-$07,$07,$07,$07,$00,$24,$16,$07,$07,$07,$07,$13,$24,$24,$08,$16,$23,$07,$32,$07,$07,$16,$07,$07,$07,$07,$07,$07,
+$07,$07,$07,$07,$05,$24,$16,$07,$07,$07,$07,$13,$24,$24,$08,$16,$23,$07,$32,$07,$07,$16,$07,$07,$07,$07,$07,$07,
$07,$07,$32,$23,$16,$07,$16,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$24,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,
$16,$07,$07,$07,$07,$16,$07,$24,$07,$24,$07,$08,$23,$07,$07,$07,$07,$07,$06,$07,$07,$24,$16,$07,$24,$07,$07,$07,
$07,$07,$07,$07,$07,$07,$16,$07,$07,$07,$07,$16,$32,$16,$07,$07,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
@@ -509,7 +509,7 @@ $00,$00,$00,$00,$00,$00,$00,$00,$00,$ce,$db,$db,$fb,$db,$db,$ce,$00,$00,$00,$00,
$fc,$6c,$cc,$ce,$00,$00,$00,$00);
const kgiFont16Wdt: array[0..256-1] of Byte = (
$00,$08,$08,$07,$07,$08,$08,$24,$08,$16,$08,$07,$16,$07,$08,$08,$07,$07,$16,$16,$08,$07,$07,$16,$16,$16,$07,$07,
-$07,$07,$07,$07,$00,$24,$16,$07,$07,$07,$07,$13,$24,$24,$08,$16,$23,$07,$32,$07,$07,$16,$07,$07,$07,$07,$07,$07,
+$07,$07,$07,$07,$05,$24,$16,$07,$07,$07,$07,$13,$24,$24,$08,$16,$23,$07,$32,$07,$07,$16,$07,$07,$07,$07,$07,$07,
$07,$07,$32,$23,$16,$07,$16,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$24,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,
$16,$07,$07,$07,$07,$16,$07,$24,$07,$24,$07,$08,$23,$07,$07,$07,$07,$07,$06,$07,$07,$24,$16,$07,$24,$07,$07,$07,
$07,$07,$07,$07,$07,$07,$16,$07,$07,$07,$07,$16,$32,$16,$07,$07,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$7c,$6c,$cc,$00);
const kgiWFont8Wdt: array[0..256-1] of Byte = (
$00,$08,$08,$07,$07,$07,$07,$24,$08,$16,$08,$08,$16,$07,$08,$08,$07,$07,$16,$24,$08,$08,$16,$08,$16,$16,$07,$07,
- $07,$08,$08,$08,$00,$24,$15,$07,$07,$07,$07,$13,$14,$14,$08,$16,$23,$16,$32,$07,$07,$06,$06,$06,$07,$06,$06,$06,
+ $07,$08,$08,$08,$05,$24,$15,$07,$07,$07,$07,$13,$14,$14,$08,$16,$23,$16,$32,$07,$07,$06,$06,$06,$07,$06,$06,$06,
$06,$06,$32,$23,$05,$16,$15,$16,$07,$06,$07,$07,$07,$07,$07,$07,$06,$14,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,
$06,$06,$06,$07,$07,$06,$07,$14,$07,$14,$07,$08,$23,$07,$07,$06,$07,$06,$06,$07,$07,$14,$06,$07,$14,$07,$06,$06,
$07,$07,$07,$06,$06,$07,$06,$07,$07,$06,$06,$06,$32,$06,$07,$07,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,