Re: [fpc-pascal] X, Y co-ordinate system under OS/2

2009-10-29 Thread Graeme Geldenhuys
On 29/10/2009, Juha Manninen juha.manni...@phnet.fi wrote:

 If done right, the code doing coordinate conversion should be in library
  Canvas class, not in application code.

That's how I would have implemented in it fpGUI as well. The higher
level code uses x, y as normal. The drawing backend code does
conversions if needed.

That's how I handle differences between Windows GDI API and XLib API.

-- 
Regards,
  - Graeme -


___
fpGUI - a cross-platform Free Pascal GUI toolkit
http://opensoft.homeip.net/fpgui/
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] X, Y co-ordinate system under OS/2

2009-10-28 Thread Paul Nicholls
- Original Message - 
From: Graeme Geldenhuys graemeg.li...@gmail.com

To: FPC-Pascal users discussions fpc-pascal@lists.freepascal.org
Sent: Thursday, October 08, 2009 1:31 AM
Subject: [fpc-pascal] X, Y co-ordinate system under OS/2



Hi,

I'm porting an OS/2 application to Linux  Windows.  From what I can
see in the code, it looks like co-ordinates (0,0) is in the bottom
left corner of the screen. Whereas Windows and Linux, co-ordinates
(0,0) is in the Top Left of the screen.

Is my assumption correct?  If so, DAMN! This is going to cause a lot
of work. :-/


Regards,
 - Graeme -


Hi Graeme, I know this is a oldish post, but I had some thoughts on this 
just today :)


I'm making a simple GUI system for a game, and I needed to have screen 
origin independant input coordinates for the GUI (simpler to think about 
when using), and can be used in different world coordinate systems.


So, I have this in my GUI class:

properties
--
FOriginX : Integer;  // is the screen's top-left coordinate in final 'world' 
coordiantes

FOriginY : Integer;
FDownDir : Integer;  // is either +1, or -1 (+1 for world y coordinates 
increasing downwards, and -1 for increasing upwards


methods
-
Function  TIMGUI.ScreenToWorldX(Const sx : Integer) : Integer;
Begin
   Result := FOriginX + sx;
End;
{..}

{..}
Function  TIMGUI.ScreenToWorldY(Const sy : Integer) : Integer;
Begin
   Result := FOriginY + sy * FDownDir;
End;

with the GUI screen, I assume that the top left is 0,0 and the bottom right 
is (width,height) just like in windows.


Now if I want to draw a button, I just do this:

(x,y)
   +---+
   |   |
   |   |
   +---+
   (x+w,y+h)

Procedure FIMGUI.DrawRadioButton(x,y,w,h : Integer; text : AnsiString);
Begin
   mx := x + h Div 2;
   my := y + h Div 2;
   r  := h Div 2;

   x1 := ScreenToWorldX(mx-r);
   y1 := ScreenToWorldY(my-r);

   x2 := ScreenToWorldX(mx+r);
   y2 := ScreenToWorldY(my+r);
{...}
   // radio button background
   DrawRoundedRect(x1,y1,
   x2,y2,
   0,r,cLineWidth,
   FBackgroundColor.r,
   FBackgroundColor.g,
   FBackgroundColor.b,
   FBackgroundColor.a,
   True,5);

   // radio button border
   DrawRoundedRect(x1,y1,
   x2,y2,
   0,r,cLineWidth,
   FBorderColor.r,
   FBorderColor.g,
   FBorderColor.b,
   FBorderColor.a,
   False,5);

   r := Trunc(r * 0.65);

   x1 := ScreenToWorldX(mx-r);
   y1 := ScreenToWorldY(my-r);

   x2 := ScreenToWorldX(mx+r);
   y2 := ScreenToWorldY(my+r);

   // radio button active dot
   If active Then
   DrawRoundedRect(x1,y1,
   x2,y2,
   0,r,cLineWidth,
   FBorderColor.r,
   FBorderColor.g,
   FBorderColor.b,
   FBorderColor.a,
   True,5);

   If text = ''  Then Exit;
   If font = Nil Then Exit;

   FontH := font.MaxHeight;
   FontX := ScreenToWorldX(x+h+4);
   FontY := ScreenToWorldY(my - FontH Div 2);

   glEnable(GL_TEXTURE_2D);
   If FUIState.HotItem = id Then
   glColor4fv(@FHotColor)
   Else
   glColor4fv(@FFontColor);
   font.Draw(FontX,FontY,text,0);
{...}
End;

I hope this helps?

cheers,
Paul 


___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] X, Y co-ordinate system under OS/2

2009-10-08 Thread Graeme Geldenhuys
2009/10/7 Tomas Hajny xhaj...@mbox.vol.cz:

 Yes, this is the case as far as I know (I haven't done any GUI programming
 under OS/2 myself, but I know that this has always been one of the main
 porting obstacles between Win32 and OS/2 at least).

I suppose I can see the merits for using each of the co-ordinate systems.

Windows  Linux:  Follows the path of how memory is laid out in the
graphics hardware.

OS/2: Follows the path of mathematics.


Either way, I have found numerous errors in my port due to this
unknown by me issue.  :-/


-- 
Regards,
  - Graeme -


___
fpGUI - a cross-platform Free Pascal GUI toolkit
http://opensoft.homeip.net/fpgui/
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] X, Y co-ordinate system under OS/2

2009-10-07 Thread Tomas Hajny
On Wed, October 7, 2009 16:31, Graeme Geldenhuys wrote:


Hi,

 I'm porting an OS/2 application to Linux  Windows.  From what I can
 see in the code, it looks like co-ordinates (0,0) is in the bottom
 left corner of the screen. Whereas Windows and Linux, co-ordinates
 (0,0) is in the Top Left of the screen.

 Is my assumption correct?  If so, DAMN! This is going to cause a lot
 of work. :-/

Yes, this is the case as far as I know (I haven't done any GUI programming
under OS/2 myself, but I know that this has always been one of the main
porting obstacles between Win32 and OS/2 at least).

Tomas


___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal