Exemplo n.º 1
0
 internal HistoryData(int Capacity, IColorType Color)
 {
     m_Color    = Color.GetAsRGBA_Bytes();
     m_Capacity = Capacity;
     m_Data     = new TwoSidedStack <double>();
     Reset();
 }
Exemplo n.º 2
0
 internal HistoryData(int capacity, IColorType lineColor)
 {
     this.lineColor = lineColor.GetAsRGBA_Bytes();
     this.capacity  = capacity;
     data           = new List <double>();
     Reset();
 }
Exemplo n.º 3
0
 internal HistoryData(int Capacity, IColorType Color)
 {
 	m_Color = Color.GetAsRGBA_Bytes();
     m_Capacity = Capacity;
     m_Data = new TwoSidedStack<double>();
     Reset();
 }
Exemplo n.º 4
0
        public override void Render(IVertexSource vertexSource, int pathIndexToRender, IColorType colorIn)
        {
            PreRender();

            if (DoEdgeAntiAliasing)
            {
                DrawAAShape(vertexSource, colorIn);
            }
            else
            {
                vertexSource.rewind(pathIndexToRender);

                Affine transform = GetTransform();
                if (!transform.is_identity())
                {
                    vertexSource = new VertexSourceApplyTransform(vertexSource, transform);
                }

                RGBA_Bytes colorBytes = colorIn.GetAsRGBA_Bytes();
                GL.Color4(colorBytes.red, colorBytes.green, colorBytes.blue, colorBytes.alpha);

                renderNowTesselator.Clear();
                VertexSourceToTesselator.SendShapeToTesselator(renderNowTesselator, vertexSource);
            }

            PopOrthoProjection();
        }
Exemplo n.º 5
0
			internal HistoryData(int capacity, IColorType lineColor)
			{
				this.lineColor = lineColor.GetAsRGBA_Bytes();
				this.capacity = capacity;
				data = new List<double>();
				Reset();
			}
Exemplo n.º 6
0
        public override void Render(IVertexSource vertexSource, int pathIndexToRender, IColorType colorIn)
        {
            PushOrthoProjection();

            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
            GL.Enable(EnableCap.Blend);

            vertexSource.rewind(pathIndexToRender);

            RGBA_Bytes colorBytes = colorIn.GetAsRGBA_Bytes();

            GL.Color4(colorBytes.red, colorBytes.green, colorBytes.blue, colorBytes.alpha);

            Affine transform = GetTransform();

            if (!transform.is_identity())
            {
                vertexSource = new VertexSourceApplyTransform(vertexSource, transform);
            }

            if (DoEdgeAntiAliasing)
            {
                DrawAAShape(vertexSource);
            }
            else
            {
                renderNowTesselator.Clear();
                Graphics2DOpenGL.SendShapeToTesselator(renderNowTesselator, vertexSource);
            }

            PopOrthoProjection();
        }
Exemplo n.º 7
0
 //--------------------------------------------------------------------
 public span_image_filter_rgb_bilinear_clip(IImageBufferAccessor src,
                                            IColorType back_color,
                                            ISpanInterpolator inter)
     : base(src, inter, null)
 {
     m_OutsideSourceColor = back_color.GetAsRGBA_Bytes();
 }
Exemplo n.º 8
0
        public void DrawAACircle(Vector2 start, double radius, IColorType colorIn)
        {
            RGBA_Bytes colorBytes = colorIn.GetAsRGBA_Bytes();

            GL.Color4(colorBytes.red, colorBytes.green, colorBytes.blue, colorBytes.alpha);

            Affine transform = GetTransform();

            if (!transform.is_identity())
            {
                transform.transform(ref start);
            }

            // now draw the end rounds
            int     numSegments     = 12;
            double  anglePerSegment = MathHelper.Tau / numSegments;
            Vector2 currentOffset   = new Vector2(0, radius);
            Vector2 curveStart      = start + currentOffset;

            for (int i = 0; i < numSegments; i++)
            {
                currentOffset.Rotate(anglePerSegment);
                Vector2 curveEnd = start + currentOffset;

                triangleEddgeInfo.Draw1EdgeTriangle(curveStart, curveEnd, start);
                curveStart = curveEnd;
            }
        }
