No description
Find a file
2024-10-10 11:48:11 +08:00
.github clean deps and sync with darwin 2024-10-04 00:08:14 +08:00
demos deprecated bundle with static http server 2024-09-10 17:05:12 +08:00
src change dialogue apis for windows 2024-10-10 11:48:11 +08:00
tests init 2020-04-24 06:34:48 +08:00
.gitignore workaround for css injection on windows 2024-09-10 14:43:45 +08:00
CHANGELOG.md remove dialog's procs 2023-07-19 11:35:31 +08:00
config.nims refactor for arm64 2024-10-02 22:07:39 +08:00
crowngui.nimble v0.3.9 2024-10-09 08:44:15 +08:00
LICENSE Create LICENSE 2021-05-01 14:09:11 +08:00
logo.png readme 2021-03-27 17:13:21 +08:00
README.md update readme 2024-09-12 13:34:30 +08:00

crowngui Build Status

Web Technologies based Crossplatform GUI Framework

It uses Cocoa/WebKit on macOS, gtk-webkit2 on Linux and webview2 on Windows

crowngui contains managed code only, no native code.

crowngui uses nimpacker for bundling application easier.

Architecture

how bindProcs works?

figure generated via asciiflow


┌─────────────┐         ┌──────────────────────────────┐       ┌─────────────────────────┐
│             │         │                              │       │                         │
│             │         │store hook function in `eps`  │       │when trigger js function │
│             │         │hook accept one string param  │       │internally it use browser│
│  bindProcs  ├────────►│and returns string that wraps ├──────►│`postMessage` api send   │
│             │         │nim proc call.                │       │json string with scope,  │
│             │         │And generate js function and  │       │name, argument.          │
│             │         │dispatch to main queue.       │       │                         │
└─────────────┘         └──────────────────────────────┘       └────────────┬────────────┘
                                                                            │
                                                                            ▼
                        ┌────────────────────────────────────────────────────┐
                        │browser add callback when received message          │
                        │it calls Webview's `invokeCb` which implements      │
                        │as `generalExternalInvokeCallback`                  │
                        │it parse argument as json retrieve scope,           │
                        │name, argument,then call the hook stored.           │
                        │                                                    │
                        └────────────────────────────────────────────────────┘

Usage

file: yourexecutable.nim

import crowngui

when isMainModule:
  const   
    cssDark = staticRead"assets/dark.css".strip.unindent.cstring
    cssLight = staticRead"assets/light.css".strip.unindent.cstring

  let app = newApplication( staticRead("assets/demo.html") )
  let theme = if "--light-theme" in commandLineParams(): cssLight else: cssDark
  app.css(theme)
  app.run()
  app.exit()

Your project .nimble file

bin           = @["yourexecutable"]

nimpacker will bundle your executable to exe on windows, .app on mac

Your project root can have "logo.png" which will generate as icon of application.

CLI usage

nimpacker [build,run] --help

Usage:
  [build,run] [required&optional-params] [flags: string...]
Options:
  -h, --help                         print this cligen-erated help
  --help-syntax                      advanced: prepend,plurals,..
  -t=, --target=   string  REQUIRED  set target
  -r, --release    bool    false     set release

Examples

crown_excel excel viewer

gamode windows optimization tool for game

Development

run
nimpacker run --target macos

build
nimpacker build --target macos

Cross compilation for Windows

To cross compile for Windows from Linux or macOS using the MinGW-w64 toolchain:

nim c -d:mingw myproject.nim

Use --cpu:i386 or --cpu:amd64 to switch the CPU architecture.

The MinGW-w64 toolchain can be installed as follows:

Ubuntu: apt install mingw-w64
CentOS: yum install mingw32-gcc | mingw64-gcc - requires EPEL
OSX: brew install mingw-w64

References

Distribute your app and the WebView2 Runtime

WebView2 Win32 Reference