DEADSOFTWARE

FlexUI: new look for buttons; more styling options for buttons
authorKetmar Dark <ketmar@ketmar.no-ip.org>
Tue, 3 Oct 2017 14:33:48 +0000 (17:33 +0300)
committerKetmar Dark <ketmar@ketmar.no-ip.org>
Tue, 3 Oct 2017 19:16:22 +0000 (22:16 +0300)
src/flexui/fui_ctls.pas
src/flexui/fui_flexlay.pas
src/flexui/fui_gfx_gl.pas
src/flexui/fui_gfx_gl_fonts.inc

index 7f722fea97090a79a967d319758fefc3e020ea09..797c73fa5ba87a81a31fa5f0a5f7a49e0d0f0842 100644 (file)
@@ -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');
index a941f554dda7c9a76fe95319c90721b4113ebcb3..fc6e93a46e1716382681c2b15784df259b5f1dce 100644 (file)
@@ -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;
index 1f08d3a1c8d72184cfe3ee8c688fe6d1d4b9f579..5738b9714eef0086a4b46575e02839596783b244 100644 (file)
@@ -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;
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,
@@ -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,