Color wrapper class

presentation
Andreas Butti 7 years ago
parent ca0d07f04f
commit c15aa20087
  1. 6
      src/control/SearchControl.cpp
  2. 3
      src/control/SearchControl.h
  3. 2
      src/control/jobs/AutosaveJob.cpp
  4. 2
      src/control/jobs/AutosaveJob.h
  5. 4
      src/control/jobs/BlockingJob.cpp
  6. 2
      src/control/jobs/BlockingJob.h
  7. 2
      src/control/jobs/ExportJob.cpp
  8. 2
      src/control/jobs/ExportJob.h
  9. 4
      src/control/jobs/Job.cpp
  10. 4
      src/control/jobs/Job.h
  11. 2
      src/control/jobs/PdfExportJob.cpp
  12. 2
      src/control/jobs/PdfExportJob.h
  13. 2
      src/control/jobs/PreviewJob.cpp
  14. 2
      src/control/jobs/PreviewJob.h
  15. 2
      src/control/jobs/RenderJob.cpp
  16. 2
      src/control/jobs/RenderJob.h
  17. 2
      src/control/jobs/SaveJob.cpp
  18. 2
      src/control/jobs/SaveJob.h
  19. 2
      src/control/jobs/Scheduler.cpp
  20. 11
      src/control/tools/EditSelection.cpp
  21. 15
      src/control/tools/Selection.cpp
  22. 8
      src/control/tools/VerticalToolHandler.cpp
  23. 34
      src/util/GtkColorWrapper.cpp
  24. 45
      src/util/GtkColorWrapper.h
  25. 2
      src/util/XournalTypeList.h

@ -37,7 +37,7 @@ void SearchControl::freeSearchResults()
}
}
void SearchControl::paint(cairo_t* cr, GdkRectangle* rect, double zoom, GdkColor color)
void SearchControl::paint(cairo_t* cr, GdkRectangle* rect, double zoom, GtkColorWrapper color)
{
XOJ_CHECK_TYPE(SearchControl);
@ -48,9 +48,9 @@ void SearchControl::paint(cairo_t* cr, GdkRectangle* rect, double zoom, GdkColor
{
XojPopplerRectangle* rect = (XojPopplerRectangle*) l->data;
cairo_rectangle(cr, rect->x1, rect->y1, rect->x2 - rect->x1, rect->y2 - rect->y1);
cairo_set_source_rgb(cr, color.red / 65536.0, color.green / 65536.0, color.blue / 65536.0);
color.apply(cr);
cairo_stroke_preserve(cr);
cairo_set_source_rgba(cr, color.red / 65536.0, color.green / 65536.0, color.blue / 65536.0, 0.3);
color.applyWithAlpha(cr, 0.3);
cairo_fill(cr);
}
}

@ -12,6 +12,7 @@
#pragma once
#include "model/PageRef.h"
#include "util/GtkColorWrapper.h"
#include "pdf/popplerdirect/poppler/XojPopplerPage.h"
class SearchControl
@ -21,7 +22,7 @@ public:
virtual ~SearchControl();
bool search(string text, int* occures, double* top);
void paint(cairo_t* cr, GdkRectangle* rect, double zoom, GdkColor color);
void paint(cairo_t* cr, GdkRectangle* rect, double zoom, GtkColorWrapper color);
private:
void freeSearchResults();

@ -29,7 +29,7 @@ void AutosaveJob::afterRun()
gtk_widget_destroy(dialog);
}
void AutosaveJob::run()
void AutosaveJob::run(bool noThreads)
{
XOJ_CHECK_TYPE(AutosaveJob);

@ -27,7 +27,7 @@ protected:
virtual ~AutosaveJob();
public:
virtual void run();
virtual void run(bool noThreads);
void afterRun();
virtual JobType getType();

@ -20,11 +20,11 @@ BlockingJob::~BlockingJob()
XOJ_RELEASE_TYPE(BlockingJob);
}
void BlockingJob::execute()
void BlockingJob::execute(bool noThreads)
{
XOJ_CHECK_TYPE(BlockingJob);
this->run();
this->run(false);
g_idle_add((GSourceFunc) finished, this->control);
}

