<div dir="ltr">G'day Ido & All,<br><br>Perhaps I didn't explain myself correctly. When I said that (in the subject) that I want to improve my unit... what I meant is that I want to optimize my unit so that the graphics are rendered faster. And also possibly stored in a more effective way.<br>
<br>Actually your suggestion (1) "add support for many more languages" is making a false assumption ... actually it doesn't support any particular language per se -- at the moment if you wanted to call it with a string of anglo-saxon characters (e.g. using the alphabet)  in any language then it would display it. It's just a matter of calling it (the appropriate procedure or function) with the string of character codes & characters you want to print. That string of characters could be in any language. Additionally, there's no reason why you couldn't define a different character set (bitmap font), of say, crylic or asian characters (or whatever).<br>
<br>But I think you're missing the point of my unit. My unit is for a retro remake game which displays old fashioned 'chunky' fonts, like an old Commodore PET computer (circa 1977-80), and renders it on a TPaintBox which serves as it's screen (or display) -- but its actually just a window of a form. E.g. it's a RETRO Game... a game designed to have a display looking like an old computer.<br>
<br>I'm really not the slightest bit interested in supporting bidi or Unicode TR { I hope that this doesn't offend you - but I'm just being honest!!! }. I quickly researched what the are, on wiki. That would make my code more complicated and slower. I want to do almost the opposite... e.g. I want to optimize my code and make it render the graphics on the tpaintbox component much quicker. So, basically what I'm saying is that I want to find more efficient ways of storing my bitmap fonts and converting them into font characters. I only have need for LTR direction of drawing the graphics.<br>
<br>If anyone has some more construction feedback, as opposite to your sarcastic reply... then I'd be happy to discuss it... say on the IRC #lazarus-ide channel -- which I've recently discovered & like to use.<br>
<br>*SMILE*<br><br>Fond Regards,<br>             PEW   ;-)))<br>from Hobart, Tasmania, Australia<br><br><div class="gmail_quote">2008/8/14 ik <span dir="ltr"><<a href="mailto:idokan@gmail.com">idokan@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">1. Add support for many more languages.<br>
2. Add bidi and the rest of the Unicode TR (bidi etc).<br>
3. And then ask again :)<br>
<br>
Ido<br>
<br>
2008/8/14 Peter Williams <<a href="mailto:pewtas@gmail.com">pewtas@gmail.com</a>>:<br>
<div><div></div><div class="Wj3C7c">><br>
> Hi All,<br>
><br>
> I'd like some advice about the attached unit, named "uFixedWidthFonts.pas".<br>
> It is designed to read 2-colour bitmaps of font character sets of different<br>
> sizes, from files which are Windowz BMP format. For example,<br>
> "Chars_Lower_8x8.bmp" -- this is a 320 x 56 pixels, 1 layer BMP file, file<br>
> size 2.25 KB. E.g. the BMP file is a 2 colour image of a 256 character<br>
> bitmap, where each character in the BMP file (in this case) is 8x8 pixels.<br>
><br>
> There are 8 BMP files:<br>
><br>
> Chars_Lower_8x8.bmp<br>
> Chars_Lower_16x16.bmp<br>
> Chars_Lower_24x24.bmp<br>
> Chars_Lower_32x32.bmp<br>
> Chars_Upper_8x8.bmp<br>
> Chars_Upper_16x16.bmp<br>
> Chars_Upper_24x24.bmp<br>
> Chars_Upper_32x32.bmp<br>
><br>
> The *Lower* files define the Commodore PET 4032 upper/lower case character<br>
> set & the *Upper* files define the Graphics/Uppercase character set.<br>
><br>
> My main question is: would I be better off using a TImageList?!? Can someone<br>
> please post sample code. Note: I tried to run the TImageList example program<br>
> for Lazarus... it compiles okay... but when run it does not find some of its<br>
> files (BMPs) in the Image sub-folder of the example program. e.g. it gets a<br>
> runtime error.<br>
><br>
> Note that this unit is based strongly on a unit from the Jedi SDL component,<br>
> sample unit for drawing bitmap fonts onto a graphic canvas.<br>
><br>
> At the moment I use statements like this to define the bitmap font (some of<br>
> the code is pasted below):<br>
><br>
> Best Regards & Happy Programming ;-)))<br>
> PEW<br>
><br>
> -----------------<br>
> const<br>
>   Rects_low = 0;<br>
>   Rects_high = 255;<br>
><br>
> type<br>
>   // these lines "borrowed" from SDL.pas<br>
>   SInt16 = smallint;<br>
>   UInt16 = word;<br>
><br>
> // [ALVAROGP] TSDL_Rect converted to class, to avoid warnings<br>
> {<br>
>   PSDL_Rect = ^TSDL_Rect;<br>
>   TSDL_Rect = record<br>
>     x, y: SInt16;<br>
>     w, h: UInt16;<br>
>   end;<br>
> }<br>
>   TSDL_Rect = class<br>
>   public<br>
>     x, y: SInt16;<br>
>     w, h: UInt16;<br>
>   end;<br>
><br>
>   // end lines from SDL<br>
><br>
>   PFixedFont = ^TFixedFont;<br>
>   TFixedFont = object<br>
>   private<br>
>     Image: TBitmap;<br>
> // [ALVAROGP] Rects redefined as array of class TSDL_Rect<br>
> {<br>
>     Rects: array[Rects_low..Rects_high] of PSDL_Rect;<br>
> }<br>
>     Rects: array[Rects_low..Rects_high] of TSDL_Rect;<br>
>   public<br>
>     LastCharacterDefined: byte;<br>
>     TransparentColor,<br>
>       TextColor,<br>
>       BackgroundColor: Tcolor;<br>
>     // this is used only when UseTransparentBackground is false<br>
>     Char_width,<br>
>       Char_height: byte; // default is 8x8<br>
>     ReverseVideo: Boolean; // default =false<br>
>     HorizontalGap: byte;<br>
>     // Horizontal Gap between characters in Pixels -- default =1<br>
>     UseTransparentBackground: Boolean;<br>
><br>
>     constructor Initialize;<br>
>     procedure LoadFont(const Fontfile: string);<br>
>     procedure FreeUpAll;<br>
>     destructor Finalize;<br>
>     procedure WriteText2(x, y: integer; Txt: string; TextLength: cardinal;<br>
>       var PaintBox1: TPaintBox);<br>
>   end;<br>
><br>
> var<br>
>   Font1: PFixedFont;<br>
> -----------------<br>
><br>
> [...snip...]<br>
><br>
> function PSDLRect(aLeft, aTop, aWidth, aHeight: integer): TSDL_Rect;<br>
> var<br>
>   Rect: TSDL_Rect;<br>
> begin<br>
>   Rect := TSDL_Rect.Create;<br>
>   with Rect do<br>
>   begin<br>
>     x := aLeft;<br>
>     y := aTop;<br>
>     w := aWidth;<br>
>     h := aHeight;<br>
>   end;<br>
>   Result := Rect;<br>
> end;<br>
><br>
> {---------------------------------------------------------}<br>
><br>
> constructor TFixedFont.Initialize;<br>
> begin<br>
>   // defaults<br>
>   LastCharacterDefined := 0; // PEW<br>
>   Char_width := 8;<br>
>   Char_height := 8;<br>
>   HorizontalGap := 1; // 1 pixel by default<br>
>   ReverseVideo := False; // off by default<br>
> end;<br>
> {---------------------------------------------------------}<br>
><br>
> procedure TFixedFont.LoadFont(const Fontfile: string);<br>
> var<br>
>   i, x, y: integer;<br>
> begin<br>
>   FreeUpAll;<br>
>   if not fileexists(Fontfile) then<br>
>   begin<br>
>     showmessage('Error: font file does not exist: "' + fontfile + '"');<br>
>     exit;<br>
>   end;<br>
><br>
>   Image := TBitmap.Create;<br>
>   try<br>
>     Image.LoadFromFile(Fontfile);<br>
>   except<br>
>     showmessage('Error: Exception occurred trying to load font file.');<br>
>     exit;<br>
>   end;<br>
><br>
>   if Image = nil then<br>
>     exit;<br>
>   x := 0;<br>
>   y := 0;<br>
>   i := Rects_low;<br>
>   repeat<br>
>     if x >= Image.width then<br>
>       break;<br>
><br>
>     Rects[i] := PSDLRect(x, y, Char_width, Char_height);<br>
><br>
>     LastCharacterDefined := i; // PEW<br>
>     inc(i);<br>
>     inc(x, Char_width);<br>
>     if x >= Image.width then<br>
>     begin<br>
>       // font bitmap is a block of characters, so if we go past<br>
>       // the end of bitmap, then go down to next row of characters.<br>
>       x := 0;<br>
>       inc(y, Char_height);<br>
>     end;<br>
><br>
>   until (y >= Image.height) or (i > Rects_High);<br>
>   // Determine the transparent color<br>
>   TransparentColor := Image.Canvas.Pixels[Rects[Rects_low].x +<br>
>     Rects[Rects_low].w, 0];<br>
><br>
>   UseTransparentBackground := true; // default<br>
> end;<br>
> {---------------------------------------------------------}<br>
><br>
><br>
> --<br>
> Fond Regards,<br>
> Peter Eric (aka 'pew') WILLIAMS<br>
> from Hobart, Tasmania, Australia -- phone (03) 6236-9675<br>
><br>
> My free website is: <a href="http://pewtas.googlepages.com" target="_blank">http://pewtas.googlepages.com</a> (or)<br>
> <a href="http://tinyurl.com/yuyejs" target="_blank">http://tinyurl.com/yuyejs</a><br>
><br>
> (please visit my free website and let me know what you think about it.)<br>
><br>
</div></div>> _______________________________________________<br>
> Lazarus mailing list<br>
> <a href="mailto:Lazarus@lazarus.freepascal.org">Lazarus@lazarus.freepascal.org</a><br>
> <a href="http://www.lazarus.freepascal.org/mailman/listinfo/lazarus" target="_blank">http://www.lazarus.freepascal.org/mailman/listinfo/lazarus</a><br>
><br>
><br>
<font color="#888888"><br>
<br>
<br>
--<br>
<a href="http://ik.homelinux.org/" target="_blank">http://ik.homelinux.org/</a><br>
_______________________________________________<br>
Lazarus mailing list<br>
<a href="mailto:Lazarus@lazarus.freepascal.org">Lazarus@lazarus.freepascal.org</a><br>
<a href="http://www.lazarus.freepascal.org/mailman/listinfo/lazarus" target="_blank">http://www.lazarus.freepascal.org/mailman/listinfo/lazarus</a><br>
</font></blockquote></div><br><br clear="all"><br>-- <br>Fond Regards,<br>Peter Eric (aka 'pew') WILLIAMS <br>from Hobart, Tasmania, Australia -- phone (03) 6236-9675<br><br>My free website is: <a href="http://pewtas.googlepages.com">http://pewtas.googlepages.com</a> (or) <a href="http://tinyurl.com/yuyejs">http://tinyurl.com/yuyejs</a><br>
<br>(please visit my free website and let me know what you think about it.)<br>
</div>