private void AddAdornerToWatermarkLabel(TextWatermark watermark) { if (watermark != null) { AdornerLayer layer = AdornerLayer.GetAdornerLayer(watermark.UiLabelOnImageInCanvas); WatermarkLabelAdorner a = new WatermarkLabelAdorner(watermark.UiLabelOnImageInCanvas); a.OnDrag += TextWatermarkDragHandler; layer.Add(a); } }
private void TextWatermarkDragHandler(WatermarkLabelAdorner sender, DragOperations operation, double diffX, double diffY) { Label l = sender.AdornedElement as Label; if (l == null) { return; } int i = textWatermarks.GetIndexByUiLabel(l); if (i < 0) { return; } TextWatermark t = textWatermarks[i]; if (operation == DragOperations.Move) { int diffXinPercent = Convert.ToInt16((diffX / imagePreview.Width) * 100); int diffYinPercent = Convert.ToInt16((diffY / imagePreview.Height) * 100); t.xLocationInPercent += diffXinPercent; t.yLocationInPercent += diffYinPercent; } else if (operation == DragOperations.Rotate) { double ox = sender.ActualWidth * Math.Cos((t.angle) * Math.PI / 180); double oy = sender.ActualWidth * Math.Sin((t.angle) * Math.PI / 180); double nx = ox + diffX; if (nx < 0) { if (diffY < 0) { t.angle = -90; } else { t.angle = 90; } } else { double ny = oy + diffY; double na = Math.Atan(ny / nx) * (180.0 / Math.PI); t.angle = Convert.ToInt16(na); } } }