Exemplo n.º 9
0
 public SpanImageFilterRGBABilinearClip(IRasterBufferAccessor src,
                                        IColorType back_color, ISpanInterpolator inter) : base(src, inter, null)
 {
     m_back_color = back_color.GetAsRGBA_Bytes();
     OrderR       = src.PixelFormat.Blender.OrderR;
     OrderG       = src.PixelFormat.Blender.OrderG;
     OrderB       = src.PixelFormat.Blender.OrderB;
     OrderA       = src.PixelFormat.Blender.OrderA;
 }
Exemplo n.º 10
0
        public override void OnDraw(Graphics2D graphics2D)
        {
            RoundedRect backgroundRect = new RoundedRect(LocalBounds, 4);

            graphics2D.Render(backgroundRect, backgroundColor.GetAsRGBA_Bytes());

            graphics2D.Render(new Stroke(backgroundRect), borderColor.GetAsRGBA_Bytes());

            base.OnDraw(graphics2D);
        }
Exemplo n.º 11
0
        public override void Clear(IColorType color)
        {
            Affine transform = GetTransform();

            RoundedRect clearRect = new RoundedRect(new RectangleDouble(
                                                        cachedClipRect.Left - transform.tx, cachedClipRect.Bottom - transform.ty,
                                                        cachedClipRect.Right - transform.tx, cachedClipRect.Top - transform.ty), 0);

            Render(clearRect, color.GetAsRGBA_Bytes());
        }
Exemplo n.º 12
0
        public override void Clear(IColorType color)
        {
            Affine transform = GetTransform();

            RoundedRect clearRect = new RoundedRect(new RectangleDouble(
                                                        0 - transform.tx, width - transform.ty,
                                                        0 - transform.tx, height - transform.ty), 0);

            Render(clearRect, color.GetAsRGBA_Bytes());
        }
Exemplo n.º 13
0
        public override void FillRectangle(double left, double bottom, double right, double top, IColorType fillColor)
        {
            // This only works for translation. If we have a rotation or scale in the transform this will have some problems.
            Affine transform  = GetTransform();
            double fastLeft   = left;
            double fastBottom = bottom;
            double fastRight  = right;
            double fastTop    = top;

            transform.transform(ref fastLeft, ref fastBottom);
            transform.transform(ref fastRight, ref fastTop);

            if (fastLeft == (int)fastLeft &&
                fastBottom == (int)fastBottom &&
                fastRight == (int)fastRight &&
                fastTop == (int)fastTop)
            {
                PushOrthoProjection();

                GL.Disable(EnableCap.Texture2D);
                GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
                GL.Enable(EnableCap.Blend);

                GL.Color4(fillColor.Red0To255, fillColor.Green0To255, fillColor.Blue0To255, fillColor.Alpha0To255);

                GL.Begin(BeginMode.Triangles);
                // triangel 1
                {
                    GL.Vertex2(fastLeft, fastBottom);
                    GL.Vertex2(fastRight, fastBottom);
                    GL.Vertex2(fastRight, fastTop);
                }

                // triangel 2
                {
                    GL.Vertex2(fastLeft, fastBottom);
                    GL.Vertex2(fastRight, fastTop);
                    GL.Vertex2(fastLeft, fastTop);
                }
                GL.End();

                PopOrthoProjection();
            }
            else
            {
                RoundedRect rect = new RoundedRect(left, bottom, right, top, 0);
                Render(rect, fillColor.GetAsRGBA_Bytes());
            }
        }
