public void AddElementRenderer(string typeName, Type type)
 {
     if (!elementRenderers.ContainsKey(typeName))
     {
         LayoutElementRenderer elementRenderer = (LayoutElementRenderer)Activator.CreateInstance(type);
         elementRenderers.Add(typeName, elementRenderer);
     }
     else
     {
         throw new Exception(string.Format("Element render already registered for type [{0}]", typeName));
     }
 }
        private void DrawElements(Graphics graphics)
        {
            LayoutProperties layoutProperties = new LayoutProperties();

            layoutProperties.DesignAreaLocation = DesignAreaLocation;
            layoutProperties.DesignAreaSize     = DesignAreaSize;
            layoutProperties.ViewportLocation   = ViewportLocation;
            layoutProperties.ViewportSize       = ViewportSize;
            layoutProperties.ZoomRatio          = ZoomRatio;

            foreach (LayoutElement element in Layout.Elements)
            {
                LayoutElementRenderer elementRenderer = GetElementRendererForElementType(element.TypeName);
                if (elementRenderer != null)
                {
                    elementRenderer.Draw(element, graphics, layoutProperties);

                    if (IsElementInSelection(element))
                    {
                        TransformHandleType transformHandleType = TransformHandleType.All;
                        VisualLayoutElement visualLayoutElement = element as VisualLayoutElement;
                        if (visualLayoutElement != null && !visualLayoutElement.Rotatable)
                        {
                            if (!KeyboardHelper.IsShiftKeyPressed)
                            {
                                transformHandleType = TransformHandleType.All;
                            }
                            else
                            {
                                transformHandleType = TransformHandleType.OnlyCorners;
                            }
                        }

                        DesignerHelper.DrawTransformHandles(graphics, element, layoutProperties, transformHandleType);
                    }
                }
                else
                {
                    throw new Exception("Element renderer for element type not found!");
                }
            }
        }