@ -29,7 +29,7 @@ protected:
virtual ~BlockingJob();
public:
void execute();
void execute(bool noThreads);
virtual JobType getType();

@ -141,7 +141,7 @@ bool ExportJob::freeSurface(int id)
return true;
}
void ExportJob::run()
void ExportJob::run(bool noThreads)
{
XOJ_CHECK_TYPE(ExportJob);

@ -30,7 +30,7 @@ protected:
virtual ~ExportJob();
public:
virtual void run();
virtual void run(bool noThreads);
private:
bool createSurface(int id, double width, double height);

@ -55,11 +55,11 @@ void Job::deleteJob()
}
}
void Job::execute()
void Job::execute(bool noThreads)
{
XOJ_CHECK_TYPE(Job);
this->run();
this->run(noThreads);
}
void* Job::getSource()

@ -52,7 +52,7 @@ public:
/**
* this method is called
*/
virtual void execute();
virtual void execute(bool noThreads);
virtual void* getSource();
@ -60,7 +60,7 @@ protected:
/**
* override this method
*/
virtual void run() = 0;
virtual void run(bool noThreads) = 0;
/**
* This method should be called as _last_ operation in run

@ -102,7 +102,7 @@ void PdfExportJob::afterRun()
}
}
void PdfExportJob::run()
void PdfExportJob::run(bool noThreads)
{
XOJ_CHECK_TYPE(PdfExportJob);

@ -30,7 +30,7 @@ protected:
virtual ~PdfExportJob();
public:
void run();
void run(bool noThreads);
virtual void afterRun();
public:

@ -129,7 +129,7 @@ void PreviewJob::drawPage(int layer)
cairo_destroy(cr2);
}
void PreviewJob::run()
void PreviewJob::run(bool noThreads)
{
XOJ_CHECK_TYPE(PreviewJob);

@ -31,7 +31,7 @@ protected:
public:
virtual void* getSource();
virtual void run();
virtual void run(bool noThreads);
virtual JobType getType();

@ -204,7 +204,7 @@ private:
RepaintWidgetHandler* handler = NULL;
void RenderJob::run()
void RenderJob::run(bool noThreads)
{
XOJ_CHECK_TYPE(RenderJob);

@ -31,7 +31,7 @@ public:
void* getSource();
void run();
void run(bool noThreads);
public:
static void rerenderRectangle(RenderJob* renderJob, Rectangle* rect);

@ -23,7 +23,7 @@ SaveJob::~SaveJob()
XOJ_RELEASE_TYPE(SaveJob);
}
void SaveJob::run()
void SaveJob::run(bool noThreads)
{
XOJ_CHECK_TYPE(SaveJob);

@ -25,7 +25,7 @@ protected:
virtual ~SaveJob();
public:
virtual void run();
virtual void run(bool noThreads);
bool save();

@ -318,7 +318,7 @@ gpointer Scheduler::jobThreadCallback(Scheduler* scheduler)
g_mutex_lock(&scheduler->jobRunningMutex);
job->execute();
job->execute(false);
job->unref();
g_mutex_unlock(&scheduler->jobRunningMutex);

@ -16,6 +16,7 @@
#include "undo/FontUndoAction.h"
#include "undo/SizeUndoAction.h"
#include "undo/UndoRedoHandler.h"
#include "util/GtkColorWrapper.h"
#include "view/DocumentView.h"
#include <serializing/ObjectOutputStream.h>
@ -637,19 +638,19 @@ void EditSelection::paint(cairo_t* cr, double zoom)
cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
GdkColor selectionColor = view->getSelectionColor();
GtkColorWrapper selectionColor = view->getSelectionColor();
// set the line always the same size on display
cairo_set_line_width(cr, 1);
const double dashes[] = {10.0, 10.0};
cairo_set_dash(cr, dashes, sizeof(dashes) / sizeof(dashes[0]), 0);
cairo_set_source_rgb(cr, selectionColor.red / 65536.0, selectionColor.green / 65536.0, selectionColor.blue / 65536.0);
selectionColor.apply(cr);
cairo_rectangle(cr, x * zoom, y * zoom, width * zoom, height * zoom);
cairo_stroke_preserve(cr);
cairo_set_source_rgba(cr, selectionColor.red / 65536.0, selectionColor.green / 65536.0, selectionColor.blue / 65536.0, 0.3);
selectionColor.applyWithAlpha(cr, 0.3);
cairo_fill(cr);
cairo_set_dash(cr, NULL, 0, 0);
@ -683,8 +684,8 @@ void EditSelection::drawAnchorRect(cairo_t* cr, double x, double y, double zoom)
{
XOJ_CHECK_TYPE(EditSelection);
GdkColor selectionColor = view->getSelectionColor();
cairo_set_source_rgb(cr, selectionColor.red / 65536.0, selectionColor.green / 65536.0, selectionColor.blue / 65536.0);
GtkColorWrapper selectionColor = view->getSelectionColor();
selectionColor.apply(cr);
cairo_rectangle(cr, x * zoom - 4, y * zoom - 4, 8, 8);
cairo_stroke_preserve(cr);
cairo_set_source_rgb(cr, 1, 1, 1);

@ -1,6 +1,7 @@
#include "Selection.h"
#include "model/Layer.h"
#include "util/GtkColorWrapper.h"
Selection::Selection(Redrawable* view)
{
@ -142,12 +143,12 @@ void RectSelection::paint(cairo_t* cr, GdkRectangle* rect, double zoom)
{
XOJ_CHECK_TYPE(RectSelection);
GdkColor selectionColor = view->getSelectionColor();
GtkColorWrapper selectionColor = view->getSelectionColor();
// set the line always the same size on display
cairo_set_line_width(cr, 1 / zoom);
gdk_threads_enter();
gdk_cairo_set_source_color(cr, &selectionColor);
selectionColor.apply(cr);
gdk_threads_leave();
@ -164,8 +165,7 @@ void RectSelection::paint(cairo_t* cr, GdkRectangle* rect, double zoom)
cairo_close_path(cr);
cairo_stroke_preserve(cr);
cairo_set_source_rgba(cr, selectionColor.red / 65536.0,
selectionColor.green / 65536.0, selectionColor.blue / 65536.0, 0.3);
selectionColor.applyWithAlpha(cr, 0.3);
cairo_fill(cr);
}
@ -212,12 +212,12 @@ void RegionSelect::paint(cairo_t* cr, GdkRectangle* rect, double zoom)
// at least three points needed
if (this->points && this->points->next && this->points->next->next)
{
GdkColor selectionColor = view->getSelectionColor();
GtkColorWrapper selectionColor = view->getSelectionColor();
// set the line always the same size on display
cairo_set_line_width(cr, 1 / zoom);
gdk_threads_enter();
gdk_cairo_set_source_color(cr, &selectionColor);
selectionColor.apply(cr);
gdk_threads_leave();
RegionPoint* r0 = (RegionPoint*) this->points->data;
@ -232,8 +232,7 @@ void RegionSelect::paint(cairo_t* cr, GdkRectangle* rect, double zoom)
cairo_line_to(cr, r0->x, r0->y);
cairo_stroke_preserve(cr);
cairo_set_source_rgba(cr, selectionColor.red / 65536.0,
selectionColor.green / 65536.0, selectionColor.blue / 65536.0, 0.3);
selectionColor.applyWithAlpha(cr, 0.3);
cairo_fill(cr);
}
}

@ -2,6 +2,7 @@
#include "model/Layer.h"
#include "undo/UndoRedoHandler.h"
#include "util/GtkColorWrapper.h"
#include "view/DocumentView.h"
VerticalToolHandler::VerticalToolHandler(Redrawable* view, PageRef page, double y, double zoom)
@ -65,12 +66,12 @@ void VerticalToolHandler::paint(cairo_t* cr, GdkRectangle* rect, double zoom)
{
XOJ_CHECK_TYPE(VerticalToolHandler);
GdkColor selectionColor = view->getSelectionColor();
GtkColorWrapper selectionColor = view->getSelectionColor();
cairo_set_line_width(cr, 1);
gdk_threads_enter();
gdk_cairo_set_source_color(cr, &selectionColor);
selectionColor.apply(cr);
double y;
double height;
@ -89,8 +90,7 @@ void VerticalToolHandler::paint(cairo_t* cr, GdkRectangle* rect, double zoom)
cairo_rectangle(cr, 0, y * zoom, this->page->getWidth() * zoom, height * zoom);
cairo_stroke_preserve(cr);
cairo_set_source_rgba(cr,selectionColor.red / 65536.0,
selectionColor.green / 65536.0, selectionColor.blue / 65536.0, 0.3);
selectionColor.applyWithAlpha(cr, 0.3);
cairo_fill(cr);
cairo_set_source_surface(cr, this->crBuffer, 0, this->endY * zoom);

@ -0,0 +1,34 @@
#include "GtkColorWrapper.h"
GtkColorWrapper::GtkColorWrapper() : red(0), green(0), blue(0)
{
XOJ_INIT_TYPE(GtkColorWrapper);
}
GtkColorWrapper::GtkColorWrapper(const GdkColor& color) : red(color.red), green(color.green), blue(color.blue)
{
XOJ_INIT_TYPE(GtkColorWrapper);
}
GtkColorWrapper::~GtkColorWrapper()
{
XOJ_RELEASE_TYPE(GtkColorWrapper);
}
/**
* Apply the color to a cairo interface with "cairo_set_source_rgb"
*/
void GtkColorWrapper::apply(cairo_t* cr)
{
XOJ_CHECK_TYPE(GtkColorWrapper);
cairo_set_source_rgb(cr, red / 65536.0, green / 65536.0, blue / 65536.0);
}
/**
* Apply the color to a cairo interface with "cairo_set_source_rgba" and a specified alpha value
*/
void GtkColorWrapper::applyWithAlpha(cairo_t* cr, double alpha)
{
XOJ_CHECK_TYPE(GtkColorWrapper);
cairo_set_source_rgba(cr, red / 65536.0, green / 65536.0, blue / 65536.0, alpha);
}

