public void SetUnfocus() { _isFocused = false; this.AbortAnimation("Animation"); this.ScaleTo(1, 334); _storyboardReader?.Dispose(); _storyboardReader = null; _previewBitmap = null; InvalidateSurface(); }
private static unsafe DllImports.SubBitmap GetFrame(SubSkBitmap subSkBitmap) { return(new DllImports.SubBitmap { rectLeft = subSkBitmap.SkRect.Left, rectRight = subSkBitmap.SkRect.Right, rectTop = subSkBitmap.SkRect.Top, rectBottom = subSkBitmap.SkRect.Bottom, bitmapWidth = subSkBitmap.Bitmap.Width, bitmapHeight = subSkBitmap.Bitmap.Height, bitmapInfoColorType = (int)SkiaUtils.ConvertToFormat(subSkBitmap.Bitmap.Info.ColorType), bitmapBytes = (byte *)subSkBitmap.Bitmap.GetPixels(), bitmapHash = subSkBitmap.SkRect.GetHashCode() % (int.MaxValue - 1) + 1 // let 0 be invalid hash value }); }
public void ResetFocus() { try { _animationCts?.Cancel(); } catch (ObjectDisposedException) { } _isFocused = false; this.AbortAnimation("ScaleTo"); this.AbortAnimation("Animation"); this.ScaleTo(1); _storyboardReader?.Dispose(); _storyboardReader = null; _previewBitmap = null; InvalidateSurface(); }
public async void SetFocus() { _isFocused = true; #pragma warning disable 4014 this.ScaleTo(0.9); #pragma warning restore 4014 InvalidateSurface(); if (ContentTilePreviewPath != null && _storyboardReader == null) { _storyboardReader = new StoryboardReader(Path.Combine(Application.Current.DirectoryInfo.Resource, ContentTilePreviewPath)); } await Task.Delay(TimeSpan.FromMilliseconds(500)); if (_storyboardReader == null || !_isFocused) { return; } var tilePreviewDuration = _storyboardReader.Duration(); var animation = new Animation { { 0, 1, new Animation(t => { var position = TimeSpan.FromMilliseconds(t); var previewBitmap = _storyboardReader.GetFrame(position); if (previewBitmap == null) { return; } _previewBitmap = previewBitmap; InvalidateSurface(); }, 0, tilePreviewDuration.TotalMilliseconds) } }; animation.Commit(this, "Animation", 1000 / 5, (uint)(tilePreviewDuration.TotalMilliseconds / 6), repeat: () => true); }
public async void SetFocus() { using (_animationCts = new CancellationTokenSource()) { var token = _animationCts.Token; try { _isFocused = true; this.AbortAnimation("ScaleTo"); await this.ScaleTo(0.9); if (!_isFocused) { return; } InvalidateSurface(); if (ContentTilePreviewPath == null) { return; } if (_storyboardReader == null) { _storyboardReader = new StoryboardReader(ContentTilePreviewPath, StoryboardReader.PreloadingStrategy.PreloadOnlyRemoteSources); } await Task.WhenAll(Task.Delay(500), _storyboardReader.LoadTask).WaitAsync(token); if (_storyboardReader == null || !_isFocused) { return; } var tilePreviewDuration = _storyboardReader.Duration(); var animation = new Animation { { 0, 1, new Animation(t => { var position = TimeSpan.FromMilliseconds(t); var previewBitmap = _storyboardReader.GetFrame(position); if (previewBitmap == null) { return; } _previewBitmap = previewBitmap; InvalidateSurface(); }, 0, tilePreviewDuration.TotalMilliseconds) } }; animation.Commit(this, "Animation", 1000 / 5, (uint)(tilePreviewDuration.TotalMilliseconds / 6), repeat: () => true); } catch (TaskCanceledException) { } catch (Exception ex) { _logger.Error(ex); } } }