bool IGraphics::DrawRotatedMask(IBitmap* pIBase, IBitmap* pIMask, IBitmap* pITop, int x, int y, double angle, const IChannelBlend* pBlend) { LICE_IBitmap* pBase = (LICE_IBitmap*) pIBase->mData; LICE_IBitmap* pMask = (LICE_IBitmap*) pIMask->mData; LICE_IBitmap* pTop = (LICE_IBitmap*) pITop->mData; double dA = angle * PI / 180.0; int W = pIBase->W; int H = pIBase->H; // RECT srcR = { 0, 0, W, H }; float xOffs = (W % 2 ? -0.5f : 0.0f); if (!mTmpBitmap) { mTmpBitmap = new LICE_MemBitmap(); } _LICE::LICE_Copy(mTmpBitmap, pBase); _LICE::LICE_ClearRect(mTmpBitmap, 0, 0, W, H, LICE_RGBA(255, 255, 255, 0)); _LICE::LICE_RotatedBlit(mTmpBitmap, pMask, 0, 0, W, H, 0.0f, 0.0f, (float) W, (float) H, (float) dA, true, 1.0f, LICE_BLIT_MODE_ADD | LICE_BLIT_FILTER_BILINEAR | LICE_BLIT_USE_ALPHA, xOffs, 0.0f); _LICE::LICE_RotatedBlit(mTmpBitmap, pTop, 0, 0, W, H, 0.0f, 0.0f, (float) W, (float) H, (float) dA, true, 1.0f, LICE_BLIT_MODE_COPY | LICE_BLIT_FILTER_BILINEAR | LICE_BLIT_USE_ALPHA, xOffs, 0.0f); IRECT r = IRECT(x, y, x + W, y + H).Intersect(&mDrawRECT); _LICE::LICE_Blit(mDrawBitmap, mTmpBitmap, r.L, r.T, r.L - x, r.T - y, r.R - r.L, r.B - r.T, LiceWeight(pBlend), LiceBlendMode(pBlend)); // ReaperExt::LICE_Blit(mDrawBitmap, mTmpBitmap, x, y, &srcR, LiceWeight(pBlend), LiceBlendMode(pBlend)); return true; }
bool IGraphics::DrawArc(const IColor* pColor, float cx, float cy, float r, float minAngle, float maxAngle, const IChannelBlend* pBlend, bool antiAlias) { _LICE::LICE_Arc(mDrawBitmap, cx, cy, r, minAngle, maxAngle, LiceColor(pColor), LiceWeight(pBlend), LiceBlendMode(pBlend), antiAlias); return true; }
bool IGraphics::FillRoundRect(const IColor* pColor, IRECT* pR, const IChannelBlend* pBlend, int cornerradius, bool aa) { int x1 = pR->L; int y1 = pR->T; int h = pR->H(); int w = pR->W(); int mode = LiceBlendMode(pBlend); float weight = LiceWeight(pBlend); LICE_pixel color = LiceColor(pColor); _LICE::LICE_FillRect(mDrawBitmap, x1+cornerradius, y1, w-2*cornerradius, h, color, weight, mode); _LICE::LICE_FillRect(mDrawBitmap, x1, y1+cornerradius, cornerradius, h-2*cornerradius,color, weight, mode); _LICE::LICE_FillRect(mDrawBitmap, x1+w-cornerradius, y1+cornerradius, cornerradius, h-2*cornerradius, color, weight, mode); //void LICE_FillCircle(LICE_IBitmap* dest, float cx, float cy, float r, LICE_pixel color, float alpha, int mode, bool aa) _LICE::LICE_FillCircle(mDrawBitmap, (float) x1+cornerradius, (float) y1+cornerradius, (float) cornerradius, color, weight, mode, aa); _LICE::LICE_FillCircle(mDrawBitmap, (float) x1+w-cornerradius-1, (float) y1+h-cornerradius-1, (float) cornerradius, color, weight, mode, aa); _LICE::LICE_FillCircle(mDrawBitmap, (float) x1+w-cornerradius-1, (float) y1+cornerradius, (float) cornerradius, color, weight, mode, aa); _LICE::LICE_FillCircle(mDrawBitmap, (float) x1+cornerradius, (float) y1+h-cornerradius-1, (float) cornerradius, color, weight, mode, aa); return true; }
bool IGraphics::DrawRotatedBitmap(IBitmap* pIBitmap, int destCtrX, int destCtrY, double angle, int yOffsetZeroDeg, const IChannelBlend* pBlend) { LICE_IBitmap* pLB = (LICE_IBitmap*) pIBitmap->mData; //double dA = angle * PI / 180.0; // Can't figure out what LICE_RotatedBlit is doing for irregular bitmaps exactly. //double w = (double) bitmap.W; //double h = (double) bitmap.H; //double sinA = fabs(sin(dA)); //double cosA = fabs(cos(dA)); //int W = int(h * sinA + w * cosA); //int H = int(h * cosA + w * sinA); int W = pIBitmap->W; int H = pIBitmap->H; int destX = destCtrX - W / 2; int destY = destCtrY - H / 2; _LICE::LICE_RotatedBlit(mDrawBitmap, pLB, destX, destY, W, H, 0.0f, 0.0f, (float) W, (float) H, (float) angle, false, LiceWeight(pBlend), LiceBlendMode(pBlend) | LICE_BLIT_FILTER_BILINEAR, 0.0f, (float) yOffsetZeroDeg); return true; }
bool IGraphics::FillIConvexPolygon(const IColor* pColor, int* x, int* y, int npoints, const IChannelBlend* pBlend) { _LICE::LICE_FillConvexPolygon(mDrawBitmap, x, y, npoints, LiceColor(pColor), LiceWeight(pBlend), LiceBlendMode(pBlend)); return true; }
bool IGraphics::FillTriangle(const IColor* pColor, int x1, int y1, int x2, int y2, int x3, int y3, IChannelBlend* pBlend) { _LICE::LICE_FillTriangle(mDrawBitmap, x1, y1, x2, y2, x3, y3, LiceColor(pColor), LiceWeight(pBlend), LiceBlendMode(pBlend)); return true; }
bool IGraphics::FillCircle(const IColor* pColor, int cx, int cy, float r, const IChannelBlend* pBlend, bool antiAlias) { _LICE::LICE_FillCircle(mDrawBitmap, (float) cx, (float) cy, r, LiceColor(pColor), LiceWeight(pBlend), LiceBlendMode(pBlend), antiAlias); return true; }
bool IGraphics::FillIRect(const IColor* pColor, IRECT* pR, const IChannelBlend* pBlend) { _LICE::LICE_FillRect(mDrawBitmap, pR->L, pR->T, pR->W(), pR->H(), LiceColor(pColor), LiceWeight(pBlend), LiceBlendMode(pBlend)); return true; }
bool IGraphics::RoundRect(const IColor* pColor, IRECT* pR, const IChannelBlend* pBlend, int cornerradius, bool aa) { _LICE::LICE_RoundRect(mDrawBitmap, (float) pR->L, (float) pR->T, (float) pR->W(), (float) pR->H(), cornerradius, LiceColor(pColor), LiceWeight(pBlend), LiceBlendMode(pBlend), aa); return true; }
bool IGraphics::DrawLine(const IColor* pColor, float x1, float y1, float x2, float y2, const IChannelBlend* pBlend, bool antiAlias) { _LICE::LICE_Line(mDrawBitmap, (int) x1, (int) y1, (int) x2, (int) y2, LiceColor(pColor), LiceWeight(pBlend), LiceBlendMode(pBlend), antiAlias); return true; }
bool IGraphics::DrawPoint(const IColor* pColor, float x, float y, const IChannelBlend* pBlend, bool antiAlias) { float weight = (pBlend ? pBlend->mWeight : 1.0f); _LICE::LICE_PutPixel(mDrawBitmap, int(x + 0.5f), int(y + 0.5f), LiceColor(pColor), weight, LiceBlendMode(pBlend)); return true; }
bool IGraphics::DrawBitmap(IBitmap* pIBitmap, IRECT* pDest, int srcX, int srcY, const IChannelBlend* pBlend) { LICE_IBitmap* pLB = (LICE_IBitmap*) pIBitmap->mData; IRECT r = pDest->Intersect(&mDrawRECT); srcX += r.L - pDest->L; srcY += r.T - pDest->T; _LICE::LICE_Blit(mDrawBitmap, pLB, r.L, r.T, srcX, srcY, r.W(), r.H(), LiceWeight(pBlend), LiceBlendMode(pBlend)); return true; }
bool IGraphicsLice::DrawCircle(const IColor* pColor, float cx, float cy, float r, const IChannelBlend* pBlend, bool antiAlias) { _LICE::LICE_Circle(mDrawBitmap, cx, cy, r, LiceColor(pColor), LiceWeight(pBlend), LiceBlendMode(pBlend), antiAlias); return true; }