Categorygithub.com/codeation/impress
modulepackage
0.5.1
Repository: https://github.com/codeation/impress.git
Documentation: pkg.go.dev

# README

impress. Go GUI cross-platform library

PkgGoDev

See project site for a 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 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 a impress terminal binary. See impress terminal page for other options for downloading or building impress terminal app.

Technical details

Basic Principles of Library Design:

  • Performance of the application as well as native applications.
  • Facade pattern for masking complex components behind an API.
  • Simple and clean application code.
  • Minimal library API to follow the Go-way.
  • Limited use of other libraries (graphic, low-level or native).
  • Creating a GUI application without form designer or hard-coded widgets.

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

The library uses a separate application (GTK+ 3 terminal) for drawing instead of binding low-level library to a 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.8 and macOS 15.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.

Up to 2 ms from the moment you press the key, the mind-map application window is redrawn. Measured on a computer with an N200 processor without a video card.

Contributing

First, welcome:

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

# Packages

Package to register WebAssembly driver as default impress driver.
No description provided by the author
No description provided by the author
Package to register GTK driver as default impress driver.
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

MakeApplication creates a top application window for specified GUI driver.
Register is an internal function that makes the GUI driver available.

# Variables

NewApplication creates main application window for default GUI driver.
NewFont return a font selection struct for default GUI driver.
NewImage returns a image resources struct for default GUI driver.

# Structs

Application represents application top level window.
Font represents a font selection.
No description provided by the author
Image represents a draw-ready image.
Menu represents any menu node.
Window represents inner window.