turn pixfader into a cairowidget

This commit is contained in:
Robin Gareus 2014-10-28 02:18:46 +01:00
parent b04414d170
commit dc39448a22
2 changed files with 19 additions and 28 deletions

View File

@ -23,7 +23,7 @@
#include <cmath>
#include <stdint.h>
#include <gtkmm/drawingarea.h>
#include "gtkmm2ext/cairo_widget.h"
#include <gtkmm/adjustment.h>
#include <gdkmm.h>
@ -31,7 +31,7 @@
namespace Gtkmm2ext {
class LIBGTKMM2EXT_API PixFader : public Gtk::DrawingArea
class LIBGTKMM2EXT_API PixFader : public CairoWidget
{
public:
PixFader (Gtk::Adjustment& adjustment, int orientation, int span, int girth);
@ -57,7 +57,7 @@ class LIBGTKMM2EXT_API PixFader : public Gtk::DrawingArea
void on_size_request (GtkRequisition*);
void on_size_allocate (Gtk::Allocation& alloc);
bool on_expose_event (GdkEventExpose*);
void render (cairo_t *, cairo_rectangle_t*);
bool on_button_press_event (GdkEventButton*);
bool on_button_release_event (GdkEventButton*);
bool on_motion_notify_event (GdkEventMotion*);

View File

@ -74,9 +74,9 @@ PixFader::PixFader (Gtk::Adjustment& adj, int orientation, int fader_length, int
_adjustment.signal_changed().connect (mem_fun (*this, &PixFader::adjustment_changed));
if (_orien == VERT) {
DrawingArea::set_size_request(_girth, _span);
CairoWidget::set_size_request(_girth, _span);
} else {
DrawingArea::set_size_request(_span, _girth);
CairoWidget::set_size_request(_span, _girth);
}
}
@ -196,16 +196,9 @@ PixFader::create_patterns ()
cairo_surface_destroy (surface);
}
bool
PixFader::on_expose_event (GdkEventExpose* ev)
void
PixFader::render (cairo_t *cr, cairo_rectangle_t* area)
{
Cairo::RefPtr<Cairo::Context> context = get_window()->create_cairo_context();
cairo_t* cr = context->cobj();
// clip to expose area
cairo_rectangle (cr, ev->area.x, ev->area.y, ev->area.width, ev->area.height);
cairo_clip (cr);
if (!_pattern) {
create_patterns();
}
@ -219,9 +212,9 @@ PixFader::on_expose_event (GdkEventExpose* ev)
*/
CairoWidget::set_source_rgb_a (cr, get_style()->get_bg (get_state()), 1);
cairo_rectangle (cr, ev->area.x, ev->area.y, ev->area.width, ev->area.height);
cairo_rectangle (cr, area->x, area->y, area->width, area->height);
cairo_fill (cr);
return true;
return;
}
OnExpose();
@ -294,21 +287,21 @@ PixFader::on_expose_event (GdkEventExpose* ev)
/* draw the unity-position line if it's not at either end*/
if (!(_tweaks & NoShowUnityLine) && _unity_loc > CORNER_RADIUS) {
context->set_line_width (1);
context->set_line_cap (Cairo::LINE_CAP_ROUND);
cairo_set_line_width(cr, 1);
cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
Gdk::Color c = get_style()->get_fg (Gtk::STATE_ACTIVE);
context->set_source_rgba (c.get_red_p() * 1.5, c.get_green_p() * 1.5, c.get_blue_p() * 1.5, 0.85);
cairo_set_source_rgba (cr, c.get_red_p() * 1.5, c.get_green_p() * 1.5, c.get_blue_p() * 1.5, 0.85);
if (_orien == VERT) {
if (_unity_loc < h - CORNER_RADIUS) {
context->move_to (1.5, _unity_loc + CORNER_OFFSET + .5);
context->line_to (_girth - 1.5, _unity_loc + CORNER_OFFSET + .5);
context->stroke ();
cairo_move_to (cr, 1.5, _unity_loc + CORNER_OFFSET + .5);
cairo_line_to (cr, _girth - 1.5, _unity_loc + CORNER_OFFSET + .5);
cairo_stroke (cr);
}
} else {
if (_unity_loc < w - CORNER_RADIUS) {
context->move_to (_unity_loc - CORNER_OFFSET + .5, 1.5);
context->line_to (_unity_loc - CORNER_OFFSET + .5, _girth - 1.5);
context->stroke ();
cairo_move_to (cr, _unity_loc - CORNER_OFFSET + .5, 1.5);
cairo_line_to (cr, _unity_loc - CORNER_OFFSET + .5, _girth - 1.5);
cairo_stroke (cr);
}
}
}
@ -340,8 +333,6 @@ PixFader::on_expose_event (GdkEventExpose* ev)
}
_last_drawn = ds;
return true;
}
void
@ -359,7 +350,7 @@ PixFader::on_size_request (GtkRequisition* req)
void
PixFader::on_size_allocate (Gtk::Allocation& alloc)
{
DrawingArea::on_size_allocate(alloc);
CairoWidget::on_size_allocate(alloc);
if (_orien == VERT) {
_girth = alloc.get_width ();