Exemplo n.º 14
0
		public override void Render(IVertexSource vertexSource, int pathIndexToRender, IColorType colorBytes)
		{
			rasterizer.reset();
			Affine transform = GetTransform();
			if (!transform.is_identity())
			{
				vertexSource = new VertexSourceApplyTransform(vertexSource, transform);
			}
			rasterizer.add_path(vertexSource, pathIndexToRender);
			if (destImageByte != null)
			{
				scanlineRenderer.RenderSolid(destImageByte, rasterizer, m_ScanlineCache, colorBytes.GetAsRGBA_Bytes());
				DestImage.MarkImageChanged();
			}
			else
			{
				scanlineRenderer.RenderSolid(destImageFloat, rasterizer, m_ScanlineCache, colorBytes.GetAsRGBA_Floats());
				destImageFloat.MarkImageChanged();
			}
		}
Exemplo n.º 15
0
        public void DrawAAShape(IVertexSource vertexSource, IColorType colorIn)
        {
            vertexSource.rewind(0);

            Affine transform = GetTransform();

            if (!transform.is_identity())
            {
                vertexSource = new VertexSourceApplyTransform(vertexSource, transform);
            }

            RGBA_Bytes colorBytes = colorIn.GetAsRGBA_Bytes();

            GL.Color4(colorBytes.red, colorBytes.green, colorBytes.blue, colorBytes.alpha);

            triangleEddgeInfo.Clear();
            VertexSourceToTesselator.SendShapeToTesselator(triangleEddgeInfo, vertexSource);

            // now render it
            triangleEddgeInfo.RenderLastToGL();
        }
Exemplo n.º 16
0
        public void DrawAALine(Vector2 start, Vector2 end, double halfWidth, IColorType colorIn)
        {
            RGBA_Bytes colorBytes = colorIn.GetAsRGBA_Bytes();

            GL.Color4(colorBytes.red, colorBytes.green, colorBytes.blue, colorBytes.alpha);

            Affine transform = GetTransform();

            if (!transform.is_identity())
            {
                transform.transform(ref start);
                transform.transform(ref end);
            }

            GL.Begin(BeginMode.Triangles);
            Vector2 widthRightOffset = (end - start).GetPerpendicularRight().GetNormal() * halfWidth / 2;

            triangleEddgeInfo.Draw2EdgeTriangle(start - widthRightOffset, end - widthRightOffset, end + widthRightOffset);
            triangleEddgeInfo.Draw2EdgeTriangle(end + widthRightOffset, start + widthRightOffset, start - widthRightOffset);
            GL.End();
        }
Exemplo n.º 17
0
        public void DrawAALineRounded(Vector2 start, Vector2 end, double halfWidth, IColorType colorIn)
        {
            RGBA_Bytes colorBytes = colorIn.GetAsRGBA_Bytes();

            GL.Color4(colorBytes.red, colorBytes.green, colorBytes.blue, colorBytes.alpha);

            Affine transform = GetTransform();

            if (!transform.is_identity())
            {
                transform.transform(ref start);
                transform.transform(ref end);
            }

            //GL.Begin(BeginMode.Triangles);
            Vector2 widthRightOffset = (end - start).GetPerpendicularRight().GetNormal() * halfWidth / 2;

            // draw the main line part
            triangleEddgeInfo.Draw1EdgeTriangle(start - widthRightOffset, end - widthRightOffset, end + widthRightOffset);
            triangleEddgeInfo.Draw1EdgeTriangle(end + widthRightOffset, start + widthRightOffset, start - widthRightOffset);
            // now draw the end rounds
            int     numSegments     = 5;
            Vector2 endCurveStart   = end + widthRightOffset;
            Vector2 startCurveStart = start + widthRightOffset;

            for (int i = 0; i < numSegments + 1; i++)
            {
                Vector2 endCurveEnd = end + Vector2.Rotate(widthRightOffset, i * Math.PI / numSegments);
                triangleEddgeInfo.Draw1EdgeTriangle(endCurveStart, endCurveEnd, end);
                endCurveStart = endCurveEnd;

                Vector2 startCurveEnd = start + Vector2.Rotate(widthRightOffset, -i * Math.PI / numSegments);
                triangleEddgeInfo.Draw1EdgeTriangle(startCurveStart, startCurveEnd, start);
                startCurveStart = startCurveEnd;
            }
            //GL.End();
        }
