Skip to content

codeation/impress

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a212efb · Apr 22, 2025
Feb 5, 2025
Mar 4, 2025
Feb 27, 2024
Feb 5, 2025
Mar 4, 2025
Apr 4, 2025
Apr 22, 2025
May 26, 2018
Jul 25, 2018
Mar 4, 2025
Mar 4, 2025
Apr 4, 2025
Mar 4, 2025
Apr 22, 2025
Apr 22, 2025
Mar 4, 2025
Mar 4, 2025
Mar 4, 2025
Mar 4, 2025

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+ 3 libraries if you don't have them installed:

sudo apt-get install libgtk-3-dev
  1. Build impress terminal from source:
git clone https://github.com/codeation/it.git
cd it
make
cd ..
  1. Then run the example:
git clone https://github.com/codeation/impress.git
cd impress
IMPRESS_TERMINAL_PATH=../it/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.

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+ 3 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.9 and macOS 15.3.
  • 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).