From 4eb0c3143f39926323e44d590cae60131d11001e Mon Sep 17 00:00:00 2001 From: Ketmar Dark Date: Tue, 3 Oct 2017 17:33:48 +0300 Subject: [PATCH] FlexUI: new look for buttons; more styling options for buttons --- src/flexui/fui_ctls.pas | 270 +++++++++++++++++++++++++++++--- src/flexui/fui_flexlay.pas | 77 +++++++-- src/flexui/fui_gfx_gl.pas | 2 +- src/flexui/fui_gfx_gl_fonts.inc | 6 +- 4 files changed, 317 insertions(+), 38 deletions(-) diff --git a/src/flexui/fui_ctls.pas b/src/flexui/fui_ctls.pas index 7f722fe..797c73f 100644 --- a/src/flexui/fui_ctls.pas +++ b/src/flexui/fui_ctls.pas @@ -64,6 +64,7 @@ type mCancel: Boolean; mDefault: Boolean; // colors + mStyleLoaded: Boolean; mCtl4Style: AnsiString; mBackColor: array[0..ClrIdxMax] of TGxRGBA; mTextColor: array[0..ClrIdxMax] of TGxRGBA; @@ -437,18 +438,42 @@ type // ////////////////////////////////////////////////////////////////////// // 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 @@ -624,6 +649,7 @@ begin 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); @@ -804,7 +830,7 @@ begin 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; @@ -890,6 +916,7 @@ begin mCtl4Style := ''; mAlign := -1; // left/top mExpand := false; + mStyleLoaded := false; end; @@ -948,6 +975,7 @@ begin if (stl = nil) then stl := uiFindStyle(''); // default cacheStyle(stl); for ctl in mChildren do ctl.updateStyle(); + mStyleLoaded := true; end; procedure TUIControl.cacheStyle (root: TUIStyle); @@ -1010,7 +1038,7 @@ end; 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; @@ -2931,51 +2959,178 @@ 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; @@ -2989,13 +3144,16 @@ begin 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; @@ -3015,6 +3173,75 @@ begin 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 @@ -3256,6 +3483,7 @@ initialization registerCtlClass(TUILine, 'line'); registerCtlClass(TUITextLabel, 'label'); registerCtlClass(TUIStaticText, 'static'); + registerCtlClass(TUIButtonRound, 'round-button'); registerCtlClass(TUIButton, 'button'); registerCtlClass(TUICheckBox, 'checkbox'); registerCtlClass(TUIRadioBox, 'radiobox'); diff --git a/src/flexui/fui_flexlay.pas b/src/flexui/fui_flexlay.pas index a941f55..fc6e93a 100644 --- a/src/flexui/fui_flexlay.pas +++ b/src/flexui/fui_flexlay.pas @@ -59,7 +59,8 @@ type 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 @@ -85,7 +86,7 @@ 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; @@ -121,6 +122,7 @@ type 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); @@ -185,7 +187,7 @@ begin 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; @@ -272,9 +274,8 @@ end; procedure TFlexLayouterBase.clear (); begin + clearGroups(); ctlist := nil; - groups[0] := nil; - groups[1] := nil; end; @@ -314,11 +315,13 @@ 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 @@ -337,17 +340,59 @@ begin 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; @@ -363,7 +408,6 @@ begin ctlist[0].myidx := 0; ctlist[0].ctl := root; doChildren(0, root.firstChild); - setupGroups(); except clear(); raise; @@ -407,6 +451,7 @@ var 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 @@ -519,7 +564,7 @@ begin // 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; @@ -547,7 +592,7 @@ begin 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; @@ -560,6 +605,7 @@ var maxsz: Integer; grp: PLayGroup; f, c: Integer; + maindir: Integer; cidx: LayControlIdx; ct: PLayControl; loopsLeft: Integer = 64; @@ -599,11 +645,16 @@ begin 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; diff --git a/src/flexui/fui_gfx_gl.pas b/src/flexui/fui_gfx_gl.pas index 1f08d3a..5738b97 100644 --- a/src/flexui/fui_gfx_gl.pas +++ b/src/flexui/fui_gfx_gl.pas @@ -543,7 +543,7 @@ begin 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; diff --git a/src/flexui/fui_gfx_gl_fonts.inc b/src/flexui/fui_gfx_gl_fonts.inc index b520d47..4bda11d 100644 --- a/src/flexui/fui_gfx_gl_fonts.inc +++ b/src/flexui/fui_gfx_gl_fonts.inc @@ -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, @@ -596,7 +596,7 @@ const kgiWFont8: array[0..256*8-1] of Byte = ( $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, -- 2.29.2