Exemplo n.º 18
0
		public override void Clear(IColorType iColor)
		{
			RectangleDouble clippingRect = GetClippingRect();
			RectangleInt clippingRectInt = new RectangleInt((int)clippingRect.Left, (int)clippingRect.Bottom, (int)clippingRect.Right, (int)clippingRect.Top);

			if (DestImage != null)
			{
				RGBA_Bytes color = iColor.GetAsRGBA_Bytes();
				int width = DestImage.Width;
				int height = DestImage.Height;
				byte[] buffer = DestImage.GetBuffer();
				switch (DestImage.BitDepth)
				{
					case 8:
						{
							byte byteColor = (byte)iColor.Red0To255;
							for (int y = clippingRectInt.Bottom; y < clippingRectInt.Top; y++)
							{
								int bufferOffset = DestImage.GetBufferOffsetXY((int)clippingRect.Left, y);
								int bytesBetweenPixels = DestImage.GetBytesBetweenPixelsInclusive();
								for (int x = 0; x < clippingRectInt.Width; x++)
								{
									buffer[bufferOffset] = color.blue;
									bufferOffset += bytesBetweenPixels;
								}
							}
						}
						break;

					case 24:
						for (int y = clippingRectInt.Bottom; y < clippingRectInt.Top; y++)
						{
							int bufferOffset = DestImage.GetBufferOffsetXY((int)clippingRect.Left, y);
							int bytesBetweenPixels = DestImage.GetBytesBetweenPixelsInclusive();
							for (int x = 0; x < clippingRectInt.Width; x++)
							{
								buffer[bufferOffset + 0] = color.blue;
								buffer[bufferOffset + 1] = color.green;
								buffer[bufferOffset + 2] = color.red;
								bufferOffset += bytesBetweenPixels;
							}
						}
						break;

					case 32:
						{
							for (int y = clippingRectInt.Bottom; y < clippingRectInt.Top; y++)
							{
								int bufferOffset = DestImage.GetBufferOffsetXY((int)clippingRect.Left, y);
								int bytesBetweenPixels = DestImage.GetBytesBetweenPixelsInclusive();
								for (int x = 0; x < clippingRectInt.Width; x++)
								{
									buffer[bufferOffset + 0] = color.blue;
									buffer[bufferOffset + 1] = color.green;
									buffer[bufferOffset + 2] = color.red;
									buffer[bufferOffset + 3] = color.alpha;
									bufferOffset += bytesBetweenPixels;
								}
							}
						}
						break;

					default:
						throw new NotImplementedException();
				}
			}
			else // it is a float
			{
				if (DestImageFloat == null)
				{
					throw new Exception("You have to have either a byte or float DestImage.");
				}

				RGBA_Floats color = iColor.GetAsRGBA_Floats();
				int width = DestImageFloat.Width;
				int height = DestImageFloat.Height;
				float[] buffer = DestImageFloat.GetBuffer();
				switch (DestImageFloat.BitDepth)
				{
					case 128:
						for (int y = 0; y < height; y++)
						{
							int bufferOffset = DestImageFloat.GetBufferOffsetXY(clippingRectInt.Left, y);
							int bytesBetweenPixels = DestImageFloat.GetFloatsBetweenPixelsInclusive();
							for (int x = 0; x < clippingRectInt.Width; x++)
							{
								buffer[bufferOffset + 0] = color.blue;
								buffer[bufferOffset + 1] = color.green;
								buffer[bufferOffset + 2] = color.red;
								buffer[bufferOffset + 3] = color.alpha;
								bufferOffset += bytesBetweenPixels;
							}
						}
						break;

					default:
						throw new NotImplementedException();
				}
			}
		}
Exemplo n.º 19
0
		public override void FillRectangle(double left, double bottom, double right, double top, IColorType fillColor)
		{
			RoundedRect rect = new RoundedRect(left, bottom, right, top, 0);
			Render(rect, fillColor.GetAsRGBA_Bytes());
		}
