示例#1
0
                /// <summary>
                /// Renders this element and all its child elements.
                /// </summary>
                /// <param name="dc">The drawing context to use for rendering.</param>
                protected override void RenderRecursive(DrawingContext dc)
                {
                    if (_redirect)
                    {
                        dc = _displayModule._drawingContext;

                        base.RenderRecursive(dc);

                        int x, y, w, h;
                        dc.GetClippingRectangle(out x, out y, out w, out h);

                        _displayModule.Paint(dc.Bitmap, x, y, w, h);
                    }
                    else
                    {
                        base.RenderRecursive(dc);
                    }
                }
示例#2
0
 private voiddelegate invalidate; // WORKAROUND
 private void Instance_PostRender(DrawingContext dc)
 {
     
     // The below workaround handles the issue that the OLED screen driver API cannot handle partial screen updates
     // WORKAROUND - when the clipping rectangle is not the full size, invalidate the whole window so we get called again with the full size
     int x, y, width, height;
     dc.GetClippingRectangle(out x, out y, out width, out height);
     if (x != 0 || y != 0 || width != dc.Width || height != dc.Height)
     {
         //Debug.Print("Paint rectangle: x " + x + "  y " + y + " w " + width + " h " + height);
         if (invalidate == null) invalidate = new voiddelegate(WPFWindow.Invalidate);  // WORKAROUND
         Program.BeginInvoke(invalidate, null); // WORKAROUND
         return; // WORKAROUND
     }
  
     Paint(dc.Bitmap);
 }
示例#3
0
            public override void OnRender(DrawingContext dc)
            {
                if (_pushClippingRectangle)
                {
                    try
                    {
                        dc.PushClippingRectangle(x0, y0, xDimension, yDimension);
                    }
                    catch (ArgumentException ex)
                    {
                        Log.Comment("Caught " + ex.Message + " when Pushing a clipping rectangle at (" + x0 + ", " + y0 + ")" +
                            " and Width = " + xDimension + " Height = " + yDimension);
                        _argumentException = true;
                    }
                }
                if (_popClippingRectangle)
                {
                    dc.PopClippingRectangle();
                }
                if (_getClippingRectangle)
                {
                    dc.GetClippingRectangle(out x1, out y1, out wd, out ht);
                }
                if (_drawLine)
                {
                    dc.DrawLine(_pen, x0, y0, x1, y1);
                }
                if (_drawRectangle)
                {
                    try
                    {
                        dc.DrawRectangle(_brush, _pen, r, s, xDimension, yDimension);
                    }
                    catch (ArgumentException ex)
                    {
                        Log.Comment("Caught " + ex.Message + " when drawing a Rectangle at (" + r + ", " + s + ")" +
                            " Width = " + xDimension + " Height = " + yDimension);
                        _argumentException = true;
                    }
                }
                if (_drawEllipse)
                {
                    dc.DrawEllipse(_brush, _pen, r, s, xDimension, yDimension);
                }
                if (_drawPolygon)
                {
                    dc.DrawPolygon(_brush, _pen, pts);
                }
                if (_clear)
                {
                    dc.Clear();
                }
                if (_setPixel)
                {
                    dc.SetPixel(_color, r, s);
                }
                if (_drawImage)
                {
                    try
                    {
                        dc.DrawImage(bmp1, r, s);
                    }
                    catch (NullReferenceException ex)
                    {
                        Log.Comment("Caught " + ex.Message + " when drawing a null Image");
                        _nullReferenceException = true;
                    }
                }
                if (_drawCroppedImage)
                {
                    try
                    {
                        dc.DrawImage(bmp1, r, s, x0, y0, xDimension, yDimension);
                    }                   
                    catch (ArgumentException ex)
                    {
                        Log.Comment("Caught " + ex.Message + " when drawing an Image at (" + r + ", " + s + ")" +
                            "from a source Image at(" + x0 + ", " + y0 + ") Width = " + xDimension + " Height = " + yDimension);
                        _argumentException = true;
                    }
                    catch (NullReferenceException ex)
                    {
                        Log.Comment("Caught " + ex.Message + " when drawing a null Image");
                        _nullReferenceException = true;
                    }
                }
                if (_translate)
                {
                    dc.Translate(r, s);
                }
                if (_blendImage)
                {
                    dc.BlendImage(bmp2, x0, y0, x1, y1, xDimension, yDimension, _opacity);
                }
                if (_drawText)
                {
                    _textFits = dc.DrawText(ref _str, _font, _color, r, s, xDimension, yDimension, _alignment, _trimming);
                }
                base.OnRender(dc);
                _pBitmap = dc.Bitmap;

                Master_Media.autoEvent.Set();
            }