[fpc-devel] Slight calculation error in Bounds() procedure in Classes unit.
Aleksa Todorovic
alexione at gmail.com
Wed Jun 9 12:08:37 CEST 2010
On Wed, Jun 9, 2010 at 11:30, Graeme Geldenhuys <graemeg.lists at gmail.com> wrote:
> Op 2010-06-09 11:02, Florian Klaempfl het geskryf:
>> interpretation of bounds, the current behaviour is perfectly valid for
>> any other uses.
>
> Not as I see it, and described in the bug report. Think of the pixel
> screen/grid like the grid of a spreadsheet (as as a magnified look of the
> top corner of your screen)
>
> 0 1
> +---+---+---
> 0 | x | |
> +-+-+---+---
> 1 | | |
> +-+-+---+---
> 2 | | |
> +-+-+---+---
>
>
> x is at (0,0). A pixel is always 1x1, you don't get smaller (we are not
> using sub-pixels like on LCD screens, because they don't apply to all
> screens).
>
> So with that example, Width = 1 pixel and Height = 1 pixel. In the case of
> Classes.Bounds() the Right and Bottom values are (1,1) which looking at the
> above image will be wrong, the pixel only covers one block, so in a
> screen/pixel environment, Right, Bottom is also (0,0), the same as Top/Left.
>
>
> 0 1
> +---+---+---
> 0 | x | x |
> +-+-+---+---
> 1 | x | x |
> +-+-+---+---
> 2 | | |
> +-+-+---+---
>
> In this example we have a rectangle. Top/Left = (0,0) and Bottom/Right =
> (1,1). This means Width = 2 pixels and Height = 2 pixels. Clearly visible
> in the image above.
>
> But if we call Classes.Bounds(0,0,2,2) it reports Bottom/Right as (2,2)
> which is wrong (again looking at the image above as reference). This is my
> point. Bounds() cannot be used in this case in a graphical environment.
Actually, everything works fine here :-) You just have to change your
point of view regarding coordinates. You assume that integer
coordinates represent center of pixel, but they actually represent
top-left corner of pixel. In other words, think of coordinate 0 as
0.0, not 0.5 and the math will work perfectly fine :-)
>
>
> The reason I don't use a grid layout as below (as Mattias hinted at), is
> because if the mouse is over the x, the OS (graphics system) reports its
> position as (0,0). You don't have to have the mouse pointer over the
> cross-section lines (0,0) as indicated in the image below. The whole square
> containing the x is referenced as (0,0), hence my grid layout as show in
> the images above. The same grid layout as used in TStringGrid or a
> spreadsheet etc.
>
> 0 1
> 0 +---+---+---
> | x | |
> 1 +-+-+---+---
> | | |
> 2 +-+-+---+---
> | | |
> 3 +-+-+---+---
>
>
>
> Regards,
> - Graeme -
>
> --
> fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
> http://opensoft.homeip.net/fpgui/
>
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>
--
Aleksa Todorovic - Lead Programmer
Eipix Entertainment
www eipix com
More information about the fpc-devel
mailing list