You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.4 KiB
85 lines
2.4 KiB
#include "FillTransparencyDialog.h" |
|
|
|
FillTransparencyDialog::FillTransparencyDialog(GladeSearchpath* gladeSearchPath, int alpha) |
|
: GladeGui(gladeSearchPath, "fillTransparency.glade", "fillTransparencyDialog"), |
|
resultAlpha(-1) |
|
{ |
|
XOJ_INIT_TYPE(FillTransparencyDialog); |
|
|
|
GtkWidget* scaleAlpha = get("scaleAlpha"); |
|
|
|
gtk_range_set_value(GTK_RANGE(scaleAlpha), alpha / 255.0 * 100); |
|
|
|
setPreviewImage(alpha); |
|
|
|
g_signal_connect(scaleAlpha, "change-value", G_CALLBACK( |
|
+[](GtkRange* range, GtkScrollType scroll, gdouble value, FillTransparencyDialog* self) |
|
{ |
|
XOJ_CHECK_TYPE_OBJ(self, FillTransparencyDialog); |
|
self->setPreviewImage((int)(value / 100 * 255)); |
|
}), this); |
|
} |
|
|
|
FillTransparencyDialog::~FillTransparencyDialog() |
|
{ |
|
XOJ_RELEASE_TYPE(FillTransparencyDialog); |
|
} |
|
|
|
const int PREVIEW_WIDTH = 70; |
|
const int PREVIEW_HEIGTH = 50; |
|
const int PREVIEW_BORDER = 10; |
|
|
|
void FillTransparencyDialog::setPreviewImage(int alpha) |
|
{ |
|
cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, PREVIEW_WIDTH, PREVIEW_HEIGTH); |
|
cairo_t* cr = cairo_create(surface); |
|
|
|
cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); |
|
cairo_set_source_rgb(cr, 255, 255, 255); |
|
cairo_rectangle(cr, 0, 0, PREVIEW_WIDTH, PREVIEW_WIDTH); |
|
cairo_fill(cr); |
|
|
|
cairo_set_operator(cr, CAIRO_OPERATOR_OVER); |
|
cairo_set_source_rgba(cr, 0, 0x80 / 255.0, 0, alpha / 255.0); |
|
cairo_rectangle(cr, PREVIEW_BORDER, PREVIEW_BORDER, PREVIEW_WIDTH - PREVIEW_BORDER * 2, PREVIEW_HEIGTH - PREVIEW_BORDER * 2); |
|
cairo_fill(cr); |
|
|
|
cairo_set_line_width(cr, 5); |
|
cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); |
|
cairo_set_source_rgb(cr, 0, 0x80 / 255.0, 0); |
|
cairo_rectangle(cr, PREVIEW_BORDER, PREVIEW_BORDER, PREVIEW_WIDTH - PREVIEW_BORDER * 2, PREVIEW_HEIGTH - PREVIEW_BORDER * 2); |
|
cairo_stroke(cr); |
|
|
|
cairo_destroy(cr); |
|
|
|
GtkWidget* preview = get("imgPreview"); |
|
gtk_image_set_from_surface(GTK_IMAGE(preview), surface); |
|
} |
|
|
|
int FillTransparencyDialog::getResultAlpha() |
|
{ |
|
XOJ_CHECK_TYPE(FillTransparencyDialog); |
|
|
|
return resultAlpha; |
|
} |
|
|
|
void FillTransparencyDialog::show(GtkWindow* parent) |
|
{ |
|
XOJ_CHECK_TYPE(FillTransparencyDialog); |
|
|
|
gtk_window_set_transient_for(GTK_WINDOW(this->window), parent); |
|
int result = gtk_dialog_run(GTK_DIALOG(this->window)); |
|
gtk_widget_hide(this->window); |
|
|
|
// OK Button |
|
if (result == 1) |
|
{ |
|
|
|
GtkWidget* scaleAlpha = get("scaleAlpha"); |
|
resultAlpha = gtk_range_get_value(GTK_RANGE(scaleAlpha)); |
|
} |
|
else |
|
{ |
|
resultAlpha = -1; |
|
} |
|
}
|
|
|