Added Zig and X11 example for creating simple Window
| Author | Mitja Felicijan <mitja.felicijan@gmail.com> | 2024-09-15 07:54:55 +0200 |
| Committer | Mitja Felicijan <mitja.felicijan@gmail.com> | 2024-09-15 07:54:55 +0200 |
| Commit | c81c7b573aa98953ed77fdf8b318e67d3cbe267a (patch) |
|
-rw-r--r-- |
shell.nix | 6 | |
-rw-r--r-- |
zig-x11/.clang-format | 4 | |
-rw-r--r-- |
zig-x11/Makefile | 8 | |
-rw-r--r-- |
zig-x11/main.zig | 32 | |
-rw-r--r-- |
zig-x11/window.c | 15 |
5 files changed, 65 insertions, 0 deletions
| diff --git a/shell.nix b/shell.nix | |||
| 1 | { pkgs ? import <nixpkgs> {} }: |
1 | { pkgs ? import <nixpkgs> {} }: |
| 2 | pkgs.mkShell { |
2 | pkgs.mkShell { |
| 3 | nativeBuildInputs = with pkgs.buildPackages; [ |
3 | nativeBuildInputs = with pkgs.buildPackages; [ |
| 4 | # Compilers and tools. |
||
| 4 | binutils |
5 | binutils |
| 5 | gnumake |
6 | gnumake |
| 6 | nasm |
7 | nasm |
| 7 | tinycc |
8 | tinycc |
| 9 | clang |
||
| 8 | zig |
10 | zig |
| 9 | zls |
11 | zls |
| 12 | |||
| 13 | # Dev libraries and deps. |
||
| 14 | xorg.libX11 |
||
| 15 | xorg.libX11.dev |
||
| 10 | ]; |
16 | ]; |
| 11 | } |
17 | } |
| diff --git a/zig-x11/.clang-format b/zig-x11/.clang-format | |||
| 1 | BasedOnStyle: LLVM |
||
| 2 | ColumnLimit: 120 |
||
| 3 | IndentWidth: 4 |
||
| 4 | |||
| diff --git a/zig-x11/Makefile b/zig-x11/Makefile | |||
| 1 | default: |
||
| 2 | zig run main.zig -lX11 -lc |
||
| 3 | |||
| 4 | window-test: |
||
| 5 | clang window.c -o window -lX11 |
||
| 6 | |||
| 7 | window-test-zig: |
||
| 8 | zig cc window.c -o window -lX11 |
||
| diff --git a/zig-x11/main.zig b/zig-x11/main.zig | |||
| 1 | const std = @import("std"); |
||
| 2 | const xlib = @cImport({ |
||
| 3 | @cInclude("X11/Xlib.h"); |
||
| 4 | }); |
||
| 5 | |||
| 6 | pub fn main() !void { |
||
| 7 | const display = xlib.XOpenDisplay(null); |
||
| 8 | if (display == null) { |
||
| 9 | return error.DisplayOpenFailed; |
||
| 10 | } |
||
| 11 | |||
| 12 | const rootWindow = xlib.XDefaultRootWindow(display); |
||
| 13 | |||
| 14 | const mainWindow = xlib.XCreateSimpleWindow( |
||
| 15 | display, |
||
| 16 | rootWindow, |
||
| 17 | 0, |
||
| 18 | 0, |
||
| 19 | 800, |
||
| 20 | 600, |
||
| 21 | 0, |
||
| 22 | 0, |
||
| 23 | 0xFF0000, |
||
| 24 | ); |
||
| 25 | |||
| 26 | _ = xlib.XMapWindow(display, mainWindow); |
||
| 27 | _ = xlib.XFlush(display); |
||
| 28 | |||
| 29 | while (true) { |
||
| 30 | std.time.sleep(1 * std.time.ns_per_s); |
||
| 31 | } |
||
| 32 | } |
||
| diff --git a/zig-x11/window.c b/zig-x11/window.c | |||
| 1 | #include <X11/Xlib.h> |
||
| 2 | #include <unistd.h> |
||
| 3 | |||
| 4 | int main() { |
||
| 5 | Display *MainDisplay = XOpenDisplay(0); |
||
| 6 | Window RootWindow = XDefaultRootWindow(MainDisplay); |
||
| 7 | |||
| 8 | Window MainWindow = XCreateSimpleWindow(MainDisplay, RootWindow, 0, 0, 800, 600, 0, 0, 0xFF0000); |
||
| 9 | XMapWindow(MainDisplay, MainWindow); |
||
| 10 | XFlush(MainDisplay); |
||
| 11 | |||
| 12 | for (;;) { |
||
| 13 | sleep(1); |
||
| 14 | } |
||
| 15 | } |
||