Skip to content

Commit

Permalink
Refactor storage of PDF render output, and remove red preview bg col
Browse files Browse the repository at this point in the history
  • Loading branch information
kosude committed Jun 10, 2024
1 parent f59e69a commit 9eff623
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 22 deletions.
4 changes: 4 additions & 0 deletions examples/HelloWorld.tex
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,8 @@ \subsubsection{Article Information}

\emph{hello} hello $x^2, \mathbb R, \mathcal C, \mathfrak F, \int_0^1 \sin(x) \mathrm d x$

\pagebreak

This content is on a separate page.

\end{document}
16 changes: 5 additions & 11 deletions texedit/gui/pdf_viewer/pdf_canvas.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,31 +13,25 @@

namespace te::gui {
PDFCanvas::PDFCanvas(wxWindow *parent) : wxScrolledWindow{parent, wxID_ANY} {
SetBackgroundColour(*wxRED);

SetScrollbars(5, 50, 0, 100);
}

void PDFCanvas::RenderDocument(const pdfr::PDFDocument *doc) {
for (wxImage *img : _page_images) {
delete img;
}

// render document into list of bitmaps
_page_images = doc->RenderAll();
_rendered_pages = doc->RenderAll();
}

void PDFCanvas::OnPaint(wxPaintEvent &event) {
wxPaintDC dc(this);
DoPrepareDC(dc);

int yi = 0;
for (wxImage *img : _page_images) {
wxBitmap bmp = wxBitmap(*img, 32);

for (const pdfr::RenderedPage &page : _rendered_pages) {
// images have to be converted to a bitmap before being drawn
wxBitmap bmp = wxBitmap(*page.image, 32);
dc.DrawBitmap(bmp, 0, yi);

yi++;
yi += page.page_height + 50;
}
}

Expand Down
3 changes: 2 additions & 1 deletion texedit/gui/pdf_viewer/pdf_canvas.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#ifndef __texedit__pdf_canvas_hpp__
#define __texedit__pdf_canvas_hpp__

#include "pdf_render/rendered_page.hpp"
#include <wx/scrolwin.h>
#include <wx/image.h>
#include <vector>
Expand All @@ -27,7 +28,7 @@ namespace te::gui {
void OnPaint(wxPaintEvent &event);

private:
std::vector<wxImage *> _page_images{};
std::vector<pdfr::RenderedPage> _rendered_pages{};

wxDECLARE_EVENT_TABLE();
};
Expand Down
17 changes: 11 additions & 6 deletions texedit/pdf_render/pdf_document.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "except.hpp"

#include <wx/log.h>
#include <wx/image.h>

namespace te::pdfr {
PDFDocument::PDFDocument(const wxString &path) : _path{path} {
Expand All @@ -34,9 +35,9 @@ namespace te::pdfr {
}
}

std::vector<wxImage *> PDFDocument::RenderAll() const {
std::vector<RenderedPage> PDFDocument::RenderAll() const {
int pagen = _pages.size();
std::vector<wxImage *> ret(pagen);
std::vector<RenderedPage> ret(pagen);

int i = 0;
for (poppler::page *page : _pages) {
Expand All @@ -51,7 +52,9 @@ namespace te::pdfr {
unsigned char *rgb = (unsigned char *) malloc(sizeof(unsigned char) * img.width() * img.height() * 3);
unsigned char *a = (unsigned char *) malloc(sizeof(unsigned char) * img.width() * img.height());

int dims = img.width() * img.height();
int width = img.width(),
height = img.height();
int dims = width * height;
char *data = img.data();

for (int j = 0, k = 0; k < dims; j += 4, k++) {
Expand All @@ -63,9 +66,11 @@ namespace te::pdfr {
rgb[j + 2 - k] = data[j];
}

// converting from poppler image to wxImage
wxImage *wx = new wxImage(img.width(), img.height(), rgb, a, false);
ret[i] = wx;
ret[i] = RenderedPage {
std::make_unique<wxImage>(width, height, rgb, a, false),
width,
height
};

i++;
}
Expand Down
8 changes: 4 additions & 4 deletions texedit/pdf_render/pdf_document.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
#ifndef __texedit__pdf_document_hpp__
#define __texedit__pdf_document_hpp__

#include <vector>
#include "rendered_page.hpp"

#include <vector>
#include <wx/string.h>
#include <wx/bitmap.h>
#include <poppler-document.h>
#include <poppler-page-renderer.h>

Expand All @@ -24,8 +24,8 @@ namespace te::pdfr {
public:
PDFDocument(const wxString &path);

// Render all pages in the document into a vector of wxImages (note they must be freed after this).
std::vector<wxImage *> RenderAll() const;
// Render all pages in the document into a vector of RenderedPages (note they must be freed after this).
std::vector<RenderedPage> RenderAll() const;

private:
const wxString &_path;
Expand Down
25 changes: 25 additions & 0 deletions texedit/pdf_render/rendered_page.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Copyright (c) 2024 Jack Bennett.
* All Rights Reserved.
*
* See the LICENCE file for more information.
*/

#pragma once
#ifndef __texedit__rendered_page_hpp__
#define __texedit__rendered_page_hpp__

#include <memory>

class wxImage;

namespace te::pdfr {
struct RenderedPage {
public:
std::unique_ptr<wxImage> image;
int page_width;
int page_height;
};
}

#endif

0 comments on commit 9eff623

Please sign in to comment.