Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

codeation/impress

Repository files navigation

impress. Go GUI cross-platform library

PkgGoDev

See the project site for technical details and a library overview.

Some usage examples are in the examples folder.

Hello World Example

Let's say hello:

package main
import (
 "image"
 "image/color"
 "github.com/codeation/impress"
 "github.com/codeation/impress/event"
 _ "github.com/codeation/impress/duo"
)
func main() {
 app := impress.NewApplication(image.Rect(0, 0, 480, 240), "Hello World Application")
 defer app.Close()
 font := app.NewFont(15, map[string]string{"family": "Verdana"})
 defer font.Close()
 w := app.NewWindow(image.Rect(0, 0, 480, 240), color.RGBA{255, 255, 255, 255})
 defer w.Drop()
 w.Text("Hello, world!", font, image.Pt(200, 100), color.RGBA{0, 0, 0, 255})
 w.Line(image.Pt(200, 120), image.Pt(300, 120), color.RGBA{255, 0, 0, 255})
 w.Show()
 app.Sync()
 for {
 e := <-app.Chan()
 if e == event.DestroyEvent || e == event.KeyExit {
 break
 }
 }
}

See an explanation of the source code in a library overview.

To run this example on Debian/Ubuntu:

  1. Install gcc, make, pkg-config if you don't have them installed.

  2. Install GTK 4 libraries if you don't have them installed:

sudo apt-get install libgtk-4-dev
  1. Build impress terminal from source:
git clone https://github.com/codeation/it.git
cd it/four
make
cd ../..
  1. Then run the example:
git clone https://github.com/codeation/impress.git
cd impress
IMPRESS_TERMINAL_PATH=../it/four/it go run ./examples/simple/

Steps 0-2 are needed to build an impress terminal binary. See the impress terminal page for other options for downloading or building the impress terminal.

The environment variable IMPRESS_TERMINAL_PATH specifies the path to the built impress terminal.

Technical details

Basic Principles of Library Design:

  • Performance of the application as well as native applications.
  • Simple and clean application code.
  • Creating a GUI application without a form designer or hard-coded widgets.

The main idea is to stay away from the event-driven programming paradigm. See the "What's wrong with event-driven programming" page for more details.

The library uses a separate application (GTK terminal) for drawing instead of binding a low-level library to Golang.

Project State

  • The project is currently in its beta stage. It is highly suitable for the development of in-house applications.
  • The project was tested on Debian 12.10 and macOS 15.4.1.
  • While the API remains stable, please note that the specific details may be subject to change.

The project roadmap includes both short-term and long-term project stages.

A cross-platform mind-map application is being developed to showcase the core principles of the library.

Contributing

First, welcome:

  • Any clue to keep the project going (star, post, link, etc.).
  • Any recommendations about library design principles.
  • Contributions to the project, documentation, examples.
  • Bug report, open an issue.
  • Or any help to fix grammatical or writing errors (PR or issue).

Packages

No packages published

Contributors 2

Languages

AltStyle によって変換されたページ (->オリジナル) /