Michael Van Canneyt schrieb: > Is there a reason why the top/left sides are included (>=), and the > left/bottom sides are not included ? I would expect them to be included as > well.
There exist reasons, mostly the definition in the WinAPI. Dunno how to explain the most important reason, but let me try it: Take an arbitrary scale, e.g. for temparatures or dates, and try to map coordinates into differences. Easy? Not really, when you have to work with integral numbers. Do you want to paint points (pixels) *at* given coordinates (tick marks for the scale), or lines (distances) *between* two coordinates? Then you see that you can't do both at once, for a distance of 1 unit (painting: 1 pixel) :-( On a 2D canvas a grid for cells of size=1 (pixel) either would fill the entire area or, when you fill the cells with pixels, there's no room left for grid lines. As a practical compromise a canvas is painted in pixels, i.e. rectangles of size=1, so that a rectangle from (0,0) to (1,1) has a *size* of 1 pixel, and that single pixel is *located* at the coordinates (0,0). Now you see that the end coordinates of a rectangle are *not* part of the area of the rectangle. One should understand that the transformation of rectangles, between origin/extent (XY)-(WH) and TopLeft/BottomRight (TL)-(BR) representation, includes an imaginary shift of half a pixel. I really would appreciate different data types for both representations, instead of the unique TRect record - then it were obvious, that PtInRect works with the (TL)-(BR) representation, and consequently has to exclude the bottom and right values from the area of the rectangle. The same considerations apply to lines, as mentioned above. When the pen is moved to (x0,y0) on a canvas, and then consecutive lines are drawn to (x1,y1) and (x2,y2), the point (x1,y1) is excluded from the first line, and (x2,y2) is excluded from the second line. Nonetheless the pen is *located* at (x2,y2) afterwards. This way one can paint a rectangular border, with a PolyLine(T,L, T,R, B,R, B,L, T,L), without repainting the edges of the rectangle. When the lines are painted in different colors, the end points are painted in the color of the *next* line. Imagine how complicated were the calculation of the "real" (not excluded) end points of a series of lines, when arbitrary world-coordinates are used, expressed in something different from integral pixel coordinates. HTH DoDi _______________________________________________ Lazarus mailing list [email protected] http://www.lazarus.freepascal.org/mailman/listinfo/lazarus
