summaryrefslogtreecommitdiff
path: root/libs/gtkmm2ext
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-05-24 23:08:46 +0200
committerRobin Gareus <robin@gareus.org>2015-05-24 23:09:13 +0200
commitab6a035076ec2cbe50d7bcaec2d9325afd969338 (patch)
tree7e329a17c82104631e9599ad03aa10ee33fe7d96 /libs/gtkmm2ext
parent1515ea69ec79efadef83580bde6ecbf036eb69e5 (diff)
construct vectorized Zoom Icons
Diffstat (limited to 'libs/gtkmm2ext')
-rw-r--r--libs/gtkmm2ext/ardour_icon.cc74
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/ardour_icon.h3
2 files changed, 76 insertions, 1 deletions
diff --git a/libs/gtkmm2ext/ardour_icon.cc b/libs/gtkmm2ext/ardour_icon.cc
index 86891c3004..3a45984844 100644
--- a/libs/gtkmm2ext/ardour_icon.cc
+++ b/libs/gtkmm2ext/ardour_icon.cc
@@ -414,9 +414,81 @@ Gtkmm2ext::ArdourIcon::render (cairo_t *cr,
}
break;
+ case ZoomIn:
+ case ZoomOut:
+ case ZoomFull:
+ {
+ const double x = width * .5;
+ const double y = height * .5;
+ const double r = std::min (x, y) * .7;
+ const double wh = std::min (x, y) * .45;
+
+ // draw handle first
+#define LINE45DEG(rad) \
+ x + r * (rad) * .707, y + r * (rad) * .707 // sin(45deg) = cos(45deg) = .707
+ cairo_move_to (cr, LINE45DEG(.9));
+ cairo_line_to (cr, LINE45DEG(1.3));
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
+ cairo_set_line_width (cr, 3.0);
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+ cairo_stroke (cr);
+#undef LINE45DEG
+
+ // lens
+ ardour_canvas_set_source_rgba (cr, fg_color);
+ cairo_arc (cr, x, y, r, 0, 2 * M_PI);
+ cairo_fill_preserve (cr);
+
+ // add a lens gradient
+ cairo_pattern_t *lens;
+ lens = cairo_pattern_create_radial (x - r, y - r, r * .5, x - r, y - r, r * 2);
+ cairo_pattern_add_color_stop_rgba (lens, 0, 1, 1, 1, .4);
+ cairo_pattern_add_color_stop_rgba (lens, 1, 0, 0, 0, .4);
+ cairo_set_source (cr, lens);
+ cairo_fill_preserve (cr);
+ cairo_pattern_destroy (lens);
+
+ // outline
+ cairo_set_line_width (cr, 1.5);
+ cairo_set_source_rgba (cr, .0, .0, .0, .8);
+ cairo_stroke (cr);
+
+ // add "+", "-" or "[]"
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+ cairo_set_line_width (cr, 1.5);
+ cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
+
+ if (icon == ZoomIn || icon == ZoomOut) {
+ cairo_move_to (cr, x - wh, y);
+ cairo_line_to (cr, x + wh, y);
+ cairo_stroke (cr);
+ }
+ if (icon == ZoomIn) {
+ cairo_move_to (cr, x, y - wh);
+ cairo_line_to (cr, x, y + wh);
+ cairo_stroke (cr);
+ }
+ if (icon == ZoomFull) {
+ const double br0 = std::min (x, y) * .1;
+ const double br1 = std::min (x, y) * .3;
+ const double bry = std::min (x, y) * .3;
+ cairo_move_to (cr, x - br0, y - bry);
+ cairo_line_to (cr, x - br1, y - bry);
+ cairo_line_to (cr, x - br1, y + bry);
+ cairo_line_to (cr, x - br0, y + bry);
+ cairo_stroke (cr);
+
+ cairo_move_to (cr, x + br0, y - bry);
+ cairo_line_to (cr, x + br1, y - bry);
+ cairo_line_to (cr, x + br1, y + bry);
+ cairo_line_to (cr, x + br0, y + bry);
+ cairo_stroke (cr);
+ }
+ }
+ break;
default:
return false;
- } // end case(icon)
+ } // end switch (icon)
#undef VECTORICONSTROKEFILL
#undef VECTORICONSTROKEOUTLINE
diff --git a/libs/gtkmm2ext/gtkmm2ext/ardour_icon.h b/libs/gtkmm2ext/gtkmm2ext/ardour_icon.h
index 8e562efbea..a68757012a 100644
--- a/libs/gtkmm2ext/gtkmm2ext/ardour_icon.h
+++ b/libs/gtkmm2ext/gtkmm2ext/ardour_icon.h
@@ -23,6 +23,9 @@ namespace Gtkmm2ext { namespace ArdourIcon {
TransportMetronom,
NudgeLeft,
NudgeRight,
+ ZoomIn,
+ ZoomOut,
+ ZoomFull,
};
bool render (cairo_t *cr,