Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
3d2f5a0
Initial tiling_generator class stump
levyry Dec 10, 2024
3cf6167
Renaming to tiling and breaking apart to a .cpp and .hpp file
levyry Dec 10, 2024
a3fac20
Tidied up source and tiling classes
levyry Dec 10, 2024
4cdf282
Moved document preset to correct dir
levyry Dec 10, 2024
da3b7e9
Reorganized class structure
levyry Dec 10, 2024
7873228
size filter
Gilgames32 Dec 10, 2024
16f9359
mask filter
Gilgames32 Dec 10, 2024
13c88a0
Started work on tiling function
levyry Dec 10, 2024
0169cea
filterstore
Gilgames32 Dec 10, 2024
f869201
pasting
Gilgames32 Dec 10, 2024
b113b9e
Research into recursive function, Rect2D refactor
levyry Dec 11, 2024
9599e4f
Merge remote-tracking branch 'origin/main' into tiling
levyry Dec 11, 2024
6f6c640
CRAZY HAMBURGEf
levyry Dec 11, 2024
0a19d31
Merge remote-tracking branch 'origin/main' into tiling
Gilgames32 Feb 8, 2025
2b1fb8c
Merge remote-tracking branch 'origin/main' into config
Gilgames32 Feb 8, 2025
62602cd
change ImgSource to store path instead of cv::Mat
levyry Feb 8, 2025
5703b79
eugh
Gilgames32 Feb 8, 2025
56e6780
formatting
levyry Feb 8, 2025
7dbc070
cleanup and ponder
Gilgames32 Feb 16, 2025
239b47e
Merge remote-tracking branch 'origin/config' into retile
Gilgames32 Feb 16, 2025
c903214
it doesnt even build
Gilgames32 Feb 16, 2025
efa61b5
bruh
Gilgames32 Feb 16, 2025
41bf7c4
uml
Gilgames32 Feb 17, 2025
12c7f49
uml bump
Gilgames32 Feb 24, 2025
6110d82
cleanup
Gilgames32 Feb 24, 2025
4b964df
add cache
Gilgames32 Feb 26, 2025
591de08
include updates
Gilgames32 Mar 5, 2025
7e955a6
add document presets
Gilgames32 Mar 5, 2025
6597c5a
add gutter and guides
Gilgames32 Mar 5, 2025
b920cc2
better guides
Gilgames32 Mar 5, 2025
4e31d2f
ui building setup
Gilgames32 Mar 18, 2025
0374504
qml building
Gilgames32 Mar 18, 2025
d3ad495
toriel
Gilgames32 Mar 18, 2025
0af3b86
flick
Gilgames32 Mar 19, 2025
28c3ac1
filelist delegate experimenting
Gilgames32 Mar 19, 2025
3809cbd
dynamic list prep
Gilgames32 Mar 19, 2025
5a26880
add file picker dialog
Gilgames32 Mar 20, 2025
c51f37f
a little better flickable
Gilgames32 Mar 20, 2025
7d054a8
actually loading files (somewhat)
Gilgames32 Mar 20, 2025
e01dbbb
model properties
Gilgames32 Mar 20, 2025
4198a53
use system palette
Gilgames32 Mar 26, 2025
bb18c0e
view uml proto and renamings
Gilgames32 Mar 26, 2025
2b5417c
renaming in ui
Gilgames32 Mar 26, 2025
2d22cf4
file input ui stuff
Gilgames32 Mar 26, 2025
fa8a1a8
fancy size input, photoshop style
Gilgames32 Mar 28, 2025
ba088d2
mask ui preview
Gilgames32 Mar 28, 2025
a1ba608
json probe
Gilgames32 Apr 3, 2025
d5a53ff
preset dropdown stuff
Gilgames32 Apr 3, 2025
2a45a75
model bindings
Gilgames32 Apr 3, 2025
65ec1f3
missing file handling
Gilgames32 Apr 3, 2025
5713358
refarctor and better serparate the list and its entries
Gilgames32 Apr 9, 2025
9386f9a
fix binding loop
Gilgames32 Apr 10, 2025
c741fc7
refactor presets view
Gilgames32 Apr 10, 2025
eab6aef
integrate mask filter view
Gilgames32 Apr 10, 2025
ed6dcab
relative path fixes
Gilgames32 Apr 10, 2025
a69aa7a
Merge remote-tracking branch 'origin/main' into qt6-ui
Gilgames32 Apr 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,6 @@ output/
*.exe
*.out
*.app

