# InkFlow
> A modern infinite whiteboard application built with **Python** and **PySide6**.
---
## π Project Status
InkFlow is currently in active development. The foundation of the application has been built, focusing on creating a scalable architecture that will support multiple drawing tools and future features.
---
# Features Implemented till date
## Pen Tool
* Smooth freehand drawing
* Rounded stroke caps
* Rounded joins for natural handwriting
* Adjustable pen width
* Automatic stroke creation using `QPainterPath`
---
## β’ Single Click Dot Drawing
InkFlow automatically detects when the mouse is clicked without movement and draws a perfectly centered filled dot instead of creating an empty stroke.
---
## Infinite Canvas
The application currently provides a large virtual drawing area using `QGraphicsScene`, allowing users to freely move around while drawing.
Current scene size:
```text
5000 Γ 5000 px
```
This will later evolve into a dynamically expanding infinite canvas.
---
## Panning
Navigate around the canvas using:
* Middle Mouse Button + Drag
* Hold **Space** + Left Mouse Drag
The camera moves independently of the drawing system, allowing a smooth workflow similar to professional whiteboard applications.
---
## Zoom
Implemented mouse-wheel zoom with:
* Zoom centered around the mouse cursor
* Geometric zoom progression
* Minimum zoom limit
* Maximum zoom limit
This provides smooth navigation without distortion.
---
# Architecture
One of the major goals of InkFlow is maintaining a clean and extensible architecture.
Instead of placing all functionality inside a single `Canvas` class, responsibilities have been separated.
```
MainWindow
β
βββ Canvas
β
βββ Camera (Pan & Zoom)
βββ Scene Management
βββ Tool System
β
βββ Active Tool
```
---
## Tool System
InkFlow has a modular tool architecture, which makes it easier to maintain.
Current hierarchy:
```
BaseTool
β
βββ PenTool
```
Each tool is responsible for implementing its own:
* Mouse Press
* Mouse Move
* Mouse Release
This allows future tools to be added without modifying the core canvas.
---
## Tool Registry
Canvas maintains a registry of available tools.
Example:
```python
self.tools = {
"pen": PenTool(self)
}
```
The active tool is simply a reference to one of these objects.
```python
self.active_tool = self.tools["pen"]
```
This makes switching tools straightforward while preserving each tool's internal state.
---
# Current Project Structure
```
InkFlow/
β
βββ main.py
β
βββ ui/
β βββ main_window.py
β βββ canvas.py
β
βββ tools/
β βββ base_tool.py
β βββ pen_tool.py
β
βββ assets/
```
---
# Current Development Goals
* Build a modular tool system
* Keep the codebase clean and scalable
* Separate UI logic from drawing logic
* Prepare the project for future expansion
---
# Planned Features
The following features are planned for future versions:
* Tool Toolbar
* Eraser Tool
* Rectangle Tool
* Circle Tool
* Line Tool
* Arrow Tool
* Text Tool
* Selection Tool
* Color Picker
* Brush Size Controls
* Undo / Redo
* Layers
* Infinite Dynamic Canvas
* Save / Load Projects
* Export to PNG
* Export to PDF
* Keyboard Shortcuts
* Custom Themes
---
# Design Philosophy
InkFlow is being designed with long-term maintainability in mind.
Instead of building features as one large class, the project follows an object-oriented architecture where each component has a single responsibility.
This approach makes adding new tools and features significantly easier while keeping the codebase organized and maintainable.
---
Controls:-
Panning = Mouse scroll wheel button
= space bar + mouse left click button
Drawing = left mouse button
- 3 devlogs
- 4h