Пример #1
0
        public async Task <IViewComponentResult> InvokeAsync(ComponentViewModel <ImageWidgetProperties> widgetProperties)
        {
            var    Properties = widgetProperties.Properties;
            string ImageUrl;

            if (Properties.UseAttachment)
            {
                if (!string.IsNullOrWhiteSpace(Properties.ImageGuid))
                {
                    ImageUrl = await MediaRepository.GetAttachmentImageAsync(widgetProperties.Page, Guid.Parse(Properties.ImageGuid));
                }
                else
                {
                    ImageUrl = "";
                }
            }
            else
            {
                ImageUrl = (Properties.ImageUrl != null && Properties.ImageUrl.Count() > 0 ? await MediaRepository.GetMediaFileUrlAsync(Properties.ImageUrl.FirstOrDefault().FileGuid) : "");
            }
            ImageWidgetViewModel model = new ImageWidgetViewModel()
            {
                ImageUrl  = ImageUrl,
                Alt       = Properties.Alt,
                CssClass  = Properties.CssClass,
                ImageType = Properties.UseAttachment ? ImageTypeEnum.Attachment : ImageTypeEnum.MediaFile
            };

            return(View(model));
        }
Пример #2
0
        internal void SetEditType(ImageEditType type, ImageWidgetViewModel img = null)
        {
            if (this.EditType == type)
            {
                return;
            }

            this.EditType = type;
            this._img     = img;
            switch (type)
            {
            case ImageEditType.Slice:
                SliceLineVisible = true;
                CropToolsVisible = false;
                SliceType        = Module.SliceType.Cross;
                this._pageEditorViewModel.SetImageEditorFocus();
                break;

            case ImageEditType.Crop:
                SliceLineVisible = false;
                CropToolsVisible = true;
                this.InitialCropTools();
                this._pageEditorViewModel.SetImageEditorFocus();
                break;

            default:
                SliceLineVisible = false;
                CropToolsVisible = false;
                break;
            }
        }
Пример #3
0
        private ImageWidgetViewModel MakeCopyImageWidget(BitmapSource source, Size orignalsize, Rect rectangleIntersect, Rect rectRotate)
        {
            var widget = this._pageEditorViewModel.PageEditorModel.AddWidgetItem2Dom
                             (Naver.Compass.Service.Document.WidgetType.Image,
                             Naver.Compass.Service.Document.ShapeType.None,
                             rectangleIntersect.Left,
                             rectangleIntersect.Top,
                             Convert.ToInt32(rectangleIntersect.Width),
                             Convert.ToInt32(rectangleIntersect.Height));
            var vmItem = new ImageWidgetViewModel(widget);

            vmItem.IsSelected = false;
            var cb = new CroppedBitmap(
                source,
                new Int32Rect(
                    Convert.ToInt32((rectangleIntersect.Left - rectRotate.Left) * orignalsize.Width / rectRotate.Width),
                    Convert.ToInt32((rectangleIntersect.Top - rectRotate.Top) * orignalsize.Height / rectRotate.Height),
                    Convert.ToInt32(rectangleIntersect.Width * orignalsize.Width / rectRotate.Width),
                    Convert.ToInt32(rectangleIntersect.Height * orignalsize.Height / rectRotate.Height)));
            var ms      = new MemoryStream();
            var encoder = new PngBitmapEncoder();

            encoder.Frames.Add(BitmapFrame.Create(cb));
            encoder.Save(ms);
            ms.Seek(0, SeekOrigin.Begin);
            vmItem.ImportImgSeekLater(ms, false);

            return(vmItem);
        }
Пример #4
0
        private Rect GetIntersect(ImageWidgetViewModel img)
        {
            ///calculate intersect area of image and move thumb
            var rectangleImg       = new Rect(img.Left, img.Top, img.ItemWidth, img.ItemHeight);
            var rectangleThumb     = new Rect(CropToolsRectLeft / Scale, CropToolsRectTop / Scale, CropToolsRectWidth / Scale, CropToolsRectHeight / Scale);
            var rectangleIntersect = Rect.Intersect(rectangleImg, rectangleThumb);

            return(rectangleIntersect);
        }
