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
}