public static void FillEllipsis(CGContext context, RectangleF rect, CGColor color, float lineWidth) { context.SaveState(); context.SetFillColor(color); context.AddEllipseInRect(rect); context.FillPath(); context.RestoreState(); }
public override void DrawInContext (CGContext context) { base.DrawInContext (context); context.AddEllipseInRect (Bounds); context.SetFillColor (ClockColor); context.FillPath (); }
public static void FillRect(CGContext context, RectangleF rect, CGColor color) { context.SaveState(); context.AddRect(rect); context.Clip(); context.SetFillColor(color); context.FillRect(rect); context.RestoreState(); }
void RenderPixels(CGContext context, int x, int y, Edge edge32, Edge edge13, Edge edge21, int w1, int w2, int w3) { //VertexInterpoliation = A * x + B * y + C; // float alpha = (edge32.A * x + edge32.B * y + edge32.C) * edge32.VertexFactor; // float beta = (edge13.A * x + edge13.B * y + edge13.C) * edge13.VertexFactor; // float gamma = (edge21.A * x + edge21.B * y + edge21.C) * edge21.VertexFactor; // Determine barycentric coordinates float alpha = (float)(w1 * edge32.VertexFactor); float beta = (float)(w2 * edge13.VertexFactor); float gamma = (float)(w3 * edge21.VertexFactor); GradientLerp3 (alpha, beta, gamma); // Set the color context.SetFillColor (colorOutput [0], colorOutput [1], colorOutput [2], colorOutput [3]); // Set our pixel location pixelRect.X = x; pixelRect.Y = y; // Fill the pixel context.FillRect (pixelRect); }
void HatchDottedDiamond(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, false); /* draw background */ drawBackground (context, backColor, hatchWidth, hatchHeight); /* draw lines in the foreground color */ context.SetFillColor(foreColor.ToCGColor()); context.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); float halfMe = hatchWidth / 2.0f; float quarter = halfMe / 2.0f; // this is really just 6 dots that when tiled will // create the effect we are looking for RectangleF rect = new RectangleF(0,0,1,1); setPixels(context, rect); rect.Y = halfMe; setPixels(context, rect); rect.X = halfMe; setPixels(context, rect); rect.Y = 0; setPixels(context, rect); rect.X = quarter; rect.Y = quarter; setPixels(context, rect); rect.X = halfMe + quarter; rect.Y = halfMe + quarter; setPixels(context, rect); }
void HatchDivot(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, false); /* draw background */ drawBackground (context, backColor, hatchWidth, hatchHeight); /* draw lines in the foreground color */ context.SetFillColor(foreColor.ToCGColor()); context.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); float halfMe = hatchWidth / 2.0f; // draw a little wirly thingy RectangleF rect = new RectangleF(0,0,1,1); setPixels(context, rect); rect.X += 1; rect.Y += 1; setPixels(context, rect); rect.X -= 1; rect.Y += 1; setPixels(context, rect); // now top one rect.X = halfMe;// + HALF_PIXEL_X; rect.Y = halfMe;// + HALF_PIXEL_Y; setPixels(context, rect); rect.X -= 1; rect.Y += 1; setPixels(context, rect); rect.X += 1; rect.Y += 1; setPixels(context, rect); }
void HatchConfetti(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, false); /* draw background */ drawBackground (context, backColor, hatchWidth, hatchHeight); /* draw confetti Rectangles in the foreground color */ context.SetFillColor(foreColor.ToCGColor()); RectangleF rect = new RectangleF(0,0,2,2); // Do not see a mathematical equation so will just set // the same ones as in windows pattern. if (hatchStyle == HatchStyle.LargeConfetti) { setPixels(context, rect); rect.X = 2; rect.Y = 2; setPixels(context, rect); rect.X = 5; rect.Y = 1; setPixels(context, rect); rect.X = 6; rect.Y = 4; setPixels(context, rect); rect.X = 4; rect.Y = 6; setPixels(context, rect); rect.X = 1; rect.Y = 5; setPixels(context, rect); } else { rect.Width = 1; rect.Height = 1; setPixels(context, rect); rect.X = 3; rect.Y = 1; setPixels(context, rect); rect.X = 6; rect.Y = 2; setPixels(context, rect); rect.X = 2; rect.Y = 3; setPixels(context, rect); rect.X = 7; rect.Y = 4; setPixels(context, rect); rect.X = 4; rect.Y = 5; setPixels(context, rect); rect.X = 1; rect.Y = 6; setPixels(context, rect); rect.X = 5; rect.Y = 7; setPixels(context, rect); } }
void HatchCheckered(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, false); /* draw background */ drawBackground (context, backColor, hatchWidth, hatchHeight); context.SetFillColor(foreColor.ToCGColor()); RectangleF rect = new RectangleF(0,0,hatchWidth / 2.0f,hatchHeight / 2.0f); setPixels(context, rect); rect.X = hatchWidth / 2.0f; rect.Y = hatchHeight / 2.0f; setPixels(context, rect); }
void HatchPlaid(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, false); /* draw background */ drawBackground (context, backColor, hatchWidth, hatchHeight); /* draw lines in the foreground color */ context.SetFillColor(foreColor.ToCGColor()); context.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); float halfMe = hatchWidth / 2.0f; RectangleF rect = new RectangleF(0,0,1,1); // fraw the alternating pattern for half of area int x = 0; int y = 0; for (y = 0; y<halfMe; y+=2) { for (x = 1; x < hatchWidth; x+=2) { rect.X = x; rect.Y = y; setPixels(context, rect); } } for (y = 1; y<halfMe; y+=2) { for (x = 0; x < hatchWidth; x+=2) { rect.X = x; rect.Y = y; setPixels(context, rect); } } // draw a square rect.X = 0; rect.Y = halfMe; rect.Width = halfMe; rect.Height = halfMe; setPixels(context, rect); }
/** * Percentage patterns were obtained by creating a screen shot from a windows fill * and looking at the patterns at the pixel level. A little tedious to say the least * but they do seem correct and recreate the same pattern from windows to here. */ protected void HatchPercentage(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, false); /* some patterns require us to reverse the colors */ switch (hatchStyle) { case HatchStyle.Percent05: case HatchStyle.Percent10: case HatchStyle.Percent20: case HatchStyle.Percent25: case HatchStyle.Percent30: drawBackground (context, backColor, hatchWidth, hatchWidth); context.SetFillColor(foreColor.ToCGColor()); break; default: drawBackground (context, foreColor, hatchWidth, hatchWidth); context.SetFillColor(backColor.ToCGColor()); break; } // create a work rectangle for setting pixels RectangleF rect = new RectangleF(0,0,1,1); // Only set the pixels for some if (hatchStyle != HatchStyle.Percent50 && hatchStyle != HatchStyle.Percent40 && hatchStyle != HatchStyle.Percent30 && hatchStyle != HatchStyle.Percent60) { rect.X = 0; rect.Y = (int)(hatchHeight / 2.0f); setPixels(context, rect); rect.X = (int)(hatchWidth / 2.0f); rect.Y = 0; setPixels(context, rect); } // 50 and 40 start out the same with a 50 percent if (hatchStyle == HatchStyle.Percent50 || hatchStyle == HatchStyle.Percent40 ) { int x = 0; int y = 0; for (y = 0; y<hatchHeight; y+=2) { for (x = 1; x < hatchWidth; x+=2) { rect.X = x; rect.Y = y; setPixels(context, rect); } } for (y = 1; y<hatchHeight; y+=2) { for (x = 0; x < hatchWidth; x+=2) { rect.X = x; rect.Y = y; setPixels(context, rect); } } // Percent40 is a 50 with two more dots set of back color // within a set area. This creates an interesting effect // of a double plus sign in opposite corners. if (hatchStyle == HatchStyle.Percent40) { rect.X = 1; rect.Y = 1; setPixels(context, rect); rect.X = 5; rect.Y = 5; setPixels(context, rect); } } // Percent30 and Percent60 are really messed up so we will just set some dots // to present the pattern. Percent60 is a 30 with colors reversed, go figure. if (hatchStyle == HatchStyle.Percent30 || hatchStyle == HatchStyle.Percent60) { rect.X = 0; rect.Y = 0; setPixels(context, rect); rect.X = 2; rect.Y = 0; setPixels(context, rect); rect.X = 0; rect.Y = 2; setPixels(context, rect); rect.X = 2; rect.Y = 2; setPixels(context, rect); rect.X = 1; rect.Y = 3; setPixels(context, rect); rect.X = 3; rect.Y = 1; setPixels(context, rect); } }
/** * This is fill of hackish stuff. * Thought this was going to be easier but that just did not work out. **/ protected void HatchSphere(CGContext context) { var hatchSize = getHatchWidth (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchSize, false); /* draw background in fore ground color*/ drawBackground (context, backColor, hatchSize, hatchSize); context.SetStrokeColor(foreColor.ToCGColor()); context.SetFillColor(foreColor.ToCGColor()); context.SetLineWidth(1); context.SetLineCap(CGLineCap.Square); // Initialize work rectangle RectangleF rect = new RectangleF(0,0,1,1); float quad = hatchSize / 2.0f; // Left lower quad rect.Width = quad; rect.Height = quad; rect.X = 0; rect.Y = 0; context.StrokeRect(rect); // right upper quad rect.Width = quad; rect.Height = quad; rect.X = quad; rect.Y = quad; context.StrokeRect(rect); // left upper quad rect.Width = quad; rect.Height = quad; rect.X = 0; rect.Y = quad + 1; context.FillRect(rect); // right lower quod rect.Width = quad; rect.Height = quad; rect.X = quad + 1; rect.Y = 0; context.FillRect(rect); // Now we fill in some corner bits with background // This is a bad hack but now sure what else to do context.SetFillColor(backColor.ToCGColor()); rect.Height = 1; rect.Width = 1; rect.X = 0; rect.Y = 0; setPixels(context, rect); rect.X = 0; rect.Y = quad; setPixels(context, rect); rect.X = 0; rect.Y = quad; setPixels(context, rect); rect.X = quad; rect.Y = 0; setPixels(context, rect); rect.X = quad; rect.Y = quad; setPixels(context, rect); rect.X = quad; rect.Y = hatchSize; setPixels(context, rect); rect.X = hatchSize; rect.Y = 0; setPixels(context, rect); rect.X = hatchSize; rect.Y = quad; setPixels(context, rect); rect.X = hatchSize; rect.Y = hatchSize; setPixels(context, rect); // Now for the fake shiny thingys hack // Probably could use a line here but it is already // so hacky I will just use this. rect.X = 5; rect.Y = 3; setPixels(context, rect); rect.X = 6; rect.Y = 3; setPixels(context, rect); rect.X = 1; rect.Y = 7; setPixels(context, rect); rect.X = 2; rect.Y = 7; setPixels(context, rect); }
void HatchWeave(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, false); /* draw background */ drawBackground (context, backColor, hatchWidth, hatchHeight); /* draw lines in the foreground color */ context.SetFillColor(foreColor.ToCGColor()); /* draw lines in the foreground color */ context.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); float halfWidth = hatchWidth / 2.0f; float halfHeight = hatchHeight / 2.0f; RectangleF rect = new RectangleF(0,0,1,1); // Add upward diagonals context.MoveTo(0,0); context.AddLineToPoint(halfWidth, halfHeight); context.StrokePath(); context.MoveTo(0, halfHeight); context.AddLineToPoint(halfWidth -1, hatchHeight - 1); context.StrokePath(); context.MoveTo(halfWidth, 0); context.AddLineToPoint(6, 2); context.StrokePath(); // context.MoveTo(0, 4); // context.AddLineToPoint(2, 2); // context.StrokePath(); context.MoveTo(2,6); context.AddLineToPoint(7, 1); context.StrokePath(); }
// Purple poka dots test protected void DrawPolkaDotPattern(CGContext context) { context.SetFillColor(Color.Purple.ToCGColor()); context.FillEllipseInRect (new RectangleF (4, 4, 8, 8)); }
void HatchWave(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, false); /* draw background */ drawBackground (context, backColor, hatchWidth, hatchHeight); /* draw lines in the foreground color */ context.SetFillColor(foreColor.ToCGColor()); RectangleF rect = new RectangleF(0,0,1,1); // We could maybe draw some arcs here but there are so few pixels // that it just is not worth it. rect.X = 1; setPixels(context, rect); rect.X = 2; setPixels(context, rect); rect.Y = 1; rect.X = 0; setPixels(context, rect); rect.X = 3; setPixels(context, rect); rect.X = 6; setPixels(context, rect); rect.Y = 2; rect.X = 4; setPixels(context, rect); rect.X = 5; setPixels(context, rect); }
void HatchSolidDiamond(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, false); /* draw background */ drawBackground (context, backColor, hatchWidth, hatchHeight); /* draw lines in the foreground color */ context.SetFillColor(foreColor.ToCGColor()); context.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); float halfMe = hatchWidth / 2.0f; // We will paint two triangles from corners meeting in the middle // make sure to offset by half pixels so that the point is actually a point. context.MoveTo(-HALF_PIXEL_X,HALF_PIXEL_Y); context.AddLineToPoint(2+HALF_PIXEL_X, halfMe - HALF_PIXEL_Y); context.AddLineToPoint(-HALF_PIXEL_X, hatchHeight- (1.0f + HALF_PIXEL_Y)); context.ClosePath(); context.FillPath(); // now we do the right one context.MoveTo(hatchWidth,HALF_PIXEL_Y); context.AddLineToPoint(halfMe+HALF_PIXEL_X, halfMe - HALF_PIXEL_Y); context.AddLineToPoint(hatchWidth, hatchHeight - (1.0f + HALF_PIXEL_Y)); context.ClosePath(); context.FillPath(); }
void HatchShingle(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, false); /* draw background */ drawBackground (context, backColor, hatchWidth, hatchHeight); /* draw lines in the foreground color */ context.SetFillColor(foreColor.ToCGColor()); context.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); float halfMe = hatchWidth / 2.0f; // We are basically going to draw a lamda sign // Draw base context.MoveTo(0,0); context.AddLineToPoint(halfMe,halfMe-HALF_PIXEL_Y); context.AddLineToPoint(hatchWidth, HALF_PIXEL_Y); context.StrokePath(); // draw the first part of tail context.MoveTo(halfMe + HALF_PIXEL_X, halfMe); context.AddLineToPoint(halfMe + HALF_PIXEL_X, halfMe + 1); context.StrokePath(); // now the last curl on the tail RectangleF rect = new RectangleF(1,hatchHeight-1,1,1); setPixels(context, rect); rect.X += 1; setPixels(context, rect); rect.X += 1; rect.Y -= 1; setPixels(context, rect); }
public static void EOFillPath(CGContext context, CGPath path, CGColor color) { context.SaveState(); context.SetFillColor(color); context.AddPath(path); context.EOFillPath(); context.RestoreState(); }
void HatchHorizontalBrick(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, false); /* draw background */ drawBackground (context, backColor, hatchWidth, hatchHeight); /* draw lines in the foreground color */ context.SetFillColor(foreColor.ToCGColor()); /* draw lines in the foreground color */ context.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); RectangleF rect = new RectangleF(0,0,1,1); rect.Y = 3; rect.Width = hatchWidth; rect.Height = hatchHeight - 4; context.StrokeRect(rect); context.MoveTo(hatchWidth / 2.0f, 0); context.AddLineToPoint(hatchWidth / 2.0f,3); context.StrokePath(); }
public static void DrawText(CGContext context, string text, string fontName, float fontSize, float translateHeight, float x, float y) { context.SaveState(); context.SelectFont(fontName, fontSize, CGTextEncoding.MacRoman); context.SetTextDrawingMode(CGTextDrawingMode.Fill); context.SetFillColor(new CGColor(1, 1)); context.SetStrokeColor(new CGColor(1.0f, 1.0f)); //context.AddRect(rectText); //context.Clip(); context.TextMatrix = CGAffineTransform.MakeScale(1.0f, -1.0f); context.TranslateCTM(0, translateHeight); context.ScaleCTM(1, -1); context.ShowTextAtPoint(x, y, text); context.RestoreState(); }
void drawBackground(CGContext context, Color color, float width, float height) { context.SetFillColor(color.ToCGColor()); context.FillRect(new RectangleF(HALF_PIXEL_X, HALF_PIXEL_Y, width+HALF_PIXEL_X, height+HALF_PIXEL_Y)); context.FillPath(); }
protected void HatchUpwardDiagonal(CGContext context) { var hatchSize = getHatchWidth (hatchStyle); var lineWidth = getLineWidth (hatchStyle); if (hatchStyle != HatchStyle.ForwardDiagonal && hatchStyle != HatchStyle.BackwardDiagonal) { initializeContext(context, hatchSize, false); } else { initializeContext(context, hatchSize, true); } /* draw background */ drawBackground (context, backColor, hatchSize, hatchSize); /* draw lines in the foreground color */ context.SetStrokeColor(foreColor.ToCGColor()); context.SetFillColor(foreColor.ToCGColor()); context.SetLineWidth(1); context.SetLineCap(CGLineCap.Square); context.MoveTo(0,0); context.AddLineToPoint(hatchSize,hatchSize); /* draw a diagonal line for as many times as linewidth*/ for (int l = 0; l < lineWidth; l++) { /* draw a diagonal line */ context.MoveTo(l,0); context.AddLineToPoint(hatchSize, hatchSize-l); context.StrokePath(); } /** * because we are within a rectangular pattern we have to complete the tip of the preceeding line * pattern */ for (int k = 1; k < lineWidth; k++) { /* draw a diagonal line */ context.MoveTo(0,hatchSize-k); context.AddLineToPoint(k-1, hatchSize-1); context.StrokePath(); } }
void HatchOutlinedDiamond(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, false); /* draw background */ drawBackground (context, backColor, hatchWidth, hatchHeight); /* draw lines in the foreground color */ context.SetFillColor(foreColor.ToCGColor()); context.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); // this is really just two diagonal lines from each corner too // their opposite corners. context.MoveTo(0,0); context.AddLineToPoint(hatchWidth, hatchHeight); context.StrokePath(); context.MoveTo(1,hatchHeight); context.AddLineToPoint(hatchWidth, 1); context.StrokePath(); }