{"id":24060762,"url":"https://github.com/jibaru/gominiwin","last_synced_at":"2026-05-07T19:02:33.910Z","repository":{"id":271477980,"uuid":"913370780","full_name":"Jibaru/gominiwin","owner":"Jibaru","description":"Mini-conjunto de funciones GUI para windows y linux","archived":false,"fork":false,"pushed_at":"2025-01-24T00:51:30.000Z","size":1874,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-18T11:56:15.484Z","etag":null,"topics":["gui","linux","miniwin","windows"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Jibaru.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-01-07T14:57:43.000Z","updated_at":"2025-01-24T00:51:33.000Z","dependencies_parsed_at":"2025-01-08T02:28:57.121Z","dependency_job_id":"a03790ae-d889-40db-b66e-04328815f630","html_url":"https://github.com/Jibaru/gominiwin","commit_stats":null,"previous_names":["jibaru/gominiwin"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jibaru%2Fgominiwin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jibaru%2Fgominiwin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jibaru%2Fgominiwin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jibaru%2Fgominiwin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Jibaru","download_url":"https://codeload.github.com/Jibaru/gominiwin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240868981,"owners_count":19870703,"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":["gui","linux","miniwin","windows"],"created_at":"2025-01-09T07:14:55.768Z","updated_at":"2025-11-19T19:04:22.299Z","avatar_url":"https://github.com/Jibaru.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch3 align=\"center\"\u003e\n  \u003cimg src=\"logo.png\" width=\"500\" alt=\"Logo\"/\u003e\u003cbr/\u003e\n\u003c/h3\u003e\n\nGoMiniWin es un mini-conjunto de funciones para abrir una ventana, pintar en ella y detectar la presión de algunas teclas. Lo justo para poder implementar juegos sencillos sin necesidad de conocer el API de Windows o Linux.\n\n## Inpiración\n\nEsta librería es un pseudo-port de la librería [MiniWin](https://github.com/pauek/MiniWin) realizada por Pauek pero para Go (la original es para c++). Créditos a él y échenle un ojito a su [canal](https://www.youtube.com/@pauek), es un grande!\n\n## Instalación\n\nAsegúrate de estar en Windows o Linux.\n\n```go\ngo get github.com/jibaru/gominiwin\n```\n\n## Plantilla básica\n\nPara iniciar una nueva ventana, deberás importar el paquete gominiwin y llamar a la función `New`.\n\n```go\npackage main\n\nimport (\n\t\"time\"\n\t\"github.com/jibaru/gominiwin\"\n\t\"github.com/jibaru/gominiwin/colors\"\n\t\"github.com/jibaru/gominiwin/keys\"\n)\n\nfunc main() {\n    // New incializa una nueva ventana, en este caso de 800x600\n\tw, err := gominiwin.New(\"Example\", 800, 600)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n    // Podemos pintar en la ventana usando una gorutina y un bucle infinito\n\tgo func() {\n\t\tfor {\n\t\t    // Pinta \"Hola GoMiniwin!\" en la posición (100, 100)\n\t\t    w.SetText(100, 100, \"Hola GoMiniwin!\")\n\t\t\t// Muestra lo pintado\n\t\t\tw.Refresh()\n\t\t\t// Tiempo de espera para no repintar tan rápido\n\t\t\ttime.Sleep(36 * time.Millisecond)\n\t\t}\n\t}()\n\n\t// Start inicializa la ventana, esta bloquea la gorutina principal\n\tw.Start()\n}\n```\n\n## Funcionamiento de la ventana\n\nAl ejecutar `New(...)`, se crea una nueva ventana. Actualmente GoMiniwin solo soporta el uso de una sola ventana, asi que evita crear múltiples ventanas. Esta ventana no se puede redimensionar con el ratón, pero puedes hacer con la función `Resize`.\n\nAlgo importante a tener en cuenta es que las coordenadas de la ventana son las coordenadas de una \"matriz de datos\", donde el X crece a medida que vas a la derecha, y la Y crece a medida que vas hacia abajo. El punto (0,0) está en la esquina superior izquierda.\n\n## Funciones\n\n### `New`\n\nCrea una nueva ventana.\n\n| Argumentos | Descripción             |\n| ---------- | ----------------------- |\n| `title`    | El título de la ventana |\n| `width`    | Ancho de la ventana     |\n| `height`   | Alto de la ventana      |\n\n| Valores de retorno | Descripción                                                                                                             |\n| ------------------ | ----------------------------------------------------------------------------------------------------------------------- |\n| Win                | Puntero a la ventana que implementa la interfaz `Win`. Esta contiene todas las operaciones para pintar o redimensionar. |\n| error              | En caso de error, mensaje informativo.                                                                                  |\n\n## Documentación de la interfaz `Win`\n\n#### `Point(x, y float32)`\n\nDibuja un punto en las coordenadas especificadas (usa el color actual).\n\n| Argumentos | Descripción             |\n| ---------- | ----------------------- |\n| `x`        | Coordenada X del punto. |\n| `y`        | Coordenada Y del punto. |\n\n#### `Line(x1, y1, x2, y2 float32)`\n\nDibuja una línea desde el punto `(x1, y1)` hasta el punto `(x2, y2)` (usa el color actual).\n\n| Argumentos | Descripción                     |\n| ---------- | ------------------------------- |\n| `x1`       | Coordenada X del punto inicial. |\n| `y1`       | Coordenada Y del punto inicial. |\n| `x2`       | Coordenada X del punto final.   |\n| `y2`       | Coordenada Y del punto final.   |\n\n#### `Rectangle(left, top, right, bottom float32)`\n\nDibuja un rectángulo definido por las esquinas superior izquierda (`left`, `top`) e inferior derecha (`right`, `bottom`). (usa el color actual para el borde).\n\n| Argumentos | Descripción                      |\n| ---------- | -------------------------------- |\n| `left`     | Coordenada X del lado izquierdo. |\n| `top`      | Coordenada Y del lado superior.  |\n| `right`    | Coordenada X del lado derecho.   |\n| `bottom`   | Coordenada Y del lado inferior.  |\n\n#### `FilledRectangle(left, top, right, bottom float32)`\n\nDibuja un rectángulo relleno (usa el color actual).\n\n| Argumentos | Descripción                      |\n| ---------- | -------------------------------- |\n| `left`     | Coordenada X del lado izquierdo. |\n| `top`      | Coordenada Y del lado superior.  |\n| `right`    | Coordenada X del lado derecho.   |\n| `bottom`   | Coordenada Y del lado inferior.  |\n\n#### `Circle(centerX, centerY, radius float32)`\n\nDibuja un círculo (usa el color actual para el borde).\n\n| Argumentos | Descripción                          |\n| ---------- | ------------------------------------ |\n| `centerX`  | Coordenada X del centro del círculo. |\n| `centerY`  | Coordenada Y del centro del círculo. |\n| `radius`   | Radio del círculo.                   |\n\n#### `FilledCircle(centerX, centerY, radius float32)`\n\nDibuja un círculo relleno (usa el color actual).\n\n| Argumentos | Descripción                          |\n| ---------- | ------------------------------------ |\n| `centerX`  | Coordenada X del centro del círculo. |\n| `centerY`  | Coordenada Y del centro del círculo. |\n| `radius`   | Radio del círculo.                   |\n\n#### `SetColor(c colors.Color)`\n\nEstablece el color actual para las operaciones de dibujo.\n\n| Argumentos | Descripción                      |\n| ---------- | -------------------------------- |\n| `c`        | Color en formato `colors.Color`. |\n\n#### `SetColorRGB(r, g, b int)`\n\nEstablece el color actual utilizando componentes RGB.\n\n| Argumentos | Descripción               |\n| ---------- | ------------------------- |\n| `r`        | Componente rojo (0-255).  |\n| `g`        | Componente verde (0-255). |\n| `b`        | Componente azul (0-255).  |\n\n#### `SetText(x, y float32, content string)`\n\nDibuja un texto en las coordenadas especificadas.\n\n| Argumentos | Descripción             |\n| ---------- | ----------------------- |\n| `x`        | Coordenada X del texto. |\n| `y`        | Coordenada Y del texto. |\n| `content`  | Texto a dibujar.        |\n\n#### `KeyPressed() int`\n\nDevuelve el código de la última tecla presionada.\n\n| Valores de retorno | Descripción                                |\n| ------------------ | ------------------------------------------ |\n| `int`              | Código de la tecla presionada (si existe). |\n\n#### `MouseState() (bool, float32, float32)`\n\nObtiene el estado actual del mouse.\n\n| Valores de retorno | Descripción                                    |\n| ------------------ | ---------------------------------------------- |\n| `bool`             | Indica si el cursor esta dentro de la ventana. |\n| `float32`          | Coordenada X del mouse.                        |\n| `float32`          | Coordenada Y del mouse.                        |\n\n#### `IsMouseInside() bool`\n\nDevuelve si el mouse está dentro de la ventana.\n\n| Valores de retorno | Descripción                                                |\n| ------------------ | ---------------------------------------------------------- |\n| `bool`             | `true` si el mouse está dentro, `false` en caso contrario. |\n\n#### `MouseX() float32`\n\nDevuelve la coordenada X actual del mouse.\n\n| Valores de retorno | Descripción             |\n| ------------------ | ----------------------- |\n| `float32`          | Coordenada X del mouse. |\n\n#### `MouseY() float32`\n\nDevuelve la coordenada Y actual del mouse.\n\n| Valores de retorno | Descripción             |\n| ------------------ | ----------------------- |\n| `float32`          | Coordenada Y del mouse. |\n\n#### `MouseButtons() (bool, bool)`\n\nDevuelve el estado de los botones del mouse.\n\n| Valores de retorno | Descripción                                    |\n| ------------------ | ---------------------------------------------- |\n| `bool`             | Estado del botón izquierdo (`true` o `false`). |\n| `bool`             | Estado del botón derecho (`true` o `false`).   |\n\n#### `MouseLeftClicked() bool`\n\nDevuelve si el botón izquierdo del mouse fue presionado.\n\n| Valores de retorno | Descripción                        |\n| ------------------ | ---------------------------------- |\n| `bool`             | `true` si el botón fue presionado. |\n\n#### `MouseRightClicked() bool`\n\nDevuelve si el botón derecho del mouse fue presionado.\n\n| Valores de retorno | Descripción                        |\n| ------------------ | ---------------------------------- |\n| `bool`             | `true` si el botón fue presionado. |\n\n#### `Start()`\n\nInicia el bucle principal de la ventana. Este bloquea la gorutina principal.\n\n#### `Clear()`\n\nLimpia el contenido actual de la ventana.\n\n#### `Refresh()`\n\nRefresca la ventana, mostrando los cambios realizados en ésta.\n\n#### `Width() int`\n\nDevuelve el ancho actual de la ventana.\n\n| Valores de retorno | Descripción       |\n| ------------------ | ----------------- |\n| `int`              | Ancho en píxeles. |\n\n#### `Height() int`\n\nDevuelve la altura actual de la ventana.\n\n| Valores de retorno | Descripción        |\n| ------------------ | ------------------ |\n| `int`              | Altura en píxeles. |\n\n#### `Resize(newWidth, newHeight int)`\n\nRedimensiona la ventana a un nuevo ancho y alto.\n\n| Argumentos  | Descripción                            |\n| ----------- | -------------------------------------- |\n| `newWidth`  | Nuevo ancho de la ventana en píxeles.  |\n| `newHeight` | Nueva altura de la ventana en píxeles. |\n\n#### `Close()`\n\nCierra la ventana y libera los recursos utilizados.\n\n## Ejemplos\n\n### Pizarra\n\n![Board](examples/board/ss.png)\n\n### Figuras\n\n![Figures](examples/figures/ss.png)\n\n### Pintar\n\n![Paint](examples/paint/ss.png)\n\n### Dino\n\n![Dino](examples/dino/ss.png)\n\n### Notepad\n\n![Notepad](examples/notepad/ss.png)\n\n### Imagen\n\n![Image](examples/image/ss.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjibaru%2Fgominiwin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjibaru%2Fgominiwin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjibaru%2Fgominiwin/lists"}