using compdfkit_tools.Data;
using ComPDFKitViewer.AnnotEvent;
using ComPDFKitViewer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using ComPDFKitViewer.PdfViewer;
namespace compdfkit_tools.PDFControlUI
{
///
/// CPDFFreeHandUI.xaml 的交互逻辑
///
public partial class CPDFFreehandUI : UserControl
{
public event EventHandler PropertyChanged;
public event EventHandler EraseClickHandler;
public event EventHandler EraseChangeHandler;
private AnnotAttribEvent annotAttribEvent;
public CPDFFreehandUI()
{
InitializeComponent();
ColorPickerControl.ColorChanged += ColorPickerControl_ColorChanged;
CPDFOpacityControl.OpacityChanged += CPDFOpacityControl_OpacityChanged;
CPDFThicknessControl.ThicknessChanged += CPDFThicknessControl_ThicknessChanged;
CPDFAnnotationPreviewerControl.DrawFreehandPreview(GetFreehandData());
EraseThickness.ThicknessChanged += EraseThickness_ThicknessChanged;
}
private void EraseThickness_ThicknessChanged(object sender, EventArgs e)
{
EraseChangeHandler?.Invoke(this, EraseThickness.Thickness);
EraseCircle.Width = EraseThickness.Thickness * 6;
EraseCircle.Height = EraseThickness.Thickness * 6;
}
private void CPDFOpacityControl_OpacityChanged(object sender, EventArgs e)
{
if (annotAttribEvent == null)
{
PropertyChanged?.Invoke(this, GetFreehandData());
}
else
{
annotAttribEvent.UpdateAttrib(AnnotAttrib.Transparency, CPDFOpacityControl.OpacityValue / 100.0);
annotAttribEvent.UpdateAnnot();
}
CPDFAnnotationPreviewerControl.DrawFreehandPreview(GetFreehandData());
}
private void CPDFThicknessControl_ThicknessChanged(object sender, EventArgs e)
{
if (annotAttribEvent == null)
{
PropertyChanged?.Invoke(this, GetFreehandData());
}
else
{
annotAttribEvent.UpdateAttrib(AnnotAttrib.Thickness, CPDFThicknessControl.Thickness);
annotAttribEvent.UpdateAnnot();
}
CPDFAnnotationPreviewerControl.DrawFreehandPreview(GetFreehandData());
}
private void ColorPickerControl_ColorChanged(object sender, EventArgs e)
{
if (annotAttribEvent == null)
{
PropertyChanged?.Invoke(this, GetFreehandData());
}
else
{
annotAttribEvent.UpdateAttrib(AnnotAttrib.Color, ((SolidColorBrush)ColorPickerControl.Brush).Color);
annotAttribEvent.UpdateAnnot();
}
CPDFAnnotationPreviewerControl.DrawFreehandPreview(GetFreehandData());
}
private void NoteTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (annotAttribEvent == null)
{
PropertyChanged?.Invoke(this, GetFreehandData());
}
else
{
annotAttribEvent.UpdateAttrib(AnnotAttrib.NoteText, NoteTextBox.Text);
annotAttribEvent.UpdateAnnot();
}
}
public void SetPresentAnnotAttrib(AnnotAttribEvent annotAttribEvent)
{
this.annotAttribEvent = null;
ColorPickerControl.Brush = new SolidColorBrush((Color)annotAttribEvent.Attribs[AnnotAttrib.Color]);
CPDFOpacityControl.OpacityValue = (int)((double)annotAttribEvent.Attribs[AnnotAttrib.Transparency] * 100);
CPDFThicknessControl.Thickness =Convert.ToInt16(annotAttribEvent.Attribs[AnnotAttrib.Thickness]);
if(annotAttribEvent.Attribs.ContainsKey(AnnotAttrib.Color))
{
ColorPickerControl.SetCheckedForColor((Color)annotAttribEvent.Attribs[AnnotAttrib.Color]);
}
NoteTextBox.Text = (string)annotAttribEvent.Attribs[AnnotAttrib.NoteText];
this.annotAttribEvent = annotAttribEvent;
}
public CPDFFreehandData GetFreehandData()
{
CPDFFreehandData pdfFreehandData = new CPDFFreehandData();
pdfFreehandData.AnnotationType = CPDFAnnotationType.Freehand;
pdfFreehandData.BorderColor = ((SolidColorBrush)ColorPickerControl.Brush).Color;
pdfFreehandData.Opacity = CPDFOpacityControl.OpacityValue / 100.0;
pdfFreehandData.Thickness = CPDFThicknessControl.Thickness;
pdfFreehandData.Note = NoteTextBox.Text;
return pdfFreehandData;
}
public void SetEraseCheck(bool isCheck)
{
if(isCheck)
{
FreehandBtn.IsChecked = false;
EraseBtn.IsChecked = true;
FreehandPanel.Visibility = Visibility.Collapsed;
ErasePanel.Visibility = Visibility.Visible;
CPDFAnnotationPreviewerControl.Visibility = Visibility.Collapsed;
EraseCirclePanel.Visibility = Visibility.Visible;
}
else
{
FreehandBtn.IsChecked = true;
EraseBtn.IsChecked = false;
FreehandPanel.Visibility = Visibility.Visible;
ErasePanel.Visibility = Visibility.Collapsed;
CPDFAnnotationPreviewerControl.Visibility = Visibility.Visible;
EraseCirclePanel.Visibility=Visibility.Collapsed;
}
}
internal void ClearAnnotAttribEvent()
{
annotAttribEvent = null;
}
internal int GetEraseThickness()
{
return EraseThickness.Thickness;
}
private void FreehandBtn_Click(object sender, RoutedEventArgs e)
{
SetEraseCheck(false);
EraseClickHandler?.Invoke(this, false);
}
private void EraseBtn_Click(object sender, RoutedEventArgs e)
{
SetEraseCheck(true);
EraseClickHandler?.Invoke(this, true);
}
}
}