@ -0,0 +1,45 @@
/*
* Xournal++
*
* Helper functions to wrap GdkColor/GdkRGBA color types used by GTK2 / GTK3
*
* @author Xournal++ Team
* https://github.com/xournalpp/xournalpp
*
* @license GNU GPLv2 or later
*/
#pragma once
#include <gdk/gdk.h>
#include <XournalType.h>
#include <cairo.h>
class GtkColorWrapper
{
public:
GtkColorWrapper();
GtkColorWrapper(const GdkColor& color);
virtual ~GtkColorWrapper();
public:
/**
* Apply the color to a cairo interface with "cairo_set_source_rgb"
*/
void apply(cairo_t* cr);
/**
* Apply the color to a cairo interface with "cairo_set_source_rgba" and a specified alpha value
*/
void applyWithAlpha(cairo_t* cr, double alpha);
private:
XOJ_TYPE_ATTRIB;
/**
* Color values, 0-65535
*/
guint16 red;
guint16 green;
guint16 blue;
};

@ -214,5 +214,7 @@ XOJ_DECLARE_TYPE(SidebarPreviewPages, 202);
XOJ_DECLARE_TYPE(SidebarPreviewLayers, 203);
XOJ_DECLARE_TYPE(SidebarPreviewPageEntry, 204);
XOJ_DECLARE_TYPE(SidebarPreviewLayerEntry, 205);
XOJ_DECLARE_TYPE(GtkColorWrapper, 206);
//XOJ_DECLARE_TYPE(XXXXXXXXXXXXXXXX, 206);

Loading…
Cancel
Save