Пример #5
0
        public ActionResult Index()
        {
            var properties = GetProperties();
            var viewModel  = new ImageWidgetViewModel
            {
                ImageUrl = properties.ImageUrl,
            };

            return(View("~/Views/Shared/MyCompany/Widgets/_ImageWidget.cshtml", viewModel));
        }
        public ActionResult Index()
        {
            var Properties             = GetProperties();
            ImageWidgetViewModel model = new ImageWidgetViewModel()
            {
                ImageUrl  = (Properties.UseAttachment ? _MediaRepo.GetAttachmentImage(GetPage(), Properties.ImageGuid) : (Properties.ImageUrl != null && Properties.ImageUrl.Count > 0 ? _MediaRepo.GetMediaFileUrl(Properties.ImageUrl[0].FileGuid) : "")),
                Alt       = Properties.Alt,
                CssClass  = Properties.CssClass,
                ImageType = Properties.UseAttachment ? ImageTypeEnum.Attachment : ImageTypeEnum.MediaFile
            };

            return(View(model));
        }
        private void ImportImageCommandHandler(object obj)
        {
            ImageWidgetViewModel img = _selectionService.GetSelectedWidgets()[0] as ImageWidgetViewModel;

            if (img == null)
            {
                return;
            }
            img.ImportImg();
            if (img.ParentID != Guid.Empty)
            {
                UpdateGroup(img.ParentID);
            }
        }
Пример #8
0
        private void Insert2Canvas(IWidget widget)
        {
            WidgetViewModBase vmItem;

            switch (widget.WidgetType)
            {
            case WidgetType.Button:
            {
                vmItem = new ButtonWidgetViewModel(widget);
                break;
            }

            case WidgetType.Image:
            {
                vmItem = new ImageWidgetViewModel(widget);
                break;
            }

            case WidgetType.FlowShape:
            {
                IFlowShape shape = widget as IFlowShape;
                if (shape.FlowShapeType == FlowShapeType.Diamond)
                {
                    vmItem = new DiamondWidgetViewModel(widget);
                }
                else if (shape.FlowShapeType == FlowShapeType.Ellipse)
                {
                    vmItem = new CircleWidgetViewModel(widget);
                }
                else if (shape.FlowShapeType == FlowShapeType.Rectangle)
                {
                    vmItem = new RectangleWidgetViewModel(widget);
                }
                else
                {
                    vmItem = new ImageWidgetViewModel(widget);
                }
                break;
            }

            default:
            {
                vmItem = new ImageWidgetViewModel(widget);
                break;
            }
            }
            vmItem.IsSelected = true;
            Items.Add(vmItem);
        }
        public async Task <IViewComponentResult> InvokeAsync(ComponentViewModel <ImageWidgetProperties> widgetProperties)
        {
            cacheDependenciesScope.Begin();

            var    Properties = widgetProperties.Properties;
            string ImageUrl;

            if (Properties.UseAttachment)
            {
                if (!string.IsNullOrWhiteSpace(Properties.ImageGuid))
                {
                    cacheDependenciesStore.Store(new string[] { $"attachment|{Guid.Parse(Properties.ImageGuid)}" });
                    ImageUrl = await MediaRepository.GetAttachmentImageAsync(widgetProperties.Page, Guid.Parse(Properties.ImageGuid));
                }
                else
                {
                    ImageUrl = "";
                }
            }
            else
            {
                if (Properties.ImageUrl != null && Properties.ImageUrl.Any(x => true))
                {
                    cacheDependenciesStore.Store(new string[] { $"mediafile|{Properties.ImageUrl.FirstOrDefault().FileGuid}" });
                    ImageUrl = await MediaRepository.GetMediaFileUrlAsync(Properties.ImageUrl.FirstOrDefault().FileGuid);
                }
                else
                {
                    ImageUrl = "";
                }
            }

            // Save dependencies
            widgetProperties.CacheDependencies.CacheKeys = cacheDependenciesScope.End();

            ImageWidgetViewModel model = new ImageWidgetViewModel()
            {
                ImageUrl  = ImageUrl,
                Alt       = Properties.Alt,
                CssClass  = Properties.CssClass,
                ImageType = Properties.UseAttachment ? ImageTypeEnum.Attachment : ImageTypeEnum.MediaFile
            };

            return(View(model));
        }
