• Create Account

### #Actualrpiller

Posted 29 October 2013 - 07:37 AM

So  pr = ( pp - pa ) / rv is the equation I'm using to get the (I call x,y unit):

         // this is called from the editor when a control is placed. we pass in the actual pixel x and convert to "units"
private float _SetPixelX(int x, Size res)
{
return (float)(x - GetAnchorPoint(res).X) / (float)res.Height;
}


To convert from units back to pixels for drawing I do the following (which works because it draws fine with default TopLeft anchor):

        protected int XUnitsToPixels(Size res)
{
return GetAnchorPoint(res).X + (int)(X * res.Height);
}


When the user changes the anchor, I convert units (which is what I store) back to pixels using the above function, then using the new anchor values I convert the pixels back to the new units, but it doesn't work using a different anchor. The units end up all over the place.

[EDIT]

Actually initially it works for any anchor. It's when I change anchors that it doesn't end up being the same position after recalcing the units with the new anchor.

inside my Control class

        private Anchors anchor;
public Anchors Anchor
{
get { return anchor; }
set
{
Size res = new Size();

anchor = value;

// get the canvas resolution so we can recalc position
if (OnAnchorChanged != null)
res = OnAnchorChanged(this);

// recalc the pos units to keep the widget in the same location given this new anchor selection
int _x = XUnitsToPixels(res);
int _y = YUnitsToPixels(res);

// x & y are member variables that are in units
x = _SetPixelX(_x, res);
y = _SetPixelY(_y, res);

// need to call this to show the changes by making the canvas redraw the controls
if (OnInvalidated != null)
OnInvalidated(this);
}
}


### #5rpiller

Posted 29 October 2013 - 07:36 AM

So  pr = ( pp - pa ) / rv is the equation I'm using to get the (I call x,y unit):

         // this is called from the editor when a control is placed. we pass in the actual pixel x and convert to "units"
private float _SetPixelX(int x, Size res)
{
return (float)(x - GetAnchorPoint(res).X) / (float)res.Height;
}


To convert from units back to pixels for drawing I do the following (which works because it draws fine with default TopLeft anchor):

        protected int XUnitsToPixels(Size res)
{
return GetAnchorPoint(res).X + (int)(X * res.Height);
}


When the user changes the anchor, I convert units (which is what I store) back to pixels using the above function, then using the new anchor values I convert the pixels back to the new units, but it doesn't work using a different anchor. The units end up all over the place.

[EDIT]

Actually initially it works for any anchor. It's when I change anchors that it doesn't end up being the same position after recalcing the units with the new anchor.

private Anchors anchor;
public Anchors Anchor
{
get { return anchor; }
set
{
Size res = new Size();

anchor = value;

// get the canvas resolution so we can recalc position
if (OnAnchorChanged != null)
res = OnAnchorChanged(this);

// recalc the pos units to keep the widget in the same location given this new anchor selection
int _x = XUnitsToPixels(res);
int _y = YUnitsToPixels(res);

x = _SetPixelX(_x, res);
y = _SetPixelY(_y, res);

// need to call this to show the changes
if (OnInvalidated != null)
OnInvalidated(this);
}
}


### #4rpiller

Posted 29 October 2013 - 05:32 AM

So  pr = ( pp - pa ) / rv is the equation I'm using to get the (I call x,y unit):

         // this is called from the editor when a control is placed. we pass in the actual pixel x and convert to "units"
private float _SetPixelX(int x, Size res)
{
return (float)(x - GetAnchorPoint(res).X) / (float)res.Height;
}


To convert from units back to pixels for drawing I do the following (which works because it draws fine with default TopLeft anchor):

        protected int XUnitsToPixels(Size res)
{
return GetAnchorPoint(res).X + (int)(X * res.Height);
}


When the user changes the anchor, I convert units (which is what I store) back to pixels using the above function, then using the new anchor values I convert the pixels back to the new units, but it doesn't work using a different anchor. The units end up all over the place.

### #3rpiller

Posted 29 October 2013 - 05:31 AM

So  pr = ( pp - pa ) / rv is the equation I'm using to get the (I call x,y unit):

         // this is called from the editor when a control is placed. we pass in the actual pixel x and convert to "units"
private float _SetPixelX(int x, Size res)
{
return (float)(x - GetAnchorPoint(res).X) / (float)res.Height;
}


To convert from units back to pixels for drawing I do the following (which works because it draws fine with default TopLeft anchor):

        protected int XUnitsToPixels(Size res)
{
return GetAnchorPoint(res).X + (int)(X * res.Height);
}


When the user changes the anchor, I convert units (which is what I store) back to pixels using the above function, then using the new anchor values I convert the pixels back to the new units, but it doesn't work using a different anchor. The units end up all over the place.

### #2rpiller

Posted 29 October 2013 - 05:29 AM

So  pr = ( pp - pa ) / rv is the equation I'm using to get the (I call x,y unit):

         // this is called from the editor when a control is placed. we pass in the actual pixel x and convert to "units"
private float _SetPixelX(int x, Size res)
{
return (float)(x - GetAnchorPoint(res).X) / (float)res.Height;
}


To convert from units back to pixels for drawing I do the following:

        protected int XUnitsToPixels(Size res)
{
return GetAnchorPoint(res).X + (int)(X * res.Height);
}


### #1rpiller

Posted 29 October 2013 - 05:27 AM

So  pr = ( pp - pa ) / rv is the equation I'm using to get the (I call x,y unit):

         // this is called from the editor when a control is placed. we pass in the actual pixel x and convert to "units"
private float _SetPixelX(int x, Size res)
{
return (float)(x - GetAnchorPoint(res).X) / (float)res.Height;
}


PARTNERS