# vscode
.vscode/settings.json
4 changes: 2 additions & 2 deletions .vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "c++17",
"cStandard": "c23",
"cppStandard": "c++23",
"intelliSenseMode": "gcc-x64"
}
],
Expand Down
63 changes: 54 additions & 9 deletions meson.build
Original file line number Diff line number Diff line change
@@ -1,24 +1,69 @@
project('printf', 'cpp',
default_options: ['cpp_std=c++17']
default_options: ['cpp_std=c++23']
)

# Dependencies
nlohmann_json = dependency('nlohmann_json', required: true)
opencv = dependency('opencv4', required: true)
qt6_dep = dependency('qt6', modules: ['Core'])
qt6_dep = dependency('qt6', modules: ['Core', 'Widgets', 'Gui', 'Qml'])




# Qt6 preprocessing
qt6 = import('qt6')

ui_files = files()

moc_headers = files(
'src/ui/source_entry_view.hpp',
'src/ui/image_source_view.hpp',
'src/ui/preset_view.hpp',
'src/ui/mask_filter_view.hpp',
)

qresources = files('src/qml/resources.qrc')

prep = qt6.preprocess(
moc_headers : moc_headers,
ui_files : ui_files,
qresources : qresources,
)


# Include directories
inc = include_directories(
'src',
'src/interfaces',
'src/img',
'src/img/filters',
'src/img/tiling',
'src/settings',
'src/util',
'src/ui',
'src/qml',
)

# Source files
srcs = files(
'src/main.cpp',
'src/img/filters/filter.hpp',
'src/img/filters/size.hpp',
'src/img/filters/size.cpp',
'src/img/filters/mask.hpp',
'src/img/filters/mask.cpp',
'src/img/filters/mask.cpp',
'src/img/filters/rotate.cpp',
'src/img/filters/size.cpp',
'src/img/filters/padding.cpp',
'src/img/tiling/grid_tiling.cpp',
'src/img/cached_image.cpp',
'src/img/image_source.cpp',
'src/settings/document_preset.cpp',
'src/ui/source_entry_view.cpp',
'src/ui/image_source_view.cpp',
'src/ui/mask_filter_view.cpp',
'src/ui/preset_view.cpp',
'src/util/jsonprobe.cpp',
'src/main.cpp',
)

# Executable
executable('printf', srcs,
executable('printf', [srcs, prep],
include_directories: inc,
dependencies: [nlohmann_json, opencv, qt6_dep]
)
9 changes: 9 additions & 0 deletions presets/document/tekercs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "609.6mm tekercs",
"roll_width_mm": 609.6,
"resolution_ppi": 300,
"margin_mm": 0,
"gutter_mm": 0,
"guide": true,
"correct_quantity": false
}
6 changes: 6 additions & 0 deletions presets/image/a3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "A3",
"width": 297,
"height": 420,
"suggested_resolution": 300
}
6 changes: 6 additions & 0 deletions presets/image/a4.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "A4",
"width": 210,
"height": 297,
"suggested_resolution": 300
}
4 changes: 4 additions & 0 deletions presets/mask/circlemask.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "Circle Mask",
"path": "assets/mask.png"
}
5 changes: 5 additions & 0 deletions presets/printer/evil_plotter.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"name": "Canon imagePROGRAF PRO-4000",
"max_print_height": 18000,
"min_print_height": 101.6
}
3 changes: 0 additions & 3 deletions presets/sample.json

This file was deleted.

26 changes: 26 additions & 0 deletions src/img/cached_image.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include "cached_image.hpp"

CachedImage::CachedImage(const ICachableImage& source) : source(source), isDirty(true) {}