Пример #10
0
        private TransformedBitmap ScaleImage(ImageWidgetViewModel img)
        {
            var tb             = new TransformedBitmap();
            var scaleTransform = new ScaleTransform();

            BitmapFrame OriginSource = img.ImgOriginSource as BitmapFrame;

            if (OriginSource == null)
            {
                tb.BeginInit();
                tb.Source    = null;
                tb.Transform = scaleTransform;
                tb.EndInit();
                return(tb);
            }

            var scalex = img.ItemWidth / OriginSource.Width;
            var scaley = img.ItemHeight / OriginSource.Height;

            if (scaley <= scalex)
            {
                scaleTransform.ScaleX = 1;
                scaleTransform.ScaleY = (img.ItemHeight / OriginSource.Height) / scalex;
            }
            else
            {
                scaleTransform.ScaleY = 1;
                scaleTransform.ScaleX = (img.ItemWidth / OriginSource.Width) / scaley;
            }

            var checkWholeSize = (scaleTransform.ScaleX * OriginSource.Width) * (scaleTransform.ScaleY * OriginSource.Height);

            if (checkWholeSize > 3000 * 3000)
            {
                scaleTransform.ScaleX = Math.Sqrt(3000 * 3000 / checkWholeSize) * scaleTransform.ScaleX;
                scaleTransform.ScaleY = Math.Sqrt(3000 * 3000 / checkWholeSize) * scaleTransform.ScaleY;
            }

            tb.BeginInit();
            tb.Source    = OriginSource as BitmapFrame;
            tb.Transform = scaleTransform;
            tb.EndInit();
            return(tb);
        }
Пример #11
0
        //Create Widget VM According to XML data
        public static WidgetViewModBase CreateWidget(IRegion obj)
        {
            //string timeStamp = "_" + DateTime.Now.ToString("MMddHHmmssfff");
            WidgetViewModBase vmItem;

            if (obj is IMaster)
            {
                IMaster master = obj as IMaster;
                AutoSetWdgName(obj, "Master ", WidgetType.None);
                vmItem = new MasterWidgetViewModel(master);
                return(vmItem);
            }

            IWidget it = obj as IWidget;

            switch (it.WidgetType)
            {
            case WidgetType.Button:
            {
                AutoSetWdgName(it, "Button ", WidgetType.Button);
                vmItem = new ButtonWidgetViewModel(it);
                break;
            }

            case WidgetType.Image:
            {
                AutoSetWdgName(it, "Image ", WidgetType.Image);
                vmItem = new ImageWidgetViewModel(it);
                break;
            }

            case WidgetType.SVG:
            {
                AutoSetWdgName(it, "Svg ", WidgetType.SVG);
                vmItem = new SVGWidgetViewModel(it);
                break;
            }

            case WidgetType.HotSpot:
            {
                AutoSetWdgName(it, "Link ", WidgetType.HotSpot);
                vmItem = new HotSpotWidgetViewModel(it);
                break;
            }

            case WidgetType.Line:
            {
                ILine line = it as ILine;
                if (line.Orientation == Orientation.Vertical)
                {
                    AutoSetWdgName(it, "VLine ", WidgetType.Line);
                    vmItem = new VLineWidgetViewModel(it);
                }
                else
                {
                    AutoSetWdgName(it, "HLine ", WidgetType.Line);
                    vmItem = new HLineWidgetViewModel(it);
                }
                break;
            }

            case WidgetType.Shape:
            {
                IShape shape = it as IShape;
                if (shape.ShapeType == ShapeType.Diamond)
                {
                    AutoSetWdgName(it, "Diamond ", WidgetType.Shape);
                    vmItem = new DiamondWidgetViewModel(it);
                }
                else if (shape.ShapeType == ShapeType.Ellipse)
                {
                    AutoSetWdgName(it, "Ellipse ", WidgetType.Shape);
                    vmItem = new CircleWidgetViewModel(it);
                }
                else if (shape.ShapeType == ShapeType.Rectangle)
                {
                    AutoSetWdgName(it, "Rectangle ", WidgetType.Shape);
                    vmItem = new RectangleWidgetViewModel(it);
                }
                else if (shape.ShapeType == ShapeType.RoundedRectangle)
                {
                    AutoSetWdgName(it, "Round ", WidgetType.Shape);
                    vmItem = new RoundedRecWidgetViewModel(it);
                }
                else if (shape.ShapeType == ShapeType.Paragraph)
                {
                    AutoSetWdgName(it, "Paragraph ", WidgetType.Shape);
                    vmItem = new LabelWidgetViewModel(it);
                }
                else if (shape.ShapeType == ShapeType.Triangle)
                {
                    AutoSetWdgName(it, "Triangle ", WidgetType.Shape);
                    vmItem = new TriangleWidgetViewModel(it);
                }
                else
                {
                    AutoSetWdgName(it, "Image ", WidgetType.Shape);
                    vmItem = new ImageWidgetViewModel(it);
                }

                break;
            }

            case WidgetType.ListBox:
            {
                AutoSetWdgName(it, "ListBox ", WidgetType.ListBox);
                vmItem = new ListboxWidgetViewModel(it);
                break;
            }

            case WidgetType.DropList:
            {
                AutoSetWdgName(it, "DropList ", WidgetType.DropList);
                vmItem = new DroplistWidgetViewModel(it);
                break;
            }

            case WidgetType.Checkbox:
            {
                AutoSetWdgName(it, "Checkbox ", WidgetType.Checkbox);
                vmItem = new CheckBoxWidgetViewModel(it);
                break;
            }

            case WidgetType.RadioButton:
            {
                AutoSetWdgName(it, "RadioButton ", WidgetType.RadioButton);
                vmItem = new RadioButtonWidgetViewModel(it);
                break;
            }

            case WidgetType.TextArea:
            {
                AutoSetWdgName(it, "TextArea ", WidgetType.TextArea);
                vmItem = new TextAreaWidgetViewModel(it);
                break;
            }

            case WidgetType.TextField:
            {
                AutoSetWdgName(it, "TextField ", WidgetType.TextField);
                vmItem = new TextFieldWidgetViewModel(it);
                break;
            }

            case WidgetType.HamburgerMenu:
            {
                AutoSetWdgName(it, "Drawer ", WidgetType.HamburgerMenu);
                vmItem = new HamburgerMenuViewModel(it);
                break;
            }

            case WidgetType.DynamicPanel:
            {
                AutoSetWdgName(it, "Flicking ", WidgetType.DynamicPanel);
                vmItem = new DynamicPanelViewModel(it);
                break;
            }

            case WidgetType.Toast:
            {
                AutoSetWdgName(it, "Toast ", WidgetType.Toast);
                vmItem = new ToastViewModel(it);
                break;
            }

            case WidgetType.FlowShape:
                // To avoid crash when load old file as we don't support flow shape right now.
                // This is temporary code and remove it once we support flow shape.
                return(null);

            case WidgetType.None:
                return(null);

            default:
            {
                vmItem = null;
                break;
            }
            }//switch
            return(vmItem);
        }
Пример #12
0
        private void CropAndCutSelectedImg()
        {
            if (this._img == null)
            {
                return;
            }

            var img = this._img;
            var tb  = this.ScaleImage(img);

            var bitmapRotate = ImageProcess.RotateImage(tb, img.RotateAngle);

            var rectRotate = new Rect();

            if (img.RotateAngle == 0d)
            {
                rectRotate = new Rect(img.Left, img.Top, img.ItemWidth, img.ItemHeight);
            }
            else
            {
                var newSize = ImageProcess.RotateSize(img.ItemWidth, img.ItemHeight, img.RotateAngle);
                rectRotate = new Rect(
                    (img.Left + img.ItemWidth / 2) - newSize.Width / 2,
                    (img.Top + img.ItemHeight / 2) - newSize.Height / 2,
                    newSize.Width,
                    newSize.Height);
            }

            var rectangleIntersect = GetIntersect(rectRotate);

            ///no intersect area
            if (rectangleIntersect == Rect.Empty)
            {
                return;
            }

            var source      = bitmapRotate;
            var orignalsize = new Size(source.Width, source.Height);

            ///to cut selected area
            var vmcopyItem = MakeCopyImageWidget(source, orignalsize, rectangleIntersect, rectRotate);

            vmcopyItem.IsSelected = false;
            _pageEditorViewModel.CopyWidget(vmcopyItem, true);
            _pageEditorViewModel.DeleteItem(vmcopyItem);

            ///rubber selected area
            var writablebitmap = new WriteableBitmap(source);
            var toRubberRect   = new Int32Rect(
                Convert.ToInt32((rectangleIntersect.Left - rectRotate.Left) * orignalsize.Width / rectRotate.Width),
                Convert.ToInt32((rectangleIntersect.Top - rectRotate.Top) * orignalsize.Height / rectRotate.Height),
                Convert.ToInt32(rectangleIntersect.Width * orignalsize.Width / rectRotate.Width),
                Convert.ToInt32(rectangleIntersect.Height * orignalsize.Height / rectRotate.Height));

            ImageProcess.Rubber(toRubberRect.X, toRubberRect.Y, toRubberRect.Width, toRubberRect.Height, writablebitmap);

            var ms      = new MemoryStream();
            var encoder = new PngBitmapEncoder();

            encoder.Frames.Add(BitmapFrame.Create(writablebitmap));
            encoder.Save(ms);
            ms.Seek(0, SeekOrigin.Begin);

            var widget = this._pageEditorViewModel.PageEditorModel.AddWidgetItem2Dom
                             (Naver.Compass.Service.Document.WidgetType.Image,
                             Naver.Compass.Service.Document.ShapeType.None,
                             rectRotate.Left,
                             rectRotate.Top,
                             Convert.ToInt32(rectRotate.Width),
                             Convert.ToInt32(rectRotate.Height));
            var vmItem = new ImageWidgetViewModel(widget);

            vmItem.IsSelected = true;
            vmItem.ImportImgSeekLater(ms, false);
            vmItem.Opacity = img.Opacity;

            ///replace selected widget with cropped widget
            img.IsSelected = false;
            this._pageEditorViewModel.ReplaceWidget(
                new List <WidgetViewModBase> {
                img
            },
                new List <WidgetViewModBase> {
                vmItem
            });
        }
