public void DrawObject(string url, string mimeType, float x, float y, float width, float height)
        {
            if (_imageLoader == null)
            {
                return;
            }

            var transform = _transform;
            var screenMin = transform.Apply(x, y);
            var screenMax = transform.Apply(x + width, y + height);

            var image = _imageLoader.getImage(url, mimeType,
                                              (url_, image_) =>
            {
                var renderer = _imageLoader.Editor.Renderer;
                var x_       = (int)Math.Floor(screenMin.X);
                var y_       = (int)Math.Floor(screenMin.Y);
                var width_   = (int)Math.Ceiling(screenMax.X) - x_;
                var height_  = (int)Math.Ceiling(screenMax.Y) - y_;
                _target.Invalidate(renderer, x_, y_, width_, height_, LayerType.LayerType_ALL);
            });

            if (image == null)
            {
                // image is not ready yet...
                if (_fillColor.Color.A > 0)
                {
                    var rect    = new Rect(x, y, width, height);
                    var clipped = PushRenderStates();
                    _drawingContext.DrawRectangle(_fillColor, null, rect);
                    PopRenderStates(clipped);
                }
            }
            else
            {
                // adjust rectangle so that the image gets fit into original rectangle
                float fx = width / (float)image.Width;
                float fy = height / (float)image.Height;

                if (fx > fy)
                {
                    float w = (float)(image.Width * fy);
                    x    += (width - w) / 2;
                    width = w;
                }
                else
                {
                    float h = (float)(image.Height * fx);
                    y     += (height - h) / 2;
                    height = h;
                }

                // draw the image
                var rect    = new Rect(x, y, width, height);
                var clipped = PushRenderStates();
                _drawingContext.DrawImage(image, rect);
                PopRenderStates(clipped);
            }
        }
        public void DrawObject(string url, string mimeType, float x, float y, float width, float height)
        {
            if (_imageLoader == null)
            {
                return;
            }

            var transform = _transform;
            var screenMin = transform.Apply(x, y);
            var screenMax = transform.Apply(x + width, y + height);

            var image = _imageLoader.getImage(url, mimeType,
                                              (url_, image_) =>
            {
                var renderer = _imageLoader.Editor.Renderer;
                var x_       = (int)Math.Floor(screenMin.X);
                var y_       = (int)Math.Floor(screenMin.Y);
                var width_   = (int)Math.Ceiling(screenMax.X) - x_;
                var height_  = (int)Math.Ceiling(screenMax.Y) - y_;
                _target.Invalidate(renderer, x_, y_, width_, height_, LayerType.LayerType_ALL);
            });

            if (image == null)
            {
                // image is not ready yet...
                if (_fillColor.A > 0)
                {
                    _session.FillRectangle(x, y, width, height, _fillColor);
                }
            }
            else
            {
                // adjust rectangle so that the image gets fit into original rectangle
                var   size = image.SizeInPixels;
                float fx   = width / (float)size.Width;
                float fy   = height / (float)size.Height;

                if (fx > fy)
                {
                    float w = (float)(size.Width) * fy;
                    x    += (width - w) / 2;
                    width = w;
                }
                else
                {
                    float h = (float)(size.Height) * fx;
                    y     += (height - h) / 2;
                    height = h;
                }

                // draw the image
                var rect = new Rect(x, y, width, height);
                _session.DrawImage(image, rect, new Rect(0, 0, size.Width, size.Height));
            }
        }