/// <summary> /// 文字列にシリアライズされた手描き入力を復元する. /// </summary> /// <param name="text"></param> /// <returns></returns> private static InputTraceBase ParseTrace(string text) { JsonArray jsonArray; if (!JsonArray.TryParse(text, out jsonArray)) { return(null); } InputTraceKind kind; if (!Enum.TryParse(jsonArray.GetStringAt(0), out kind)) { return(null); } InputTraceBase trace; switch (kind) { case InputTraceKind.BeginStroke: trace = new BeginStrokeTrace(); break; case InputTraceKind.MoveStroke: trace = new MoveStrokeTrace(); break; case InputTraceKind.EndStroke: trace = new EndStrokeTrace(); break; case InputTraceKind.RemoveStroke: trace = new RemoveStrokeTrace(); break; case InputTraceKind.SetStrokeColor: trace = new SetStrokeColorTrace(); break; case InputTraceKind.SetStrokeThickness: trace = new SetStrokeThicknessTrace(); break; case InputTraceKind.SetBackgroundColor: trace = new SetBackgroundColorTrace(); break; case InputTraceKind.SetImage: trace = new SetImageTrace(); break; default: return(null); } trace.LoadFromJson(jsonArray); return(trace); }
/// <summary> /// 手描きの入力を開始するときに呼び出す. /// </summary> private Windows.UI.Xaml.Shapes.Polyline BeginStroke(BeginStrokeTrace trace) { var line = new Windows.UI.Xaml.Shapes.Polyline() { //Stroke = new SolidColorBrush(Windows.UI.Colors.Blue), //StrokeThickness = 10, Tag = trace.Index, }; line.Points.Add(trace.Position); this.MainCanvas.Children.Add(line); // System.Diagnostics.Debug.WriteLine("BeginStroke: {0}, {1}", trace.Index, trace.Position); this.canvasElementsDictionay.Add(trace.Index, line); return(line); }
/// <summary> /// 手描き描画用CanvasのPointerPressedイベントを処理する. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MainCanvas_PointerPressed(object sender, PointerRoutedEventArgs e) { // 編集中以外は無視する if (!this.isEditingInternal) { return; } var pointerPoint = e.GetCurrentPoint(this.MainCanvas); var trace = new BeginStrokeTrace() { // Indexは実際に描画するときに設定する // Index = this.inputRecorder.GetNextStrokeIndex(), Position = pointerPoint.Position, Timestamp = DateTimeOffset.UtcNow.Ticks, }; // 全然移動しなくて手描き入力しない方がよいかもしれないので候補リストに登録するだけにしておく strokeCandidateDictionary[pointerPoint.PointerId] = trace; }