{"id":21666963,"url":"https://github.com/ycanardeau/saruhashi","last_synced_at":"2025-03-20T06:48:01.837Z","repository":{"id":115848428,"uuid":"282373447","full_name":"ycanardeau/Saruhashi","owner":"ycanardeau","description":"Saruhashi is a UI framework for MonoGame.","archived":false,"fork":false,"pushed_at":"2023-04-23T09:35:19.000Z","size":758,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-04-27T05:21:18.224Z","etag":null,"topics":["csharp","gui","monogame"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ycanardeau.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-25T04:55:39.000Z","updated_at":"2022-10-17T10:54:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"916d71f0-35d5-43db-b850-9f3f909cd4f2","html_url":"https://github.com/ycanardeau/Saruhashi","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ycanardeau%2FSaruhashi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ycanardeau%2FSaruhashi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ycanardeau%2FSaruhashi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ycanardeau%2FSaruhashi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ycanardeau","download_url":"https://codeload.github.com/ycanardeau/Saruhashi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244566931,"owners_count":20473451,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","gui","monogame"],"created_at":"2024-11-25T11:31:28.650Z","updated_at":"2025-03-20T06:48:01.818Z","avatar_url":"https://github.com/ycanardeau.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Saruhashi\nSaruhashi is a UI framework for [MonoGame](https://github.com/MonoGame/MonoGame). This project is mainly used by [OpenNSPW](https://github.com/OpenNSPW/OpenNSPW).\n\n## Installation\n\n```\nPM\u003e Install-Package Aigamo.Saruhashi.MonoGame\n```\n\n## Usage\n\n### Minimal Configuration\n\n```csharp\nusing Aigamo.Saruhashi;\nusing Aigamo.Saruhashi.MonoGame;\nusing Microsoft.Xna.Framework;\nusing MonoGame.Extended.Input.InputListeners;\nusing DrawingRectangle = System.Drawing.Rectangle;\nusing SaruhashiKeys = Aigamo.Saruhashi.Keys;\nusing SaruhashiMouseListener = Aigamo.Saruhashi.MonoGame.MouseListener;\nusing XnaKeys = Microsoft.Xna.Framework.Input.Keys;\n\nprivate WindowManager _windowManager;\n\nprotected override void LoadContent()\n{\n    var mouseListener = new SaruhashiMouseListener();\n    var keyboardListener = new KeyboardListener(new KeyboardListenerSettings\n    {\n        InitialDelayMilliseconds = 500,\n        RepeatDelayMilliseconds = 30,\n    });\n    Components.Add(new InputListenerComponent(this, mouseListener, keyboardListener));\n\n    _windowManager = new WindowManager(new DrawingRectangle(0, 0, 1024, 768), new MonoGameGraphicsFactory(_spriteBatch));\n    mouseListener.MouseDown += (sender, e) =\u003e _windowManager.OnMouseDown(e);\n    mouseListener.MouseMove += (sender, e) =\u003e _windowManager.OnMouseMove(e);\n    mouseListener.MouseUp += (sender, e) =\u003e _windowManager.OnMouseUp(e);\n    keyboardListener.KeyPressed += (sender, e) =\u003e _windowManager.OnKeyDown(new KeyEventArgs((SaruhashiKeys)e.Key));\n    keyboardListener.KeyReleased += (sender, e) =\u003e _windowManager.OnKeyUp(new KeyEventArgs((SaruhashiKeys)e.Key));\n    Window.TextInput += (sender, e) =\u003e _windowManager.OnKeyPress(new KeyPressEventArgs(e.Character));\n}\n\nprivate readonly RasterizerState _rasterizerState = new RasterizerState\n{\n    ScissorTestEnable = true,\n};\n\nprotected override void Draw(GameTime gameTime)\n{\n    GraphicsDevice.Clear(Color.CornflowerBlue);\n\n    base.Draw(gameTime);\n\n    _windowManager.Draw();\n}\n```\n\n### Form\n\n```csharp\nvar form = new Form();\nWindowManager.Root.Controls.Add(form);\nform.Show();\n```\n\n### Button\n\n```csharp\nvar button = new Button\n{\n    GetText = () =\u003e $\"{Environment.TickCount}\",\n};\nbutton.Click += (sender, e) =\u003e Game.Exit();\nWindowManager.Root.Controls.Add(button);\n```\n\n### CheckBox\n\n```csharp\nvar @checked = false;\nvar checkBox = new CheckBox\n{\n    Appearance = Appearance.Button,\n    AutoCheck = false,\n    IsChecked = () =\u003e @checked,\n};\ncheckBox.Click += (sender, e) =\u003e @checked = !@checked;\nWindowManager.Root.Controls.Add(checkBox);\n```\n\n### RadioButton\n\n```csharp\nvar @checked = false;\nvar radioButton = new RadioButton\n{\n    Appearance = Appearance.Button,\n    AutoCheck = false,\n    IsChecked = () =\u003e @checked,\n};\nradioButton.Click += (sender, e) =\u003e @checked = !@checked;\nWindowManager.Root.Controls.Add(radioButton);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fycanardeau%2Fsaruhashi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fycanardeau%2Fsaruhashi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fycanardeau%2Fsaruhashi/lists"}