C#/UWP

uwp ink

Superkill 2018. 3. 26. 21:13
반응형

소스코드



protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)


프레임에서 페이지가 활성화 상태에서 벗어날때 호출됨


private void InkPresenter_StrokesCollected

(InkPresenter sender, InkStrokesCollectedEventArgs e)


한개 이상의 stroke가 "wet" 상태에서 "dry" 상태로 렌더링 될 때 실행된다.

(기본적으로 ink stroke 작업은 그려지자마자 wet 상태로

low latency 백그라운드 스레드에 의해 렌더링 되는데

그 stroke가 완료될때 UI 스레드에 의해

wet 상태에서 dry 상태로 InkCanvas에 렌더링 된다.)


그러므로 UI 스레드가 바쁜 상태이면 지연이 발생할 수 있음.



private void OnSizeChanged(object sender, SizeChangedEventArgs e)


page의 SizeChanged 이벤트에 걸어놓은 핸들러


private void OnReset(object sender, RoutedEventArgs e)


ResetButton의 Click 이벤트핸들러


private void OnReplay(object sender, RoutedEventArgs e)


ReplayButton의 Click 이벤트핸들러


1. strokeBuilder가 null 이면

InkStrokeBuilder/ DispatcherTimer / TimeSpan 인스턴스 생성 후

InkReplayTimer_Tick 핸들러를 DispatcherTimer의 Tick 이벤트에 바인딩


2. inkCanvas.InkPresenter.StrokeContainer.GetStrokes()를 이용하여

stroke들을 가져온다

그리고 나서 ReplayButton 및 inkCanvas를 비활성화함


3. stroke.StrokeStartedTime / stroke.StrokeDuration를 이용하여

stroke가 시작된 시간과 끝난 시간을 계산한다.


4. stroke가 하나 이상일때 replay를 시작한다.






private void StopReplay()



private void InkReplayTimer_Tick(object sender, object e)


OnReplay 내부에서 사용되며




private InkStrokeContainer GetCurrentStrokesView(DateTimeOffset time)


InkReplayTimer_Tick 내부에서 사용되며



private InkStroke GetPartialStroke(InkStroke stroke, DateTimeOffset time)


GetCurrentStrokesView 내부에서 사용되며