Пример #13
0
        private void SliceSelectedImage(System.Windows.Point slicePoint)
        {
            if (this._img == null)
            {
                return;
            }

            var img = this._img;
            var tb  = this.ScaleImage(img);

            var bitmapRotate = ImageProcess.RotateImage(tb, img.RotateAngle);

            var rectRotate = new Rect();

            if (img.RotateAngle == 0d)
            {
                rectRotate = new Rect(img.Left, img.Top, img.ItemWidth, img.ItemHeight);
            }
            else
            {
                var newSize = ImageProcess.RotateSize(img.ItemWidth, img.ItemHeight, img.RotateAngle);
                rectRotate = new Rect(
                    (img.Left + img.ItemWidth / 2) - newSize.Width / 2,
                    (img.Top + img.ItemHeight / 2) - newSize.Height / 2,
                    newSize.Width,
                    newSize.Height);
            }

            var rectangles = new List <Rect>();

            ///      |            |
            ///   1  |      2     |   3
            /// _____|____________|_______
            ///   4  |      5     |   6
            /// _____|____________|_______
            ///   7  |      8     |   9
            ///      |            |

            /// in rect 1,3,7,9
            if ((slicePoint.X <= rectRotate.Left && slicePoint.Y <= rectRotate.Top) ||
                (slicePoint.X >= rectRotate.Left + rectRotate.Width && slicePoint.Y <= rectRotate.Top) ||
                (slicePoint.X <= rectRotate.Left && slicePoint.Y >= rectRotate.Top + rectRotate.Height) ||
                (slicePoint.X >= rectRotate.Left + rectRotate.Width && slicePoint.Y >= rectRotate.Top + rectRotate.Height))
            {
                return;
            }

            /// in rect 2,8
            if ((slicePoint.X > rectRotate.Left && slicePoint.X < rectRotate.Left + rectRotate.Width) &&
                (slicePoint.Y <= rectRotate.Top || slicePoint.Y >= rectRotate.Top + rectRotate.Height))
            {
                if (SliceType != Module.SliceType.Horizontal)
                {
                    rectangles.Add(new Rect(0, 0, slicePoint.X - rectRotate.Left, rectRotate.Height));
                    rectangles.Add(new Rect(slicePoint.X - rectRotate.Left, 0, rectRotate.Width - (slicePoint.X - rectRotate.Left), rectRotate.Height));
                }
            }

            /// in rect 4,6
            if ((slicePoint.X <= rectRotate.Left || slicePoint.X >= rectRotate.Left + rectRotate.Width) &&
                (slicePoint.Y > rectRotate.Top && slicePoint.Y < rectRotate.Top + rectRotate.Height))
            {
                if (SliceType != Module.SliceType.Vertical)
                {
                    rectangles.Add(new Rect(0, 0, rectRotate.Width, slicePoint.Y - rectRotate.Top));
                    rectangles.Add(new Rect(0, slicePoint.Y - rectRotate.Top, rectRotate.Width, rectRotate.Height - (slicePoint.Y - rectRotate.Top)));
                }
            }

            /// in rect 5
            if ((slicePoint.X > rectRotate.Left && slicePoint.X < rectRotate.Left + rectRotate.Width) &&
                (slicePoint.Y > rectRotate.Top && slicePoint.Y < rectRotate.Top + rectRotate.Height))
            {
                if (SliceType == Module.SliceType.Vertical)
                {
                    rectangles.Add(new Rect(0, 0, slicePoint.X - rectRotate.Left, rectRotate.Height));
                    rectangles.Add(new Rect(slicePoint.X - rectRotate.Left, 0, rectRotate.Width - (slicePoint.X - rectRotate.Left), rectRotate.Height));
                }
                else if (SliceType == Module.SliceType.Horizontal)
                {
                    rectangles.Add(new Rect(0, 0, rectRotate.Width, slicePoint.Y - rectRotate.Top));
                    rectangles.Add(new Rect(0, slicePoint.Y - rectRotate.Top, rectRotate.Width, rectRotate.Height - (slicePoint.Y - rectRotate.Top)));
                }
                else if (SliceType == Module.SliceType.Cross)
                {
                    rectangles.Add(new Rect(0, 0, slicePoint.X - rectRotate.Left, slicePoint.Y - rectRotate.Top));
                    rectangles.Add(new Rect(slicePoint.X - rectRotate.Left, 0, rectRotate.Width - (slicePoint.X - rectRotate.Left), slicePoint.Y - rectRotate.Top));
                    rectangles.Add(new Rect(0, slicePoint.Y - rectRotate.Top, slicePoint.X - rectRotate.Left, rectRotate.Height - (slicePoint.Y - rectRotate.Top)));
                    rectangles.Add(new Rect(slicePoint.X - rectRotate.Left, slicePoint.Y - rectRotate.Top, rectRotate.Width - (slicePoint.X - rectRotate.Left), rectRotate.Height - (slicePoint.Y - rectRotate.Top)));
                }
            }

            if (rectangles.Count > 0)
            {
                var source      = bitmapRotate;
                var orignalsize = new Size(source.Width, source.Height);
                var newWidgets  = new List <WidgetViewModBase>();
                foreach (var rect in rectangles)
                {
                    var widget = this._pageEditorViewModel.PageEditorModel.AddWidgetItem2Dom
                                     (Naver.Compass.Service.Document.WidgetType.Image,
                                     Naver.Compass.Service.Document.ShapeType.None,
                                     rectRotate.Left + rect.X,
                                     rectRotate.Top + rect.Y,
                                     Convert.ToInt32(rect.Width),
                                     Convert.ToInt32(rect.Height));
                    var vmItem = new ImageWidgetViewModel(widget);
                    vmItem.IsSelected = true;
                    var cb = new CroppedBitmap(
                        source,
                        new Int32Rect(
                            Convert.ToInt32(rect.X * orignalsize.Width / rectRotate.Width),
                            Convert.ToInt32(rect.Y * orignalsize.Height / rectRotate.Height),
                            Convert.ToInt32(rect.Width * orignalsize.Width / rectRotate.Width),
                            Convert.ToInt32(rect.Height * orignalsize.Height / rectRotate.Height)));
                    var ms      = new MemoryStream();
                    var encoder = new PngBitmapEncoder();
                    encoder.Frames.Add(BitmapFrame.Create(cb));
                    encoder.Save(ms);
                    ms.Seek(0, SeekOrigin.Begin);
                    vmItem.ImportImgSeekLater(ms, false);
                    vmItem.Opacity = img.Opacity;
                    newWidgets.Add(vmItem);
                }
                img.IsSelected = false;
                this._pageEditorViewModel.ReplaceWidget(new List <WidgetViewModBase> {
                    img
                }, newWidgets);
            }
        }