Exemplo n.º 20
0
		public override void Clear(IColorType color)
		{
			Affine transform = GetTransform();

			RoundedRect clearRect = new RoundedRect(new RectangleDouble(
				0 - transform.tx, width - transform.ty,
				0 - transform.tx, height - transform.ty), 0);
			Render(clearRect, color.GetAsRGBA_Bytes());
		}
Exemplo n.º 21
0
 public void background_color(IColorType v) { m_OutsideSourceColor = v.GetAsRGBA_Bytes(); }
Exemplo n.º 22
0
 public void background_color(IColorType v)
 {
     m_back_color = v.GetAsRGBA_Bytes();
 }
Exemplo n.º 23
0
		public override void Render(IVertexSource vertexSource, int pathIndexToRender, IColorType colorIn)
		{
			PreRender();

			if (DoEdgeAntiAliasing)
			{
				DrawAAShape(vertexSource, colorIn);
			}
			else
			{
				vertexSource.rewind(pathIndexToRender);

				Affine transform = GetTransform();
				if (!transform.is_identity())
				{
					vertexSource = new VertexSourceApplyTransform(vertexSource, transform);
				}

				RGBA_Bytes colorBytes = colorIn.GetAsRGBA_Bytes();
				GL.Color4(colorBytes.red, colorBytes.green, colorBytes.blue, colorBytes.alpha);

				renderNowTesselator.Clear();
                VertexSourceToTesselator.SendShapeToTesselator(renderNowTesselator, vertexSource);
			}

			PopOrthoProjection();
		}
Exemplo n.º 24
0
		public void color(IColorType c)
		{
			m_color = c.GetAsRGBA_Bytes();
		}
Exemplo n.º 25
0
        public override void FillRectangle(double left, double bottom, double right, double top, IColorType fillColor)
        {
            RoundedRect rect = new RoundedRect(left, bottom, right, top, 0);

            Render(rect, fillColor.GetAsRGBA_Bytes());
        }
Exemplo n.º 26
0
		public void active_color(IColorType c)
		{
			activeColor = c.GetAsRGBA_Bytes();
		}
Exemplo n.º 27
0
 public void background_color(IColorType v)
 {
     m_OutsideSourceColor = v.GetAsRGBA_Bytes();
 }
Exemplo n.º 28
0
		public override void Render(IVertexSource vertexSource, int pathIndexToRender, IColorType colorIn)
		{
			PushOrthoProjection();

			GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
			GL.Enable(EnableCap.Blend);

			vertexSource.rewind(pathIndexToRender);

			RGBA_Bytes colorBytes = colorIn.GetAsRGBA_Bytes();
			GL.Color4(colorBytes.red, colorBytes.green, colorBytes.blue, colorBytes.alpha);

			Affine transform = GetTransform();
			if (!transform.is_identity())
			{
				vertexSource = new VertexSourceApplyTransform(vertexSource, transform);
			}

			if (DoEdgeAntiAliasing)
			{
				DrawAAShape(vertexSource);
			}
			else
			{
				renderNowTesselator.Clear();
				Graphics2DOpenGL.SendShapeToTesselator(renderNowTesselator, vertexSource);
			}

			PopOrthoProjection();
		}
Exemplo n.º 29
0
        //--------------------------------------------------------------------
        public span_image_filter_rgb_bilinear_clip(IRasterBufferAccessor src,
											IColorType back_color,
											ISpanInterpolator inter)
            : base(src, inter, null)
        {
            m_back_color = back_color.GetAsRGBA_Bytes();
            OrderR = src.PixelFormat.Blender.OrderR;
            OrderG = src.PixelFormat.Blender.OrderG;
            OrderB = src.PixelFormat.Blender.OrderB;
            OrderA = src.PixelFormat.Blender.OrderA;
        }
