# mateusgpe/tkblend architecture

> Architecture diagram of the GitHub repository mateusgpe/tkblend, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mateusgpe/tkblend
- Repository: https://github.com/mateusgpe/tkblend

## Overview

tkblend is a Tkinter vector-UI toolkit combining Python widgets and drawing APIs with a Blend2D C++ renderer. The main user workflow is to build or update a widget/canvas, draw through a Surface, then display the result in Tkinter; the README documents direct zero-copy blitting. Separate capabilities include themes, font/icon support, a CustomTkinter bridge, and PrismTK’s markup-to-rendering stack. Source excerpts and the index support the Python module relationships; several native and widget details are documented but not sampled, so those links are identified as documented or left unasserted.

Main entry points: [`tkblend/surface.py`](https://github.com/mateusgpe/tkblend/blob/main/tkblend/surface.py) (Drawing Surface), [`tkblend/prismtk/widget.py`](https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/widget.py) (PrismTK Widget), [`tkblend/widgets/base.py`](https://github.com/mateusgpe/tkblend/blob/main/tkblend/widgets/base.py) (Widget Base), [`tkblend/prismtk/dom.py`](https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/dom.py) (Scene DOM)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Tkinter UI"]
  node_api["Public API<br/>[__init__.py]"]
  node_widgets["Vector Widgets"]
  node_base["Widget Base<br/>[base.py]"]
  node_canvas["BlendCanvas<br/>[canvas.py]"]
  node_table["Data Table<br/>[table.py]"]
  node_inputs["Interactive Inputs<br/>[inputs.py]"]
end

subgraph group_render["Vector Rendering"]
  node_surface["Drawing Surface<br/>[surface.py]"]
  node_native["Native Bindings<br/>[bindings.cpp]"]
  node_raster["Blend2D Rasterizer<br/>[surface.cpp]"]
  node_blit["Native Blitting<br/>[blit_backend.h]"]
  node_shadows["Shadow Engine<br/>[shadow_engine.cpp]"]
end

subgraph group_style["Style and Assets"]
  node_stylepy["Theme Manager<br/>[theme.py]"]
  node_stylecpp["Style Engine<br/>[style_engine.cpp]"]
  node_defaults["Default Styles<br/>[default_styles.hpp]"]
  node_fonts["Font Support<br/>[font.py]"]
  node_fontmanager["Native Font Manager<br/>[font_manager.cpp]"]
  node_resolver["Font Resolver<br/>[font_resolver.hpp]"]
  node_icons["Icon Registry<br/>[icons.py]"]
end

subgraph group_prism["PrismTK"]
  node_prismwidget["PrismTK Widget<br/>[widget.py]"]
  node_parser["Markup Parser<br/>[parser.py]"]
  node_dom["Scene DOM<br/>[dom.py]"]
  node_css["CSS Styles<br/>[css.py]"]
  node_layout["Layout Engine<br/>[layout.py]"]
  node_events["Event Handling<br/>[events.py]"]
  node_state["Render State<br/>[state.py]"]
  node_prismrender["Prism Renderer<br/>[render.py]"]
end

subgraph group_bridge["Compatibility"]
  node_ctk["CustomTkinter Bridge"]
end

node_developer(("Application Developer"))
node_tk["Tkinter Display"]

node_developer -->|"uses API"| node_api
node_api -->|"exports widgets"| node_widgets
node_developer -->|"creates canvas"| node_canvas
node_widgets -->|"uses base"| node_base
node_table -->|"uses base"| node_base
node_inputs -->|"uses base"| node_base
node_base -->|"draws with"| node_surface
node_canvas -->|"draws with"| node_surface
node_table -->|"draws with"| node_surface
node_inputs -->|"draws with"| node_surface
node_surface -.->|"calls bindings"| node_native
node_native -.->|"dispatches rendering"| node_raster
node_raster -->|"blits pixels"| node_blit
node_blit -->|"updates display"| node_tk
node_base -->|"reads palette"| node_stylepy
node_base -->|"resolves style"| node_stylecpp
node_stylecpp -->|"loads defaults"| node_defaults
node_stylepy -->|"registers theme"| node_stylecpp
node_stylepy -->|"syncs fonts"| node_fonts
node_surface -->|"looks up icons"| node_icons
node_surface -->|"uses fonts"| node_fonts
node_fontmanager -->|"resolves fonts"| node_resolver
node_developer -->|"builds scene"| node_prismwidget
node_prismwidget -->|"parses markup"| node_parser
node_parser -->|"creates nodes"| node_dom
node_prismwidget -->|"loads styles"| node_css
node_css -->|"styles nodes"| node_dom
node_prismwidget -->|"computes layout"| node_layout
node_layout -->|"positions nodes"| node_dom
node_prismwidget -->|"routes events"| node_events
node_events -->|"updates states"| node_dom
node_prismwidget -->|"tracks state"| node_state
node_prismwidget -->|"renders scene"| node_prismrender
node_prismrender -->|"draws with"| node_surface
node_prismrender -->|"reads nodes"| node_dom
node_prismrender -->|"reads state"| node_state
node_ctk -->|"accelerates drawing"| node_surface
node_surface -.->|"renders shadows"| node_shadows

click node_api "https://github.com/mateusgpe/tkblend/blob/main/tkblend/__init__.py"
click node_widgets "https://github.com/mateusgpe/tkblend/tree/main/tkblend/widgets"
click node_base "https://github.com/mateusgpe/tkblend/blob/main/tkblend/widgets/base.py"
click node_canvas "https://github.com/mateusgpe/tkblend/blob/main/tkblend/canvas.py"
click node_table "https://github.com/mateusgpe/tkblend/blob/main/tkblend/widgets/table.py"
click node_inputs "https://github.com/mateusgpe/tkblend/blob/main/tkblend/widgets/inputs.py"
click node_surface "https://github.com/mateusgpe/tkblend/blob/main/tkblend/surface.py"
click node_native "https://github.com/mateusgpe/tkblend/blob/main/src/bindings.cpp"
click node_raster "https://github.com/mateusgpe/tkblend/blob/main/src/surface.cpp"
click node_blit "https://github.com/mateusgpe/tkblend/blob/main/src/blit/blit_backend.h"
click node_stylepy "https://github.com/mateusgpe/tkblend/blob/main/tkblend/theme.py"
click node_stylecpp "https://github.com/mateusgpe/tkblend/blob/main/src/style_engine.cpp"
click node_defaults "https://github.com/mateusgpe/tkblend/blob/main/src/default_styles.hpp"
click node_fonts "https://github.com/mateusgpe/tkblend/blob/main/tkblend/font.py"
click node_fontmanager "https://github.com/mateusgpe/tkblend/blob/main/src/font_manager.cpp"
click node_resolver "https://github.com/mateusgpe/tkblend/blob/main/src/font/font_resolver.hpp"
click node_icons "https://github.com/mateusgpe/tkblend/blob/main/tkblend/icons.py"
click node_prismwidget "https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/widget.py"
click node_parser "https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/parser.py"
click node_dom "https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/dom.py"
click node_css "https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/css.py"
click node_layout "https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/layout.py"
click node_events "https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/events.py"
click node_state "https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/state.py"
click node_prismrender "https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/render.py"
click node_ctk "https://github.com/mateusgpe/tkblend/tree/main/tkblend/ctk"
click node_shadows "https://github.com/mateusgpe/tkblend/blob/main/src/shadow_engine.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_api,node_widgets,node_base,node_canvas,node_table,node_inputs toneBlue
class node_surface,node_native,node_raster,node_blit,node_shadows toneAmber
class node_stylepy,node_stylecpp,node_defaults,node_fonts,node_fontmanager,node_resolver,node_icons toneMint
class node_prismwidget,node_parser,node_dom,node_css,node_layout,node_events,node_state,node_prismrender toneRose
class node_ctk,node_developer,node_tk toneIndigo
```

## Components

### Tkinter UI

- [Public API](https://github.com/mateusgpe/tkblend/blob/main/tkblend/__init__.py): `tkblend/__init__.py`
- [Vector Widgets](https://github.com/mateusgpe/tkblend/tree/main/tkblend/widgets): `tkblend/widgets`
- [Widget Base](https://github.com/mateusgpe/tkblend/blob/main/tkblend/widgets/base.py): `tkblend/widgets/base.py`
- [BlendCanvas](https://github.com/mateusgpe/tkblend/blob/main/tkblend/canvas.py): `tkblend/canvas.py`
- [Data Table](https://github.com/mateusgpe/tkblend/blob/main/tkblend/widgets/table.py): `tkblend/widgets/table.py`
- [Interactive Inputs](https://github.com/mateusgpe/tkblend/blob/main/tkblend/widgets/inputs.py): `tkblend/widgets/inputs.py`

### Vector Rendering

- [Drawing Surface](https://github.com/mateusgpe/tkblend/blob/main/tkblend/surface.py): `tkblend/surface.py`
- [Native Bindings](https://github.com/mateusgpe/tkblend/blob/main/src/bindings.cpp): `src/bindings.cpp`
- [Blend2D Rasterizer](https://github.com/mateusgpe/tkblend/blob/main/src/surface.cpp): `src/surface.cpp`
- [Native Blitting](https://github.com/mateusgpe/tkblend/blob/main/src/blit/blit_backend.h): `src/blit/blit_backend.h`
- [Shadow Engine](https://github.com/mateusgpe/tkblend/blob/main/src/shadow_engine.cpp): `src/shadow_engine.cpp`

### Style and Assets

- [Theme Manager](https://github.com/mateusgpe/tkblend/blob/main/tkblend/theme.py): `tkblend/theme.py`
- [Style Engine](https://github.com/mateusgpe/tkblend/blob/main/src/style_engine.cpp): `src/style_engine.cpp`
- [Default Styles](https://github.com/mateusgpe/tkblend/blob/main/src/default_styles.hpp): `src/default_styles.hpp`
- [Font Support](https://github.com/mateusgpe/tkblend/blob/main/tkblend/font.py): `tkblend/font.py`
- [Native Font Manager](https://github.com/mateusgpe/tkblend/blob/main/src/font_manager.cpp): `src/font_manager.cpp`
- [Font Resolver](https://github.com/mateusgpe/tkblend/blob/main/src/font/font_resolver.hpp): `src/font/font_resolver.hpp`
- [Icon Registry](https://github.com/mateusgpe/tkblend/blob/main/tkblend/icons.py): `tkblend/icons.py`

### PrismTK

- [PrismTK Widget](https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/widget.py): `tkblend/prismtk/widget.py`
- [Markup Parser](https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/parser.py): `tkblend/prismtk/parser.py`
- [Scene DOM](https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/dom.py): `tkblend/prismtk/dom.py`
- [CSS Styles](https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/css.py): `tkblend/prismtk/css.py`
- [Layout Engine](https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/layout.py): `tkblend/prismtk/layout.py`
- [Event Handling](https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/events.py): `tkblend/prismtk/events.py`
- [Render State](https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/state.py): `tkblend/prismtk/state.py`
- [Prism Renderer](https://github.com/mateusgpe/tkblend/blob/main/tkblend/prismtk/render.py): `tkblend/prismtk/render.py`

### Compatibility

- [CustomTkinter Bridge](https://github.com/mateusgpe/tkblend/tree/main/tkblend/ctk): `tkblend/ctk`

### Other components

- **Application Developer**
- **Tkinter Display**

## Connections

- Application Developer → Public API: uses API (evidence: `README.md`)
- Public API → Vector Widgets: exports widgets (evidence: `tkblend/__init__.py`)
- Application Developer → BlendCanvas: creates canvas (evidence: `README.md`)
- Vector Widgets → Widget Base: uses base (evidence: `tkblend/widgets/inputs.py`)
- Data Table → Widget Base: uses base (evidence: `tkblend/widgets/table.py`)
- Interactive Inputs → Widget Base: uses base (evidence: `tkblend/widgets/inputs.py`)
- Widget Base → Drawing Surface: draws with (evidence: `tkblend/widgets/base.py`)
- BlendCanvas → Drawing Surface: draws with (evidence: `tkblend/canvas.py`)
- Data Table → Drawing Surface: draws with (evidence: `tkblend/widgets/table.py`)
- Interactive Inputs → Drawing Surface: draws with (evidence: `tkblend/widgets/inputs.py`)
- Drawing Surface → Native Bindings: calls bindings
- Native Bindings → Blend2D Rasterizer: dispatches rendering
- Blend2D Rasterizer → Native Blitting: blits pixels (evidence: `README.md`)
- Native Blitting → Tkinter Display: updates display (evidence: `README.md`)
- Widget Base → Theme Manager: reads palette (evidence: `tkblend/widgets/base.py`)
- Widget Base → Style Engine: resolves style (evidence: `tkblend/widgets/base.py`)
- Style Engine → Default Styles: loads defaults (evidence: `src/style_engine.cpp`)
- Theme Manager → Style Engine: registers theme (evidence: `tkblend/theme.py`)
- Theme Manager → Font Support: syncs fonts (evidence: `tkblend/theme.py`)
- Drawing Surface → Icon Registry: looks up icons (evidence: `tkblend/surface.py`)
- Drawing Surface → Font Support: uses fonts (evidence: `tkblend/surface.py`)
- Native Font Manager → Font Resolver: resolves fonts (evidence: `src/font_manager.cpp`)
- Application Developer → PrismTK Widget: builds scene (evidence: `README.md`)
- PrismTK Widget → Markup Parser: parses markup (evidence: `tkblend/prismtk/widget.py`)
- Markup Parser → Scene DOM: creates nodes (evidence: `tkblend/prismtk/parser.py`)
- PrismTK Widget → CSS Styles: loads styles (evidence: `tkblend/prismtk/widget.py`)
- CSS Styles → Scene DOM: styles nodes (evidence: `tkblend/prismtk/css.py`)
- PrismTK Widget → Layout Engine: computes layout (evidence: `tkblend/prismtk/widget.py`)
- Layout Engine → Scene DOM: positions nodes (evidence: `tkblend/prismtk/layout.py`)
- PrismTK Widget → Event Handling: routes events (evidence: `tkblend/prismtk/widget.py`)
- Event Handling → Scene DOM: updates states (evidence: `tkblend/prismtk/events.py`)
- PrismTK Widget → Render State: tracks state (evidence: `tkblend/prismtk/widget.py`)
- PrismTK Widget → Prism Renderer: renders scene (evidence: `tkblend/prismtk/widget.py`)
- Prism Renderer → Drawing Surface: draws with (evidence: `tkblend/prismtk/render.py`)
- Prism Renderer → Scene DOM: reads nodes (evidence: `tkblend/prismtk/render.py`)
- Prism Renderer → Render State: reads state (evidence: `tkblend/prismtk/render.py`)
- CustomTkinter Bridge → Drawing Surface: accelerates drawing (evidence: `README.md`)
- Drawing Surface → Shadow Engine: renders shadows
