{"action":"created","comment":{"url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls/comments/240621066","pull_request_review_id":183690150,"id":240621066,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0MDYyMTA2Ng==","diff_hunk":"@@ -0,0 +1,373 @@\n+// Licensed to the .NET Foundation under one or more agreements.\n+// The .NET Foundation licenses this file to you under the MIT license.\n+// See the LICENSE file in the project root for more information.\n+\n+using System;\n+using System.Threading.Tasks;\n+using Windows.Foundation;\n+using Windows.Storage;\n+using Windows.UI.Xaml;\n+using Windows.UI.Xaml.Controls;\n+using Windows.UI.Xaml.Input;\n+using Windows.UI.Xaml.Media;\n+using Windows.UI.Xaml.Media.Imaging;\n+using Windows.UI.Xaml.Shapes;\n+\n+namespace Microsoft.Toolkit.Uwp.UI.Controls\n+{\n+    /// <summary>\n+    /// The <see cref=\"ImageCropper\"/> control allows user to crop image freely.\n+    /// </summary>\n+    [TemplatePart(Name = LayoutGridName, Type = typeof(Grid))]\n+    [TemplatePart(Name = ImageCanvasPartName, Type = typeof(Canvas))]\n+    [TemplatePart(Name = SourceImagePartName, Type = typeof(Image))]\n+    [TemplatePart(Name = MaskAreaPathPartName, Type = typeof(Path))]\n+    [TemplatePart(Name = TopButtonPartName, Type = typeof(Button))]\n+    [TemplatePart(Name = BottomButtonPartName, Type = typeof(Button))]\n+    [TemplatePart(Name = LeftButtonPartName, Type = typeof(Button))]\n+    [TemplatePart(Name = RightButtonPartName, Type = typeof(Button))]\n+    [TemplatePart(Name = UpperLeftButtonPartName, Type = typeof(Button))]\n+    [TemplatePart(Name = UpperRightButtonPartName, Type = typeof(Button))]\n+    [TemplatePart(Name = LowerLeftButtonPartName, Type = typeof(Button))]\n+    [TemplatePart(Name = LowerRightButtonPartName, Type = typeof(Button))]\n+    public partial class ImageCropper : Control\n+    {\n+        private readonly CompositeTransform _imageTransform = new CompositeTransform();\n+        private readonly GeometryGroup _maskAreaGeometryGroup = new GeometryGroup { FillRule = FillRule.EvenOdd };\n+\n+        private Grid _layoutGrid;\n+        private Canvas _imageCanvas;\n+        private Image _sourceImage;\n+        private Path _maskAreaPath;\n+        private Button _topButton;\n+        private Button _bottomButton;\n+        private Button _leftButton;\n+        private Button _rigthButton;\n+        private Button _upperLeftButton;\n+        private Button _upperRightButton;\n+        private Button _lowerLeftButton;\n+        private Button _lowerRigthButton;\n+        private double _startX;\n+        private double _startY;\n+        private double _endX;\n+        private double _endY;\n+        private Rect _currentCroppedRect = Rect.Empty;\n+        private Rect _restrictedCropRect = Rect.Empty;\n+        private Rect _restrictedSelectRect = Rect.Empty;\n+\n+        /// <summary>\n+        /// Initializes a new instance of the <see cref=\"ImageCropper\"/> class.\n+        /// </summary>\n+        public ImageCropper()\n+        {\n+            DefaultStyleKey = typeof(ImageCropper);\n+        }\n+\n+        private Rect CanvasRect => new Rect(0, 0, _imageCanvas?.ActualWidth ?? 0, _imageCanvas?.ActualHeight ?? 0);\n+\n+        private bool KeepAspectRatio => UsedAspectRatio > 0;\n+\n+        private double UsedAspectRatio => CircularCrop ? 1 : AspectRatio;\n+\n+        /// <summary>\n+        /// Gets the minimum cropped size.\n+        /// </summary>\n+        private Size MinCropSize\n+        {\n+            get\n+            {\n+                var aspectRatio = KeepAspectRatio ? UsedAspectRatio : 1;\n+                var size = new Size(MinCroppedPixelLength, MinCroppedPixelLength);\n+                if (aspectRatio >= 1)\n+                {\n+                    size.Width = size.Height * aspectRatio;\n+                }\n+                else\n+                {\n+                    size.Height = size.Width / aspectRatio;\n+                }\n+\n+                return size;\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Gets the minimum selectable size.\n+        /// </summary>\n+        private Size MinSelectSize\n+        {\n+            get\n+            {\n+                var realMinSelectSize = _imageTransform.TransformBounds(new Rect(default(Point), MinCropSize));\n+                var minLength = Math.Min(realMinSelectSize.Width, realMinSelectSize.Height);\n+                if (minLength < MinSelectedLength)\n+                {\n+                    var aspectRatio = KeepAspectRatio ? UsedAspectRatio : 1;\n+                    var minSelectSize = new Size(MinSelectedLength, MinSelectedLength);\n+                    if (aspectRatio >= 1)\n+                    {\n+                        minSelectSize.Width = minSelectSize.Height * aspectRatio;\n+                    }\n+                    else\n+                    {\n+                        minSelectSize.Height = minSelectSize.Width / aspectRatio;\n+                    }\n+\n+                    return minSelectSize;\n+                }\n+\n+                return new Size(realMinSelectSize.Width, realMinSelectSize.Height);\n+            }\n+        }\n+\n+        /// <inheritdoc/>\n+        protected override void OnApplyTemplate()\n+        {\n+            UnhookEvents();\n+            _layoutGrid = GetTemplateChild(LayoutGridName) as Grid;\n+            _imageCanvas = GetTemplateChild(ImageCanvasPartName) as Canvas;\n+            _sourceImage = GetTemplateChild(SourceImagePartName) as Image;\n+            _maskAreaPath = GetTemplateChild(MaskAreaPathPartName) as Path;\n+            _topButton = GetTemplateChild(TopButtonPartName) as Button;\n+            _bottomButton = GetTemplateChild(BottomButtonPartName) as Button;\n+            _leftButton = GetTemplateChild(LeftButtonPartName) as Button;\n+            _rigthButton = GetTemplateChild(RightButtonPartName) as Button;\n+            _upperLeftButton = GetTemplateChild(UpperLeftButtonPartName) as Button;\n+            _upperRightButton = GetTemplateChild(UpperRightButtonPartName) as Button;\n+            _lowerLeftButton = GetTemplateChild(LowerLeftButtonPartName) as Button;\n+            _lowerRigthButton = GetTemplateChild(LowerRightButtonPartName) as Button;\n+            HookUpEvents();\n+            UpdateControlButtonVisibility();\n+        }\n+\n+        private void HookUpEvents()\n+        {\n+            if (_imageCanvas != null)\n+            {\n+                _imageCanvas.SizeChanged += ImageCanvas_SizeChanged;\n+            }\n+\n+            if (_sourceImage != null)\n+            {\n+                _sourceImage.RenderTransform = _imageTransform;\n+                _sourceImage.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;\n+                _sourceImage.ManipulationDelta += SourceImage_ManipulationDelta;\n+            }\n+\n+            if (_maskAreaPath != null)\n+            {\n+                _maskAreaPath.Data = _maskAreaGeometryGroup;\n+            }\n+\n+            if (_topButton != null)\n+            {\n+                _topButton.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;\n+                _topButton.Tag = DragPosition.Top;\n+                _topButton.ManipulationDelta += ControlButton_ManipulationDelta;\n+                _topButton.ManipulationCompleted += ControlButton_ManipulationCompleted;\n+                _topButton.KeyDown += ControlButton_KeyDown;\n+                _topButton.KeyUp += ControlButton_KeyUp;\n+            }\n+\n+            if (_bottomButton != null)\n+            {\n+                _bottomButton.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;\n+                _bottomButton.Tag = DragPosition.Bottom;\n+                _bottomButton.ManipulationDelta += ControlButton_ManipulationDelta;\n+                _bottomButton.ManipulationCompleted += ControlButton_ManipulationCompleted;\n+                _bottomButton.KeyDown += ControlButton_KeyDown;\n+                _bottomButton.KeyUp += ControlButton_KeyUp;\n+            }\n+\n+            if (_leftButton != null)\n+            {\n+                _leftButton.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;\n+                _leftButton.Tag = DragPosition.Left;\n+                _leftButton.ManipulationDelta += ControlButton_ManipulationDelta;\n+                _leftButton.ManipulationCompleted += ControlButton_ManipulationCompleted;\n+                _leftButton.KeyDown += ControlButton_KeyDown;\n+                _leftButton.KeyUp += ControlButton_KeyUp;\n+            }\n+\n+            if (_rigthButton != null)\n+            {\n+                _rigthButton.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;\n+                _rigthButton.Tag = DragPosition.Right;\n+                _rigthButton.ManipulationDelta += ControlButton_ManipulationDelta;\n+                _rigthButton.ManipulationCompleted += ControlButton_ManipulationCompleted;\n+                _rigthButton.KeyDown += ControlButton_KeyDown;\n+                _rigthButton.KeyUp += ControlButton_KeyUp;\n+            }\n+\n+            if (_upperLeftButton != null)\n+            {\n+                _upperLeftButton.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;\n+                _upperLeftButton.Tag = DragPosition.UpperLeft;\n+                _upperLeftButton.ManipulationDelta += ControlButton_ManipulationDelta;\n+                _upperLeftButton.ManipulationCompleted += ControlButton_ManipulationCompleted;\n+                _upperLeftButton.KeyDown += ControlButton_KeyDown;\n+                _upperLeftButton.KeyUp += ControlButton_KeyUp;\n+            }\n+\n+            if (_upperRightButton != null)\n+            {\n+                _upperRightButton.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;\n+                _upperRightButton.Tag = DragPosition.UpperRight;\n+                _upperRightButton.ManipulationDelta += ControlButton_ManipulationDelta;\n+                _upperRightButton.ManipulationCompleted += ControlButton_ManipulationCompleted;\n+                _upperRightButton.KeyDown += ControlButton_KeyDown;\n+                _upperRightButton.KeyUp += ControlButton_KeyUp;\n+            }\n+\n+            if (_lowerLeftButton != null)\n+            {\n+                _lowerLeftButton.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;\n+                _lowerLeftButton.Tag = DragPosition.LowerLeft;\n+                _lowerLeftButton.ManipulationDelta += ControlButton_ManipulationDelta;\n+                _lowerLeftButton.ManipulationCompleted += ControlButton_ManipulationCompleted;\n+                _lowerLeftButton.KeyDown += ControlButton_KeyDown;\n+                _lowerLeftButton.KeyUp += ControlButton_KeyUp;\n+            }\n+\n+            if (_lowerRigthButton != null)\n+            {\n+                _lowerRigthButton.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;\n+                _lowerRigthButton.Tag = DragPosition.LowerRight;\n+                _lowerRigthButton.ManipulationDelta += ControlButton_ManipulationDelta;\n+                _lowerRigthButton.ManipulationCompleted += ControlButton_ManipulationCompleted;\n+                _lowerRigthButton.KeyDown += ControlButton_KeyDown;\n+                _lowerRigthButton.KeyUp += ControlButton_KeyUp;\n+            }\n+        }\n+\n+        private void UnhookEvents()\n+        {\n+            if (_imageCanvas != null)\n+            {\n+                _imageCanvas.SizeChanged -= ImageCanvas_SizeChanged;\n+            }\n+\n+            if (_sourceImage != null)\n+            {\n+                _sourceImage.RenderTransform = null;\n+                _sourceImage.ManipulationDelta -= SourceImage_ManipulationDelta;\n+            }\n+\n+            if (_maskAreaPath != null)\n+            {\n+                _maskAreaPath.Data = null;\n+            }\n+\n+            if (_topButton != null)\n+            {\n+                _topButton.ManipulationDelta -= ControlButton_ManipulationDelta;\n+                _topButton.ManipulationCompleted -= ControlButton_ManipulationCompleted;\n+                _topButton.KeyDown -= ControlButton_KeyDown;\n+                _topButton.KeyUp -= ControlButton_KeyUp;\n+            }\n+\n+            if (_bottomButton != null)\n+            {\n+                _bottomButton.ManipulationDelta -= ControlButton_ManipulationDelta;\n+                _bottomButton.ManipulationCompleted -= ControlButton_ManipulationCompleted;\n+                _bottomButton.KeyDown -= ControlButton_KeyDown;\n+                _bottomButton.KeyUp -= ControlButton_KeyUp;\n+            }\n+\n+            if (_leftButton != null)\n+            {\n+                _leftButton.ManipulationDelta -= ControlButton_ManipulationDelta;\n+                _leftButton.ManipulationCompleted += ControlButton_ManipulationCompleted;\n+                _leftButton.KeyDown -= ControlButton_KeyDown;\n+                _leftButton.KeyUp -= ControlButton_KeyUp;\n+            }\n+\n+            if (_rigthButton != null)\n+            {\n+                _rigthButton.ManipulationDelta -= ControlButton_ManipulationDelta;\n+                _rigthButton.ManipulationCompleted -= ControlButton_ManipulationCompleted;\n+                _rigthButton.KeyDown -= ControlButton_KeyDown;\n+                _rigthButton.KeyUp -= ControlButton_KeyUp;\n+            }\n+\n+            if (_upperLeftButton != null)\n+            {\n+                _upperLeftButton.ManipulationDelta -= ControlButton_ManipulationDelta;\n+                _upperLeftButton.ManipulationCompleted -= ControlButton_ManipulationCompleted;\n+                _upperLeftButton.KeyDown -= ControlButton_KeyDown;\n+                _upperLeftButton.KeyUp -= ControlButton_KeyUp;\n+            }\n+\n+            if (_upperRightButton != null)\n+            {\n+                _upperRightButton.ManipulationDelta -= ControlButton_ManipulationDelta;\n+                _upperRightButton.ManipulationCompleted -= ControlButton_ManipulationCompleted;\n+                _upperRightButton.KeyDown -= ControlButton_KeyDown;\n+                _upperRightButton.KeyUp -= ControlButton_KeyUp;\n+            }\n+\n+            if (_lowerLeftButton != null)\n+            {\n+                _lowerLeftButton.ManipulationDelta -= ControlButton_ManipulationDelta;\n+                _lowerLeftButton.ManipulationCompleted -= ControlButton_ManipulationCompleted;\n+                _lowerLeftButton.KeyDown -= ControlButton_KeyDown;\n+                _lowerLeftButton.KeyUp -= ControlButton_KeyUp;\n+            }\n+\n+            if (_lowerRigthButton != null)\n+            {\n+                _lowerRigthButton.ManipulationDelta -= ControlButton_ManipulationDelta;\n+                _lowerRigthButton.ManipulationCompleted -= ControlButton_ManipulationCompleted;\n+                _lowerRigthButton.KeyDown -= ControlButton_KeyDown;\n+                _lowerRigthButton.KeyUp -= ControlButton_KeyUp;\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Load an image from a file.\n+        /// </summary>\n+        /// <param name=\"imageFile\">The image file.</param>\n+        /// <returns>Task</returns>\n+        public async Task LoadImageFromFile(StorageFile imageFile)\n+        {\n+            var writeableBitmap = new WriteableBitmap(1, 1);\n+            using (var stream = await imageFile.OpenReadAsync())\n+            {\n+                await writeableBitmap.SetSourceAsync(stream);\n+            }\n+\n+            SourceImage = writeableBitmap;\n+        }\n+\n+        /// <summary>\n+        /// Gets the cropped image.\n+        /// </summary>\n+        /// <returns>The cropped image.</returns>\n+        public async Task<WriteableBitmap> GetCroppedBitmapAsync()\n+        {\n+            if (SourceImage == null)\n+            {\n+                return null;\n+            }\n+\n+            return await GetCroppedBitmapAsync(SourceImage, _currentCroppedRect);\n+        }\n+\n+        /// <summary>\n+        /// Save the cropped image to a file.\n+        /// </summary>\n+        /// <param name=\"imageFile\">The target file.</param>\n+        /// <param name=\"encoderId\">The encoderId of BitmapEncoder.</param>\n+        /// <returns>Task</returns>\n+        public async Task SaveCroppedBitmapAsync(StorageFile imageFile, Guid encoderId)","path":"Microsoft.Toolkit.Uwp.UI.Controls/ImageCropper/ImageCropper.cs","position":null,"original_position":362,"commit_id":"22b53b8ae5651593c3f75e38563044947d082e60","original_commit_id":"66cb68573b7d2a9a76f1cde0683a7fd2c6c49a69","user":{"login":"HHChaos","id":9880072,"node_id":"MDQ6VXNlcjk4ODAwNzI=","avatar_url":"https://avatars2.githubusercontent.com/u/9880072?v=4","gravatar_id":"","url":"https://api.github.com/users/HHChaos","html_url":"https://github.com/HHChaos","followers_url":"https://api.github.com/users/HHChaos/followers","following_url":"https://api.github.com/users/HHChaos/following{/other_user}","gists_url":"https://api.github.com/users/HHChaos/gists{/gist_id}","starred_url":"https://api.github.com/users/HHChaos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HHChaos/subscriptions","organizations_url":"https://api.github.com/users/HHChaos/orgs","repos_url":"https://api.github.com/users/HHChaos/repos","events_url":"https://api.github.com/users/HHChaos/events{/privacy}","received_events_url":"https://api.github.com/users/HHChaos/received_events","type":"User","site_admin":false},"body":"I've removed the SaveCroppedBitmapAsync method because I don't think it's necessary.","created_at":"2018-12-11T14:02:44Z","updated_at":"2018-12-11T14:02:44Z","html_url":"https://github.com/windows-toolkit/WindowsCommunityToolkit/pull/2702#discussion_r240621066","pull_request_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls/2702","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls/comments/240621066"},"html":{"href":"https://github.com/windows-toolkit/WindowsCommunityToolkit/pull/2702#discussion_r240621066"},"pull_request":{"href":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls/2702"}},"in_reply_to_id":239621921},"pull_request":{"url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls/2702","id":235855231,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM1ODU1MjMx","html_url":"https://github.com/windows-toolkit/WindowsCommunityToolkit/pull/2702","diff_url":"https://github.com/windows-toolkit/WindowsCommunityToolkit/pull/2702.diff","patch_url":"https://github.com/windows-toolkit/WindowsCommunityToolkit/pull/2702.patch","issue_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/issues/2702","number":2702,"state":"open","locked":false,"title":"Added the ImageCropper control","user":{"login":"HHChaos","id":9880072,"node_id":"MDQ6VXNlcjk4ODAwNzI=","avatar_url":"https://avatars2.githubusercontent.com/u/9880072?v=4","gravatar_id":"","url":"https://api.github.com/users/HHChaos","html_url":"https://github.com/HHChaos","followers_url":"https://api.github.com/users/HHChaos/followers","following_url":"https://api.github.com/users/HHChaos/following{/other_user}","gists_url":"https://api.github.com/users/HHChaos/gists{/gist_id}","starred_url":"https://api.github.com/users/HHChaos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HHChaos/subscriptions","organizations_url":"https://api.github.com/users/HHChaos/orgs","repos_url":"https://api.github.com/users/HHChaos/repos","events_url":"https://api.github.com/users/HHChaos/events{/privacy}","received_events_url":"https://api.github.com/users/HHChaos/received_events","type":"User","site_admin":false},"body":"Issue: #903 \r\n\r\n## PR Type\r\nWhat kind of change does this PR introduce?\r\nFeature\r\n\r\n\r\n## What is the current behavior?\r\nI added the ImageCropper control and its example.\r\n\r\n\r\n## PR Checklist\r\n\r\nPlease check if your PR fulfills the following requirements:\r\n\r\n- [x] Tested code with current [supported SDKs](../readme.md#supported)\r\n- [x] Pull Request has been submitted to the documentation repository [instructions](..\\contributing.md#docs). Link: [https://github.com/MicrosoftDocs/WindowsCommunityToolkitDocs/pull/160](https://github.com/MicrosoftDocs/WindowsCommunityToolkitDocs/pull/160)\r\n- [x] Sample in sample app has been added / updated (for bug fixes / features)\r\n    - [x] Icon has been created (if new sample) following the [Thumbnail Style Guide and templates](https://github.com/windows-toolkit/WindowsCommunityToolkit-design-assets)\r\n- [ ] Tests for the changes have been added (for bug fixes / features) (if applicable)\r\n- [x] Header has been added to all new source files (run *build/UpdateHeaders.bat*)\r\n- [x] Contains **NO** breaking changes\r\n","created_at":"2018-12-04T15:39:10Z","updated_at":"2018-12-11T14:02:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d69c2e6be49924894d2f337bcbe26cb74a9a67d9","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls/2702/commits","review_comments_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls/2702/comments","review_comment_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls/comments{/number}","comments_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/issues/2702/comments","statuses_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/statuses/22b53b8ae5651593c3f75e38563044947d082e60","head":{"label":"HHChaos:master","ref":"master","sha":"22b53b8ae5651593c3f75e38563044947d082e60","user":{"login":"HHChaos","id":9880072,"node_id":"MDQ6VXNlcjk4ODAwNzI=","avatar_url":"https://avatars2.githubusercontent.com/u/9880072?v=4","gravatar_id":"","url":"https://api.github.com/users/HHChaos","html_url":"https://github.com/HHChaos","followers_url":"https://api.github.com/users/HHChaos/followers","following_url":"https://api.github.com/users/HHChaos/following{/other_user}","gists_url":"https://api.github.com/users/HHChaos/gists{/gist_id}","starred_url":"https://api.github.com/users/HHChaos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HHChaos/subscriptions","organizations_url":"https://api.github.com/users/HHChaos/orgs","repos_url":"https://api.github.com/users/HHChaos/repos","events_url":"https://api.github.com/users/HHChaos/events{/privacy}","received_events_url":"https://api.github.com/users/HHChaos/received_events","type":"User","site_admin":false},"repo":{"id":159172803,"node_id":"MDEwOlJlcG9zaXRvcnkxNTkxNzI4MDM=","name":"WindowsCommunityToolkit","full_name":"HHChaos/WindowsCommunityToolkit","private":false,"owner":{"login":"HHChaos","id":9880072,"node_id":"MDQ6VXNlcjk4ODAwNzI=","avatar_url":"https://avatars2.githubusercontent.com/u/9880072?v=4","gravatar_id":"","url":"https://api.github.com/users/HHChaos","html_url":"https://github.com/HHChaos","followers_url":"https://api.github.com/users/HHChaos/followers","following_url":"https://api.github.com/users/HHChaos/following{/other_user}","gists_url":"https://api.github.com/users/HHChaos/gists{/gist_id}","starred_url":"https://api.github.com/users/HHChaos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HHChaos/subscriptions","organizations_url":"https://api.github.com/users/HHChaos/orgs","repos_url":"https://api.github.com/users/HHChaos/repos","events_url":"https://api.github.com/users/HHChaos/events{/privacy}","received_events_url":"https://api.github.com/users/HHChaos/received_events","type":"User","site_admin":false},"html_url":"https://github.com/HHChaos/WindowsCommunityToolkit","description":"The Windows Community Toolkit is a collection of helper functions, custom controls, and app services. It simplifies and demonstrates common developer tasks building UWP apps for Windows 10. The toolkit is part of the .NET Foundation.","fork":true,"url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit","forks_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/forks","keys_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/teams","hooks_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/hooks","issue_events_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/issues/events{/number}","events_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/events","assignees_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/assignees{/user}","branches_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/branches{/branch}","tags_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/tags","blobs_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/git/refs{/sha}","trees_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/statuses/{sha}","languages_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/languages","stargazers_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/stargazers","contributors_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/contributors","subscribers_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/subscribers","subscription_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/subscription","commits_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/commits{/sha}","git_commits_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/git/commits{/sha}","comments_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/comments{/number}","issue_comment_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/issues/comments{/number}","contents_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/contents/{+path}","compare_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/merges","archive_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/downloads","issues_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/issues{/number}","pulls_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/pulls{/number}","milestones_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/milestones{/number}","notifications_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/labels{/name}","releases_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/releases{/id}","deployments_url":"https://api.github.com/repos/HHChaos/WindowsCommunityToolkit/deployments","created_at":"2018-11-26T13:19:27Z","updated_at":"2018-12-11T13:56:44Z","pushed_at":"2018-12-11T13:56:41Z","git_url":"git://github.com/HHChaos/WindowsCommunityToolkit.git","ssh_url":"git@github.com:HHChaos/WindowsCommunityToolkit.git","clone_url":"https://github.com/HHChaos/WindowsCommunityToolkit.git","svn_url":"https://github.com/HHChaos/WindowsCommunityToolkit","homepage":"https://docs.microsoft.com/windows/communitytoolkit/","size":421444,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"windows-toolkit:master","ref":"master","sha":"cd35d00ba5f08a8e8cff22e285db24aa96e48851","user":{"login":"windows-toolkit","id":41346473,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQxMzQ2NDcz","avatar_url":"https://avatars0.githubusercontent.com/u/41346473?v=4","gravatar_id":"","url":"https://api.github.com/users/windows-toolkit","html_url":"https://github.com/windows-toolkit","followers_url":"https://api.github.com/users/windows-toolkit/followers","following_url":"https://api.github.com/users/windows-toolkit/following{/other_user}","gists_url":"https://api.github.com/users/windows-toolkit/gists{/gist_id}","starred_url":"https://api.github.com/users/windows-toolkit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/windows-toolkit/subscriptions","organizations_url":"https://api.github.com/users/windows-toolkit/orgs","repos_url":"https://api.github.com/users/windows-toolkit/repos","events_url":"https://api.github.com/users/windows-toolkit/events{/privacy}","received_events_url":"https://api.github.com/users/windows-toolkit/received_events","type":"Organization","site_admin":false},"repo":{"id":61403402,"node_id":"MDEwOlJlcG9zaXRvcnk2MTQwMzQwMg==","name":"WindowsCommunityToolkit","full_name":"windows-toolkit/WindowsCommunityToolkit","private":false,"owner":{"login":"windows-toolkit","id":41346473,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQxMzQ2NDcz","avatar_url":"https://avatars0.githubusercontent.com/u/41346473?v=4","gravatar_id":"","url":"https://api.github.com/users/windows-toolkit","html_url":"https://github.com/windows-toolkit","followers_url":"https://api.github.com/users/windows-toolkit/followers","following_url":"https://api.github.com/users/windows-toolkit/following{/other_user}","gists_url":"https://api.github.com/users/windows-toolkit/gists{/gist_id}","starred_url":"https://api.github.com/users/windows-toolkit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/windows-toolkit/subscriptions","organizations_url":"https://api.github.com/users/windows-toolkit/orgs","repos_url":"https://api.github.com/users/windows-toolkit/repos","events_url":"https://api.github.com/users/windows-toolkit/events{/privacy}","received_events_url":"https://api.github.com/users/windows-toolkit/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/windows-toolkit/WindowsCommunityToolkit","description":"The Windows Community Toolkit is a collection of helper functions, custom controls, and app services. It simplifies and demonstrates common developer tasks building UWP apps for Windows 10. The toolkit is part of the .NET Foundation.","fork":false,"url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit","forks_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/forks","keys_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/teams","hooks_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/hooks","issue_events_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/issues/events{/number}","events_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/events","assignees_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/assignees{/user}","branches_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/branches{/branch}","tags_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/tags","blobs_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/git/refs{/sha}","trees_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/statuses/{sha}","languages_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/languages","stargazers_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/stargazers","contributors_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/contributors","subscribers_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/subscribers","subscription_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/subscription","commits_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/commits{/sha}","git_commits_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/git/commits{/sha}","comments_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/comments{/number}","issue_comment_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/issues/comments{/number}","contents_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/contents/{+path}","compare_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/merges","archive_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/downloads","issues_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/issues{/number}","pulls_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls{/number}","milestones_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/milestones{/number}","notifications_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/labels{/name}","releases_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/releases{/id}","deployments_url":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/deployments","created_at":"2016-06-17T21:29:46Z","updated_at":"2018-12-10T23:24:18Z","pushed_at":"2018-12-11T13:56:44Z","git_url":"git://github.com/windows-toolkit/WindowsCommunityToolkit.git","ssh_url":"git@github.com:windows-toolkit/WindowsCommunityToolkit.git","clone_url":"https://github.com/windows-toolkit/WindowsCommunityToolkit.git","svn_url":"https://github.com/windows-toolkit/WindowsCommunityToolkit","homepage":"https://docs.microsoft.com/windows/communitytoolkit/","size":421378,"stargazers_count":2798,"watchers_count":2798,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":781,"mirror_url":null,"archived":false,"open_issues_count":240,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":781,"open_issues":240,"watchers":2798,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls/2702"},"html":{"href":"https://github.com/windows-toolkit/WindowsCommunityToolkit/pull/2702"},"issue":{"href":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/issues/2702"},"comments":{"href":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/issues/2702/comments"},"review_comments":{"href":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls/2702/comments"},"review_comment":{"href":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/pulls/2702/commits"},"statuses":{"href":"https://api.github.com/repos/windows-toolkit/WindowsCommunityToolkit/statuses/22b53b8ae5651593c3f75e38563044947d082e60"}},"author_association":"NONE"}}
{"actor":{"display_login":"HHChaos"}}