Exemplo n.º 30
0
		public void DrawAACircle(Vector2 start, double radius, IColorType colorIn)
		{
			RGBA_Bytes colorBytes = colorIn.GetAsRGBA_Bytes();
			GL.Color4(colorBytes.red, colorBytes.green, colorBytes.blue, colorBytes.alpha);

			Affine transform = GetTransform();
			if (!transform.is_identity())
			{
				transform.transform(ref start);
			}

			// now draw the end rounds
			int numSegments = 12;
			double anglePerSegment = MathHelper.Tau / numSegments;
			Vector2 currentOffset = new Vector2(0, radius);
			Vector2 curveStart = start + currentOffset;
			for (int i = 0; i < numSegments; i++)
			{
				currentOffset.Rotate(anglePerSegment);
				Vector2 curveEnd = start + currentOffset;

				triangleEddgeInfo.Draw1EdgeTriangle(curveStart, curveEnd, start);
				curveStart = curveEnd;
			}
		}
Exemplo n.º 31
0
 public span_image_filter_rgba_bilinear_clip(IImageBufferAccessor src,
     IColorType back_color, ISpanInterpolator inter)
     : base(src, inter, null)
 {
     m_OutsideSourceColor = back_color.GetAsRGBA_Bytes();
 }
Exemplo n.º 32
0
		public void DrawAALineRounded(Vector2 start, Vector2 end, double halfWidth, IColorType colorIn)
		{
			RGBA_Bytes colorBytes = colorIn.GetAsRGBA_Bytes();
			GL.Color4(colorBytes.red, colorBytes.green, colorBytes.blue, colorBytes.alpha);

			Affine transform = GetTransform();
			if (!transform.is_identity())
			{
				transform.transform(ref start);
				transform.transform(ref end);
			}

			//GL.Begin(BeginMode.Triangles);
			Vector2 widthRightOffset = (end - start).GetPerpendicularRight().GetNormal() * halfWidth / 2;
			// draw the main line part
			triangleEddgeInfo.Draw1EdgeTriangle(start - widthRightOffset, end - widthRightOffset, end + widthRightOffset);
			triangleEddgeInfo.Draw1EdgeTriangle(end + widthRightOffset, start + widthRightOffset, start - widthRightOffset);
			// now draw the end rounds
			int numSegments = 5;
			Vector2 endCurveStart = end + widthRightOffset;
			Vector2 startCurveStart = start + widthRightOffset;
			for (int i = 0; i < numSegments+1; i++)
			{
				Vector2 endCurveEnd = end + Vector2.Rotate(widthRightOffset, i * Math.PI / numSegments);
				triangleEddgeInfo.Draw1EdgeTriangle(endCurveStart, endCurveEnd, end);
				endCurveStart = endCurveEnd;

				Vector2 startCurveEnd = start + Vector2.Rotate(widthRightOffset, -i * Math.PI / numSegments);
				triangleEddgeInfo.Draw1EdgeTriangle(startCurveStart, startCurveEnd, start);
				startCurveStart = startCurveEnd;
			}
			//GL.End();
		}
Exemplo n.º 33
0
 //--------------------------------------------------------------------
 public void Colors(IColorType c1, IColorType c2, IColorType c3)
 {
     m_coord[0].Color = c1.GetAsRGBA_Bytes();
     m_coord[1].Color = c2.GetAsRGBA_Bytes();
     m_coord[2].Color = c3.GetAsRGBA_Bytes();
 }
Exemplo n.º 34
0
 public void background_color(IColorType v)
 {
     m_back_color = v.GetAsRGBA_Bytes();
 }
Exemplo n.º 35
0
		public void DrawAALine(Vector2 start, Vector2 end, double halfWidth, IColorType colorIn)
		{
			RGBA_Bytes colorBytes = colorIn.GetAsRGBA_Bytes();
			GL.Color4(colorBytes.red, colorBytes.green, colorBytes.blue, colorBytes.alpha);

			Affine transform = GetTransform();
			if (!transform.is_identity())
			{
				transform.transform(ref start);
				transform.transform(ref end);
			}

			GL.Begin(BeginMode.Triangles);
			Vector2 widthRightOffset = (end-start).GetPerpendicularRight().GetNormal() * halfWidth/2;
			triangleEddgeInfo.Draw2EdgeTriangle(start - widthRightOffset, end - widthRightOffset, end + widthRightOffset);
			triangleEddgeInfo.Draw2EdgeTriangle(end + widthRightOffset, start + widthRightOffset, start - widthRightOffset);
			GL.End();
		}
