Skip to content

Commit

Permalink
feat(modules): add pdf
Browse files Browse the repository at this point in the history
  • Loading branch information
Curve committed Jan 5, 2025
1 parent e34ffb0 commit 73b328a
Show file tree
Hide file tree
Showing 4 changed files with 144 additions and 0 deletions.
5 changes: 5 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ project(saucer-bindings LANGUAGES CXX VERSION 5.0.0)
# --------------------------------------------------------------------------------------------------------

option(saucer_desktop "Enable support for the desktop module" ON)
option(saucer_pdf "Enable support for the pdf module" ON)

# --------------------------------------------------------------------------------------------------------
# CMake options
Expand Down Expand Up @@ -94,3 +95,7 @@ include("cmake/module.cmake")
if (saucer_desktop)
add_subdirectory("modules/desktop")
endif()

if (saucer_pdf)
add_subdirectory("modules/pdf")
endif()
39 changes: 39 additions & 0 deletions modules/pdf/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
project(saucer-bindings-pdf LANGUAGES CXX VERSION 5.0.0)

# --------------------------------------------------------------------------------------------------------
# Setup library
# --------------------------------------------------------------------------------------------------------

add_library(${PROJECT_NAME} SHARED)
add_library(saucer::bindings::pdf ALIAS ${PROJECT_NAME})

target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_23)
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 23 CXX_EXTENSIONS OFF CXX_STANDARD_REQUIRED ON)

# --------------------------------------------------------------------------------------------------------
# Include directories
# --------------------------------------------------------------------------------------------------------

target_include_directories(${PROJECT_NAME} PUBLIC "include")
target_include_directories(${PROJECT_NAME} PRIVATE "include/saucer")

# --------------------------------------------------------------------------------------------------------
# Add Sources
# --------------------------------------------------------------------------------------------------------

target_sources(${PROJECT_NAME} PRIVATE
"src/pdf.cpp"
)

# --------------------------------------------------------------------------------------------------------
# Setup Dependencies
# --------------------------------------------------------------------------------------------------------

CPMFindPackage(
NAME saucer-pdf
VERSION 1.0.1
GIT_REPOSITORY "https://github.com/saucer/pdf"
)

target_link_libraries(${PROJECT_NAME} PRIVATE saucer::pdf)
saucer_bindings_add_module(${PROJECT_NAME} "SAUCER_PDF_EXPORT")
38 changes: 38 additions & 0 deletions modules/pdf/include/saucer/pdf.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#pragma once

#ifdef __cplusplus
extern "C"
{
#endif

#include "export.h"

#include <saucer/webview.h>

enum SAUCER_LAYOUT
{
SAUCER_LAYOUT_PORTRAIT,
SAUCER_LAYOUT_LANDSCAPE,
};

struct saucer_print_settings;

SAUCER_PDF_EXPORT saucer_print_settings *saucer_print_settings_new();
SAUCER_PDF_EXPORT void saucer_print_settings_free(saucer_print_settings *);

SAUCER_PDF_EXPORT void saucer_print_settings_set_file(saucer_print_settings *, const char *file);
SAUCER_PDF_EXPORT void saucer_print_settings_set_orientation(saucer_print_settings *, SAUCER_LAYOUT orientation);

SAUCER_PDF_EXPORT void saucer_print_settings_set_width(saucer_print_settings *, double width);
SAUCER_PDF_EXPORT void saucer_print_settings_set_height(saucer_print_settings *, double height);

struct saucer_pdf;

SAUCER_PDF_EXPORT saucer_pdf *saucer_pdf_new(saucer_handle *webview);
SAUCER_PDF_EXPORT void saucer_pdf_free(saucer_pdf *);

SAUCER_PDF_EXPORT void saucer_pdf_save(saucer_pdf *, saucer_print_settings *settings);

#ifdef __cplusplus
}
#endif
62 changes: 62 additions & 0 deletions modules/pdf/src/pdf.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#include "pdf.h"

#include "webview.hpp"
#include "utils/handle.hpp"

#include <saucer/modules/pdf.hpp>

struct saucer_print_settings : bindings::handle<saucer_print_settings, saucer::modules::print_settings>
{
};

struct saucer_pdf : bindings::handle<saucer_pdf, saucer::modules::pdf>
{
};

extern "C"
{
saucer_print_settings *saucer_print_settings_new()
{
return saucer_print_settings::make();
}

void saucer_print_settings_free(saucer_print_settings *handle)
{
delete handle;
}

void saucer_print_settings_set_file(saucer_print_settings *handle, const char *file)
{
handle->value().file = file;
}

void saucer_print_settings_set_orientation(saucer_print_settings *handle, SAUCER_LAYOUT orientation)
{
handle->value().orientation = static_cast<saucer::modules::layout>(orientation);
}

void saucer_print_settings_set_width(saucer_print_settings *handle, double width)
{
handle->value().size.first = width;
}

void saucer_print_settings_set_height(saucer_print_settings *handle, double height)
{
handle->value().size.second = height;
}

saucer_pdf *saucer_pdf_new(saucer_handle *webview)
{
return saucer_pdf::make(webview);
}

void saucer_pdf_free(saucer_pdf *handle)
{
delete handle;
}

void saucer_pdf_save(saucer_pdf *handle, saucer_print_settings *settings)
{
handle->value().save(settings->value());
}
}

0 comments on commit 73b328a

Please sign in to comment.