{"action":"closed","issue":{"url":"https://api.github.com/repos/keith-hall/reactive-animation/issues/1","labels_url":"https://api.github.com/repos/keith-hall/reactive-animation/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/keith-hall/reactive-animation/issues/1/comments","events_url":"https://api.github.com/repos/keith-hall/reactive-animation/issues/1/events","html_url":"https://github.com/keith-hall/reactive-animation/issues/1","id":67542585,"number":1,"title":"ObservableHelper more suitable for Animation than LinearAnimation","user":{"login":"keith-hall","id":11882719,"avatar_url":"https://avatars.githubusercontent.com/u/11882719?v=3","gravatar_id":"","url":"https://api.github.com/users/keith-hall","html_url":"https://github.com/keith-hall","followers_url":"https://api.github.com/users/keith-hall/followers","following_url":"https://api.github.com/users/keith-hall/following{/other_user}","gists_url":"https://api.github.com/users/keith-hall/gists{/gist_id}","starred_url":"https://api.github.com/users/keith-hall/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keith-hall/subscriptions","organizations_url":"https://api.github.com/users/keith-hall/orgs","repos_url":"https://api.github.com/users/keith-hall/repos","events_url":"https://api.github.com/users/keith-hall/events{/privacy}","received_events_url":"https://api.github.com/users/keith-hall/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2015-04-10T08:39:08Z","updated_at":"2015-04-15T12:00:38Z","closed_at":"2015-04-15T12:00:38Z","body":"*LinearAnimation* uses *Point*s, but *Animation* uses *Rectangle*s... *ObservableHelper* was created for *Animation*, so isn't quite as intuitive, clear and concise when using *LinearAnimation*...\r\n\r\nexample *LinearAnimation* usage that has to convert *Rectangle*s to *Point*s:\r\n```cs\r\nvoid Main() // LINQPad sample\r\n{\r\n\tvar f = new Form { Width = 600, Height = 500 };\r\n\tvar b = new Button { Text = \"Hello\", Width = 100, Height = 50, Top = 50, Visible = true };\r\n\tvar b2 = new Button { Text = \"Hello\", Left = f.ClientSize.Width, Height = 50, Top = 150, Visible = true };\r\n\tf.Controls.Add(b);\r\n\tf.Controls.Add(b2);\r\n\tf.Show();\r\n\tf.Update();\r\n\tf.Refresh();\r\n\tf.Focus();\r\n\t\r\n\tLinearAnimation.AnimateControl(b, ObservableHelper.PositionBasedOnParent(b, c => new Rectangle(f.ClientSize.Width - b.Width, 50, 0,0)).Select(r => new Point(r.Left, r.Top)),\r\n\t//ObservableHelper.FixedValue(5)\r\n\tObservableHelper.PositionBasedOnParent(b, c => new Rectangle(f.ClientSize.Width, 0, 0,0)).Select(r => r.Left / (Animation.FrameRate * 2)) // hack to alter speed based on form size\r\n\t, true);\r\n\t\r\n\tLinearAnimation.AnimateControl(b2, ObservableHelper.PositionBasedOnParent(b2, c => new Rectangle(0, 150, 0,0)).Select(r => new Point(r.Left, r.Top)),\r\n\tObservableHelper.FixedValue(5)\r\n\t, true);\r\n}"}}