Exemplo n.º 36
0
		public void DrawAAShape(IVertexSource vertexSource, IColorType colorIn)
		{
			vertexSource.rewind(0);

			Affine transform = GetTransform();
			if (!transform.is_identity())
			{
				vertexSource = new VertexSourceApplyTransform(vertexSource, transform);
			}

			RGBA_Bytes colorBytes = colorIn.GetAsRGBA_Bytes();
			GL.Color4(colorBytes.red, colorBytes.green, colorBytes.blue, colorBytes.alpha);

			triangleEddgeInfo.Clear();
            VertexSourceToTesselator.SendShapeToTesselator(triangleEddgeInfo, vertexSource);

			// now render it
			triangleEddgeInfo.RenderLastToGL();
		}
Exemplo n.º 37
0
        public override void Clear(IColorType iColor)
        {
            RectangleDouble clippingRect    = GetClippingRect();
            RectangleInt    clippingRectInt = new RectangleInt((int)clippingRect.Left, (int)clippingRect.Bottom, (int)clippingRect.Right, (int)clippingRect.Top);

            if (DestImage != null)
            {
                RGBA_Bytes color  = iColor.GetAsRGBA_Bytes();
                int        width  = DestImage.Width;
                int        height = DestImage.Height;
                byte[]     buffer = DestImage.GetBuffer();
                switch (DestImage.BitDepth)
                {
                case 8:
                {
                    byte byteColor = (byte)iColor.Red0To255;
                    for (int y = clippingRectInt.Bottom; y < clippingRectInt.Top; y++)
                    {
                        int bufferOffset       = DestImage.GetBufferOffsetXY((int)clippingRect.Left, y);
                        int bytesBetweenPixels = DestImage.GetBytesBetweenPixelsInclusive();
                        for (int x = 0; x < clippingRectInt.Width; x++)
                        {
                            buffer[bufferOffset] = color.blue;
                            bufferOffset        += bytesBetweenPixels;
                        }
                    }
                }
                break;

                case 24:
                    for (int y = clippingRectInt.Bottom; y < clippingRectInt.Top; y++)
                    {
                        int bufferOffset       = DestImage.GetBufferOffsetXY((int)clippingRect.Left, y);
                        int bytesBetweenPixels = DestImage.GetBytesBetweenPixelsInclusive();
                        for (int x = 0; x < clippingRectInt.Width; x++)
                        {
                            buffer[bufferOffset + 0] = color.blue;
                            buffer[bufferOffset + 1] = color.green;
                            buffer[bufferOffset + 2] = color.red;
                            bufferOffset            += bytesBetweenPixels;
                        }
                    }
                    break;

                case 32:
                {
                    for (int y = clippingRectInt.Bottom; y < clippingRectInt.Top; y++)
                    {
                        int bufferOffset       = DestImage.GetBufferOffsetXY((int)clippingRect.Left, y);
                        int bytesBetweenPixels = DestImage.GetBytesBetweenPixelsInclusive();
                        for (int x = 0; x < clippingRectInt.Width; x++)
                        {
                            buffer[bufferOffset + 0] = color.blue;
                            buffer[bufferOffset + 1] = color.green;
                            buffer[bufferOffset + 2] = color.red;
                            buffer[bufferOffset + 3] = color.alpha;
                            bufferOffset            += bytesBetweenPixels;
                        }
                    }
                }
                break;

                default:
                    throw new NotImplementedException();
                }
            }
            else             // it is a float
            {
                if (DestImageFloat == null)
                {
                    throw new Exception("You have to have either a byte or float DestImage.");
                }

                RGBA_Floats color  = iColor.GetAsRGBA_Floats();
                int         width  = DestImageFloat.Width;
                int         height = DestImageFloat.Height;
                float[]     buffer = DestImageFloat.GetBuffer();
                switch (DestImageFloat.BitDepth)
                {
                case 128:
                    for (int y = 0; y < height; y++)
                    {
                        int bufferOffset       = DestImageFloat.GetBufferOffsetXY(clippingRectInt.Left, y);
                        int bytesBetweenPixels = DestImageFloat.GetFloatsBetweenPixelsInclusive();
                        for (int x = 0; x < clippingRectInt.Width; x++)
                        {
                            buffer[bufferOffset + 0] = color.blue;
                            buffer[bufferOffset + 1] = color.green;
                            buffer[bufferOffset + 2] = color.red;
                            buffer[bufferOffset + 3] = color.alpha;
                            bufferOffset            += bytesBetweenPixels;
                        }
                    }
                    break;

                default:
                    throw new NotImplementedException();
                }
            }
        }
