Introduction

ProGUI Overview

ProGUI is a high-performance, lightweight, cross-platform Graphical User Interface (GUI) framework designed for PureBasic. Built on top of modern hardware-accelerated rendering backends (Direct2D for Windows and Cairo for Linux) – ProGUI provides developers with the tools to create stunning, responsive, and highly customizable applications with a tiny footprint (858KB DLL).

By stepping away from the limitations of standard OS-drawn controls, ProGUI introduces a flexible, modern paradigm familiar to web developers, featuring Flexbox and CSS Grid layout engines, CSS-like skinning with cascading states, fluid animations, and high-quality 2D vector graphics without the need for an expensive, resource hungry Web browser based engine.

Key Features

1. Modern Window & Widget Management

At the core of ProGUI is a highly flexible object system consisting of Windows and Widgets.

2. Advanced Layout Engines

Say goodbye to manual pixel-perfect coordinate math. ProGUI handles responsive scaling through advanced web-standard layout engines:

3. CSS-Style Skinning & Theming

Separate your application’s logic from its appearance using a powerful CSS-like skinning engine:

4. Smooth Animation & Transitions

ProGUI boasts a built-in animation framework synchronized with display refresh rates:

5. Hardware-Accelerated 2D Graphics API

Render custom graphics directly inside drawing event handlers using a fully-featured vector API:

6. Event-Driven Architecture

A robust, non-blocking callback system routes user inputs and rendering routines reliably:

7. Per-Monitor DPI Awareness

ProGUI is engineered for high-resolution displays out of the box. Device Independent Pixels (DIPs) are used for all coordinates and sizing. When a window moves between monitors with different scaling factors (e.g., 100% to 150%), ProGUI triggers #PG_Event_DPI and automatically handles crisp sub-pixel scaling for layout, graphics, text, and shadows.

Where to go next?

To get started with ProGUI, explore the specific modules in this documentation: