Skip to content

VedDevs/InkFlow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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:

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:

self.tools = {
    "pen": PenTool(self)
}

The active tool is simply a reference to one of these objects.

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.


📜 License

This project is currently under development.

License information will be added once the first public release is available.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages