Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
sammycage committed May 23, 2024
1 parent e052076 commit 0413b10
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 13 deletions.
4 changes: 3 additions & 1 deletion include/plutobook.h
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,8 @@ typedef enum _plutobook_status {
PLUTOBOOK_STATUS_SUCCESS = 0,
PLUTOBOOK_STATUS_MEMORY_ERROR = 1,
PLUTOBOOK_STATUS_LOAD_ERROR = 10,
PLUTOBOOK_STATUS_WRITE_ERROR = 11
PLUTOBOOK_STATUS_WRITE_ERROR = 11,
PLUTOBOOK_STATUS_CANVAS_ERROR = 12
} plutobook_status_t;

typedef plutobook_status_t (*plutobook_stream_write_callback_t)(void* closure, const char* data, unsigned int length);
Expand All @@ -198,6 +199,7 @@ PLUTOBOOK_API void plutobook_canvas_save_state(plutobook_canvas_t* canvas);
PLUTOBOOK_API void plutobook_canvas_restore_state(plutobook_canvas_t* canvas);
PLUTOBOOK_API cairo_surface_t* plutobook_canvas_get_surface(const plutobook_canvas_t* canvas);
PLUTOBOOK_API cairo_t* plutobook_canvas_get_context(const plutobook_canvas_t* canvas);
PLUTOBOOK_API plutobook_status_t plutobook_canvas_get_status(const plutobook_canvas_t* canvas);

typedef enum _plutobook_image_format {
PLUTOBOOK_IMAGE_FORMAT_INVALID = -1,
Expand Down
18 changes: 12 additions & 6 deletions include/plutobook.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -306,12 +306,6 @@ class PLUTOBOOK_API Canvas {
*/
void restoreState();

/**
* @brief Checks if the canvas is null.
* return true if the canvas is null (i.e., invalid), false otherwise.
*/
bool isNull() const { return !m_canvas; }

/**
* @brief surface
* @return
Expand All @@ -330,6 +324,18 @@ class PLUTOBOOK_API Canvas {
*/
plutobook_canvas_t* canvas() const { return m_canvas; }

/**
* @brief isNull
* @return
*/
bool isNull() const { return !m_canvas; }

/**
* @brief isGood
* @return
*/
bool isGood() const;

protected:
Canvas(const Canvas&) = delete;
Canvas& operator=(const Canvas&) = delete;
Expand Down
11 changes: 9 additions & 2 deletions source/plutobook.cc
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,13 @@ cairo_t* plutobook_canvas_get_context(const plutobook_canvas_t* canvas)
return canvas->context;
}

plutobook_status_t plutobook_canvas_get_status(const plutobook_canvas_t* canvas)
{
if(canvas == nullptr || cairo_status(canvas->context) || cairo_surface_status(canvas->surface))
return PLUTOBOOK_STATUS_CANVAS_ERROR;
return PLUTOBOOK_STATUS_SUCCESS;
}

plutobook_canvas_t* plutobook_image_canvas_create(int width, int height, plutobook_image_format_t format)
{
return plutobook_canvas_create(cairo_image_surface_create((cairo_format_t)(format), width, height));
Expand Down Expand Up @@ -188,7 +195,7 @@ int plutobook_image_canvas_get_stride(const plutobook_canvas_t* canvas)
plutobook_status_t plutobook_image_canvas_write_to_png(const plutobook_canvas_t* canvas, const char* filename)
{
if(canvas == nullptr)
return PLUTOBOOK_STATUS_MEMORY_ERROR;
return PLUTOBOOK_STATUS_WRITE_ERROR;
if(cairo_surface_write_to_png(canvas->surface, filename))
return PLUTOBOOK_STATUS_WRITE_ERROR;
return PLUTOBOOK_STATUS_SUCCESS;
Expand All @@ -197,7 +204,7 @@ plutobook_status_t plutobook_image_canvas_write_to_png(const plutobook_canvas_t*
plutobook_status_t plutobook_image_canvas_write_to_png_stream(const plutobook_canvas_t* canvas, plutobook_stream_write_callback_t callback, void* closure)
{
if(canvas == nullptr)
return PLUTOBOOK_STATUS_MEMORY_ERROR;
return PLUTOBOOK_STATUS_WRITE_ERROR;
if(cairo_surface_write_to_png_stream(canvas->surface, (cairo_write_func_t)(callback), closure))
return PLUTOBOOK_STATUS_WRITE_ERROR;
return PLUTOBOOK_STATUS_SUCCESS;
Expand Down
15 changes: 11 additions & 4 deletions source/plutobook.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,11 @@ cairo_t* Canvas::context() const
return plutobook_canvas_get_context(m_canvas);
}

bool Canvas::isGood() const
{
return plutobook_canvas_get_status(m_canvas) == PLUTOBOOK_STATUS_SUCCESS;
}

ImageCanvas::ImageCanvas(int width, int height, ImageFormat format)
: Canvas(plutobook_image_canvas_create(width, height, (plutobook_image_format_t)(format)))
{
Expand Down Expand Up @@ -440,13 +445,15 @@ bool Book::writeToPdf(plutobook_stream_write_callback_t callback, void* closure,
canvas.setKeywords(m_keywords);
canvas.setCreationDate(m_creationDate);
canvas.setModificationDate(m_modificationDate);
for(auto pageIndex = fromPage - 1; pageStep > 0 ? pageIndex < toPage : pageIndex > toPage; pageIndex += pageStep) {
canvas.setPageSize(pageSizeAt(pageIndex));
renderPage(canvas, pageIndex);
for(auto pageIndex = fromPage; pageStep > 0 ? pageIndex <= toPage : pageIndex >= toPage; pageIndex += pageStep) {
if(!canvas.isGood())
break;
canvas.setPageSize(pageSizeAt(pageIndex - 1));
renderPage(canvas, pageIndex - 1);
canvas.showPage();
}

return true;
return canvas.isGood();
}

bool Book::writeToPng(const std::string& filename, ImageFormat format) const
Expand Down

0 comments on commit 0413b10

Please sign in to comment.