static IntPtr mask(IntPtr Self, IntPtr Args) { Ruby.Array.Expect(Args, 2, 3, 4, 5); odl.Bitmap result = null; long len = Ruby.Array.Length(Args); if (len == 2) { Ruby.Array.Expect(Args, 0, "Bitmap"); Ruby.Array.Expect(Args, 1, "Bitmap"); GuardDisposed(Ruby.Array.Get(Args, 0)); GuardDisposed(Ruby.Array.Get(Args, 1)); odl.Bitmap maskbmp = BitmapDictionary[Ruby.Array.Get(Args, 0)]; odl.Bitmap srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 1)]; result = odl.Bitmap.Mask(maskbmp, srcbmp); } else if (len == 3) { Ruby.Array.Expect(Args, 0, "Bitmap"); Ruby.Array.Expect(Args, 1, "Bitmap"); Ruby.Array.Expect(Args, 2, "Rect"); GuardDisposed(Ruby.Array.Get(Args, 0)); GuardDisposed(Ruby.Array.Get(Args, 1)); odl.Bitmap maskbmp = BitmapDictionary[Ruby.Array.Get(Args, 0)]; odl.Bitmap srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 1)]; odl.Rect srcrect = Rect.CreateRect(Ruby.Array.Get(Args, 2)); result = odl.Bitmap.Mask(maskbmp, srcbmp, srcrect); } else if (len == 4) { Ruby.Array.Expect(Args, 0, "Bitmap"); Ruby.Array.Expect(Args, 1, "Bitmap"); Ruby.Array.Expect(Args, 2, "Integer"); Ruby.Array.Expect(Args, 3, "Integer"); GuardDisposed(Ruby.Array.Get(Args, 0)); GuardDisposed(Ruby.Array.Get(Args, 1)); odl.Bitmap maskbmp = BitmapDictionary[Ruby.Array.Get(Args, 0)]; odl.Bitmap srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 1)]; int offsetx = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 2)); int offsety = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 3)); result = odl.Bitmap.Mask(maskbmp, srcbmp, offsetx, offsety); } else if (len == 5) { Ruby.Array.Expect(Args, 0, "Bitmap"); Ruby.Array.Expect(Args, 1, "Bitmap"); Ruby.Array.Expect(Args, 2, "Rect"); Ruby.Array.Expect(Args, 3, "Integer"); Ruby.Array.Expect(Args, 4, "Integer"); GuardDisposed(Ruby.Array.Get(Args, 0)); GuardDisposed(Ruby.Array.Get(Args, 1)); odl.Bitmap maskbmp = BitmapDictionary[Ruby.Array.Get(Args, 0)]; odl.Bitmap srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 1)]; odl.Rect srcrect = Rect.CreateRect(Ruby.Array.Get(Args, 2)); int offsetx = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 3)); int offsety = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 4)); result = odl.Bitmap.Mask(maskbmp, srcbmp, srcrect, offsetx, offsety); } return(Bitmap.CreateBitmap(result)); }
public static IntPtr CreateBitmap(odl.Bitmap Bitmap) { IntPtr bmp = Ruby.Class.Allocate(Class); Ruby.SetIVar(bmp, "@width", Ruby.Integer.ToPtr(Bitmap.Width)); Ruby.SetIVar(bmp, "@height", Ruby.Integer.ToPtr(Bitmap.Height)); Ruby.SetIVar(bmp, "@autolock", Ruby.True); Ruby.SetIVar(bmp, "@font", Font.CreateFont()); if (BitmapDictionary.ContainsKey(bmp)) { BitmapDictionary[bmp].Dispose(); BitmapDictionary.Remove(bmp); } BitmapDictionary.Add(bmp, Bitmap); return(bmp); }
static IntPtr initialize(IntPtr Self, IntPtr Args) { Ruby.Array.Expect(Args, 1, 2, 3, 4); odl.Bitmap bmp = null; long len = Ruby.Array.Length(Args); if (len == 1) { if (Ruby.Array.Is(Args, 0, "Bitmap")) { bmp = BitmapDictionary[Ruby.Array.Get(Args, 0)]; } else { Ruby.Array.Expect(Args, 0, "String"); bmp = new odl.Bitmap(Ruby.String.FromPtr(Ruby.Array.Get(Args, 0))); } } else if (len == 2) { Ruby.Array.Expect(Args, 0, "Integer"); Ruby.Array.Expect(Args, 1, "Integer"); bmp = new odl.Bitmap((int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 0)), (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 1))); } else if (len == 3 || len == 4) { Ruby.Array.Expect(Args, 0, "Array"); Ruby.Array.Expect(Args, 1, "Integer"); Ruby.Array.Expect(Args, 2, "Integer"); if (len == 4) { Ruby.Array.Expect(Args, 3, "TrueClass", "FalseClass"); } IntPtr pixelarray = Ruby.Array.Get(Args, 0); long pixellen = Ruby.Array.Length(pixelarray); byte[] bytearray = new byte[pixellen]; bool validate = len == 3 || Ruby.Array.Get(Args, 3) == Ruby.True; for (int i = 0; i < pixellen; i++) { if (validate) { Ruby.Array.Expect(pixelarray, i, "Integer"); } bytearray[i] = (byte)Ruby.Integer.FromPtr(Ruby.Array.Get(pixelarray, i)); } int width = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 1)); int height = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 2)); bmp = new odl.Bitmap(bytearray, width, height); } Ruby.SetIVar(Self, "@width", Ruby.Integer.ToPtr(bmp.Width)); Ruby.SetIVar(Self, "@height", Ruby.Integer.ToPtr(bmp.Height)); Ruby.SetIVar(Self, "@autolock", Ruby.True); Ruby.SetIVar(Self, "@font", Font.CreateFont()); if (BitmapDictionary.ContainsKey(Self)) { BitmapDictionary[Self].Dispose(); BitmapDictionary.Remove(Self); } BitmapDictionary.Add(Self, bmp); return(Self); }
static IntPtr blt(IntPtr Self, IntPtr Args) { GuardDisposed(Self); Ruby.Array.Expect(Args, 1, 3, 4, 6, 9); int dx = 0, dy = 0, dw = 0, dh = 0; odl.Bitmap srcbmp = null; int sx = 0, sy = 0, sw = 0, sh = 0; long len = Ruby.Array.Length(Args); if (len == 1) // bmp { Ruby.Array.Expect(Args, 0, "Bitmap"); srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 0)]; dw = srcbmp.Width; dh = srcbmp.Height; sw = srcbmp.Width; sh = srcbmp.Height; } else if (len == 3) // destrect, bmp, srcrect { Ruby.Array.Expect(Args, 0, "Rect"); Ruby.Array.Expect(Args, 1, "Bitmap"); Ruby.Array.Expect(Args, 2, "Rect"); if (Ruby.IVarIs(Ruby.Array.Get(Args, 0), "@x", "Float")) { dx = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@x")); } else { dx = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@x")); } if (Ruby.IVarIs(Ruby.Array.Get(Args, 0), "@y", "Float")) { dy = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@y")); } else { dy = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@y")); } if (Ruby.IVarIs(Ruby.Array.Get(Args, 0), "@width", "Float")) { dw = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@width")); } else { dw = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@width")); } if (Ruby.IVarIs(Ruby.Array.Get(Args, 0), "@height", "Float")) { dh = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@height")); } else { dh = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@height")); } srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 1)]; if (Ruby.IVarIs(Ruby.Array.Get(Args, 2), "@x", "Float")) { sx = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@x")); } else { sx = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@x")); } if (Ruby.IVarIs(Ruby.Array.Get(Args, 2), "@y", "Float")) { sy = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@y")); } else { sy = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@y")); } if (Ruby.IVarIs(Ruby.Array.Get(Args, 2), "@width", "Float")) { sw = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@width")); } else { sw = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@width")); } if (Ruby.IVarIs(Ruby.Array.Get(Args, 2), "@height", "Float")) { sh = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@height")); } else { sh = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@height")); } } else if (len == 4) // dx, dy, bmp, srcrect { Ruby.Array.Expect(Args, 0, "Integer"); Ruby.Array.Expect(Args, 1, "Integer"); Ruby.Array.Expect(Args, 2, "Bitmap"); Ruby.Array.Expect(Args, 3, "Rect"); dx = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 0)); dy = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 1)); srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 2)]; if (Ruby.IVarIs(Ruby.Array.Get(Args, 3), "@x", "Float")) { sx = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@x")); } else { sx = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@x")); } if (Ruby.IVarIs(Ruby.Array.Get(Args, 3), "@y", "Float")) { sy = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@y")); } else { sy = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@y")); } if (Ruby.IVarIs(Ruby.Array.Get(Args, 3), "@width", "Float")) { sw = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@width")); } else { sw = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@width")); } if (Ruby.IVarIs(Ruby.Array.Get(Args, 3), "@height", "Float")) { sh = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@height")); } else { sh = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@height")); } dw = sw; dh = sh; } else if (len == 6) // dx, dy, dw, dh, bmp, srcrect { Ruby.Array.Expect(Args, 0, "Integer"); Ruby.Array.Expect(Args, 1, "Integer"); Ruby.Array.Expect(Args, 2, "Integer"); Ruby.Array.Expect(Args, 3, "Integer"); Ruby.Array.Expect(Args, 4, "Bitmap"); Ruby.Array.Expect(Args, 5, "Rect"); dx = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 0)); dy = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 1)); dw = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 2)); dh = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 3)); srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 4)]; if (Ruby.IVarIs(Ruby.Array.Get(Args, 5), "@x", "Float")) { sx = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@x")); } else { sx = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@x")); } if (Ruby.IVarIs(Ruby.Array.Get(Args, 5), "@y", "Float")) { sy = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@y")); } else { sy = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@y")); } if (Ruby.IVarIs(Ruby.Array.Get(Args, 5), "@width", "Float")) { sw = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@width")); } else { sw = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@width")); } if (Ruby.IVarIs(Ruby.Array.Get(Args, 5), "@height", "Float")) { sh = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@height")); } else { sh = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@height")); } } else if (len == 9) // dx, dy, dw, dh, bmp, sx, sy, sw, sh { Ruby.Array.Expect(Args, 0, "Integer"); Ruby.Array.Expect(Args, 1, "Integer"); Ruby.Array.Expect(Args, 2, "Integer"); Ruby.Array.Expect(Args, 3, "Integer"); Ruby.Array.Expect(Args, 4, "Bitmap"); Ruby.Array.Expect(Args, 5, "Integer"); Ruby.Array.Expect(Args, 6, "Integer"); Ruby.Array.Expect(Args, 7, "Integer"); Ruby.Array.Expect(Args, 8, "Integer"); dx = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 0)); dy = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 1)); dw = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 2)); dh = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 3)); srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 4)]; sx = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 5)); sy = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 6)); sw = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 7)); sh = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 8)); } AutoUnlock(Self); BitmapDictionary[Self].Build(dx, dy, dw, dh, srcbmp, sx, sy, sw, sh); AutoLock(Self); return(Ruby.True); }