cv::Mat CachedImage::get_img() {
regenerate();
return cache;
}

void CachedImage::regenerate() {
if (!isDirty) return;
cache = source.get_cachable();
isDirty = false;
}

size_t CachedImage::get_width() {
regenerate();
return cache.cols;
}

size_t CachedImage::get_height() {
regenerate();
return cache.rows;
}

void CachedImage::set_dirty() { isDirty = true; }
25 changes: 25 additions & 0 deletions src/img/cached_image.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#pragma once

#include <opencv2/opencv.hpp>
#include "icachable.hpp"
#include "icache.hpp"

class CachedImage : ICache {
private:
const ICachableImage& source;
cv::Mat cache;
bool isDirty;

void regenerate();

public:
CachedImage(const ICachableImage& source);

cv::Mat get_img();

size_t get_width();

size_t get_height();

void set_dirty() override;
};
2 changes: 1 addition & 1 deletion src/img/filters/filter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@

class Filter {
public:
virtual cv::Mat apply(const cv::Mat &image) = 0;
virtual cv::Mat apply(const cv::Mat &image) const = 0;
};
2 changes: 1 addition & 1 deletion src/img/filters/mask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

MaskFilter::MaskFilter(const cv::Mat &mask) : mask(mask) {}

cv::Mat MaskFilter::apply(const cv::Mat &image) {
cv::Mat MaskFilter::apply(const cv::Mat &image) const {
auto fitMask = SizeFilter::resize(mask, image.cols, image.rows);

if (invert) {
Expand Down
2 changes: 1 addition & 1 deletion src/img/filters/mask.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class MaskFilter : public Filter {
public:
MaskFilter(const cv::Mat &mask);

cv::Mat apply(const cv::Mat &image) override;
cv::Mat apply(const cv::Mat &image) const override;

void setInvert(bool invert);
};
44 changes: 44 additions & 0 deletions src/img/filters/padding.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#include "padding.hpp"

PaddingFilter::PaddingFilter(size_t padding, bool guide): padding(padding), guide(guide) {}

cv::Mat PaddingFilter::apply(const cv::Mat &image) const {
cv::Mat padded;
cv::copyMakeBorder(image, padded, padding, padding, padding, padding, cv::BORDER_CONSTANT, cv::Scalar(255, 255, 255));

if (guide) {
// TODO: make this configurable
int thickness = 1;
cv::Scalar color = cv::Scalar(0, 0, 0);
int width = padded.cols;
int height = padded.rows;

// the lines are outside of the image, full width
/*
cv::line(padded, cv::Point(0, padding - 1), cv::Point(padded.cols - 1, padding - 1), color, thickness, cv::LINE_8); // top
cv::line(padded, cv::Point(0, padded.rows - padding), cv::Point(padded.cols - 1, padded.rows - padding), color, thickness, cv::LINE_8); // bottom
cv::line(padded, cv::Point(padding - 1, 0), cv::Point(padding - 1, padded.rows - 1), color, thickness, cv::LINE_8); // left
cv::line(padded, cv::Point(padded.cols - padding, 0), cv::Point(padded.cols - padding, padded.rows - 1), color, thickness, cv::LINE_8); // right
*/

// the lines are only outside of the image, show only on the gutter
// top
cv::line(padded, cv::Point(0, padding), cv::Point(padding - 1, padding), color, thickness, cv::LINE_8);
cv::line(padded, cv::Point(width - padding, padding), cv::Point(width - 1, padding), color, thickness, cv::LINE_8);

// bottom
cv::line(padded, cv::Point(0, height - padding - 1), cv::Point(padding - 1, height - padding - 1), color, thickness, cv::LINE_8);
cv::line(padded, cv::Point(width - padding, height - padding - 1), cv::Point(width - 1, height - padding - 1), color, thickness, cv::LINE_8);

// left
cv::line(padded, cv::Point(padding, 0), cv::Point(padding, padding - 1), color, thickness, cv::LINE_8);
cv::line(padded, cv::Point(padding, height - padding), cv::Point(padding, height - 1), color, thickness, cv::LINE_8);

// right
cv::line(padded, cv::Point(width - padding - 1, 0), cv::Point(width - padding - 1, padding - 1), color, thickness, cv::LINE_8);
cv::line(padded, cv::Point(width - padding - 1, height - padding), cv::Point(width - padding - 1, height - 1), color, thickness, cv::LINE_8);

}

return padded;
}
15 changes: 15 additions & 0 deletions src/img/filters/padding.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#pragma once
#include <opencv2/imgproc.hpp>

#include "filter.hpp"

class PaddingFilter : public Filter {
private:
size_t padding;
bool guide;

public:
PaddingFilter(size_t padding, bool guide = false);

cv::Mat apply(const cv::Mat &image) const override;
};
9 changes: 9 additions & 0 deletions src/img/filters/rotate.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#include "rotate.hpp"

cv::Mat RotateFilter::apply(const cv::Mat &image) const { return RotateFilter::rotate(image, default_rotation_dir); }

cv::Mat RotateFilter::rotate(const cv::Mat &image, cv::RotateFlags rotation_dir) {
cv::Mat rotated;
cv::rotate(image, rotated, rotation_dir);
return rotated;
}
13 changes: 13 additions & 0 deletions src/img/filters/rotate.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#pragma once
#include <opencv2/imgproc.hpp>

#include "filter.hpp"

class RotateFilter : public Filter {
private:
static const cv::RotateFlags default_rotation_dir = cv::ROTATE_90_CLOCKWISE;

public:
cv::Mat apply(const cv::Mat &image) const override;
static cv::Mat rotate(const cv::Mat &image, cv::RotateFlags rotation_dir);
};
10 changes: 9 additions & 1 deletion src/img/filters/size.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,21 @@

SizeFilter::SizeFilter(int width, int height) : width(width), height(height) {}

cv::Mat SizeFilter::apply(const cv::Mat &image) { return SizeFilter::resize(image, width, height); }
cv::Mat SizeFilter::apply(const cv::Mat &image) const { return SizeFilter::resize(image, width, height); }

cv::Mat SizeFilter::resize(const cv::Mat &image, int width, int height, int interDown, int interUp) {
if (width == image.cols && height == image.rows) {
return image;
}

bool downScaling = width < image.cols || height < image.rows;

cv::Mat resized;
cv::resize(image, resized, cv::Size(width, height), 0, 0, downScaling ? interDown : interUp);

return resized;
}

cv::Mat SizeFilter::resize_to_width(const cv::Mat &image, int width, int interDown, int interUp) {
return SizeFilter::resize(image, width, image.rows * width / image.cols, interDown, interUp);
}
4 changes: 3 additions & 1 deletion src/img/filters/size.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ class SizeFilter : public Filter {
public:
SizeFilter(int width, int height);

cv::Mat apply(const cv::Mat &image) override;
cv::Mat apply(const cv::Mat &image) const override;

static cv::Mat resize(const cv::Mat &image, int width, int height, int interDown = sizeInterDown,
int interUp = sizeInterUp);

static cv::Mat resize_to_width(const cv::Mat &image, int width, int interDown = sizeInterDown, int interUp = sizeInterUp);
};
16 changes: 0 additions & 16 deletions src/img/griddy.cpp

This file was deleted.

28 changes: 28 additions & 0 deletions src/img/image_source.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#include "image_source.hpp"

ImageSource::ImageSource(cv::Mat source, size_t amount) : original(source), amount(amount), cached(*this), filters(), rotated(false) {
width = source.cols;
height = source.rows;
}

void ImageSource::add_filter(Filter * filter) {
filters.push_back(filter);
cached.set_dirty();
}

void ImageSource::clear_filters() {
for (auto filter : filters)
{
delete filter;
}
filters.clear();
cached.set_dirty();
}

cv::Mat ImageSource::apply_filters() const {
cv::Mat image = original;
for (auto filter : filters) {
image = filter->apply(image);
}
return image;
}
Loading
Loading