Exemplo n.º 38
0
		public override void FillRectangle(double left, double bottom, double right, double top, IColorType fillColor)
		{
			// This only works for translation. If we have a rotation or scale in the transform this will have some problems.
			Affine transform = GetTransform();
			double fastLeft = left;
			double fastBottom = bottom;
			double fastRight = right;
			double fastTop = top;

			transform.transform(ref fastLeft, ref fastBottom);
			transform.transform(ref fastRight, ref fastTop);

			if (fastLeft == (int)fastLeft
				&& fastBottom == (int)fastBottom
				&& fastRight == (int)fastRight
				&& fastTop == (int)fastTop)
			{
				PushOrthoProjection();

				GL.Disable(EnableCap.Texture2D);
				GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
				GL.Enable(EnableCap.Blend);

				GL.Color4(fillColor.Red0To255, fillColor.Green0To255, fillColor.Blue0To255, fillColor.Alpha0To255);

				GL.Begin(BeginMode.Triangles);
				// triangel 1
				{
					GL.Vertex2(fastLeft, fastBottom);
					GL.Vertex2(fastRight, fastBottom);
					GL.Vertex2(fastRight, fastTop);
				}

				// triangel 2
				{
					GL.Vertex2(fastLeft, fastBottom);
					GL.Vertex2(fastRight, fastTop);
					GL.Vertex2(fastLeft, fastTop);
				}
				GL.End();

				PopOrthoProjection();
			}
			else
			{
				RoundedRect rect = new RoundedRect(left, bottom, right, top, 0);
				Render(rect, fillColor.GetAsRGBA_Bytes());
			}
		}
Exemplo n.º 39
0
        public override void Render(IVertexSource vertexSource, int pathIndexToRender, IColorType colorBytes)
        {
            rasterizer.reset();
            Affine transform = GetTransform();

            if (!transform.is_identity())
            {
                vertexSource = new VertexSourceApplyTransform(vertexSource, transform);
            }
            rasterizer.add_path(vertexSource, pathIndexToRender);
            if (destImageByte != null)
            {
                scanlineRenderer.RenderSolid(destImageByte, rasterizer, m_ScanlineCache, colorBytes.GetAsRGBA_Bytes());
                DestImage.MarkImageChanged();
            }
            else
            {
                scanlineRenderer.RenderSolid(destImageFloat, rasterizer, m_ScanlineCache, colorBytes.GetAsRGBA_Floats());
                destImageFloat.MarkImageChanged();
            }
        }
Exemplo n.º 40
0
 //--------------------------------------------------------------------
 public void colors(IColorType c1, IColorType c2, IColorType c3)
 {
     m_coord[0].color = c1.GetAsRGBA_Bytes();
     m_coord[1].color = c2.GetAsRGBA_Bytes();
     m_coord[2].color = c3.GetAsRGBA_Bytes();
 }
 public void active_color(IColorType c)
 {
     activeColor = c.GetAsRGBA_Bytes();
 }
Exemplo n.º 42
0
 public void FillRectangle(double left, double bottom, double right, double top, IColorType fillColor)
 {
     if (right < left || top < bottom)
     {
         throw new ArgumentException();
     }
     RoundedRect rect = new RoundedRect(left, bottom, right, top, 0);
     Render(rect, fillColor.GetAsRGBA_Bytes());
 }