summaryrefslogtreecommitdiff
path: root/libs/widgets
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-08-22 21:03:07 +0200
committerRobin Gareus <robin@gareus.org>2019-08-22 21:03:07 +0200
commita0d53b81b900ea64dc202e0ee9c4ce8d0809596e (patch)
treea70e3e78383dbc9fa1427d178882f9424f34c4fc /libs/widgets
parent026b74e25d3cceec35a5e32d85d393911cad6013 (diff)
Update plugin-ui related icons
Diffstat (limited to 'libs/widgets')
-rw-r--r--libs/widgets/ardour_icon.cc137
-rw-r--r--libs/widgets/widgets/ardour_icon.h4
2 files changed, 129 insertions, 12 deletions
diff --git a/libs/widgets/ardour_icon.cc b/libs/widgets/ardour_icon.cc
index 15d090cd74..1f54b67217 100644
--- a/libs/widgets/ardour_icon.cc
+++ b/libs/widgets/ardour_icon.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017-2018 Robin Gareus <robin@gareus.org>
+ * Copyright (C) 2017-2019 Robin Gareus <robin@gareus.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -1076,30 +1076,131 @@ static void icon_on_off (cairo_t *cr, const int width, const int height, const u
VECTORICONSTROKEOUTLINE(ceil (.25 * r), fg_color);
}
-static void icon_reset_knob (cairo_t *cr, const int width, const int height, const uint32_t fg_color)
+static void icon_bypass (cairo_t *cr, const int width, const int height, const uint32_t fg_color)
{
- const double x = ceil (width * .5) - .5;
- const double y = ceil (height * .5) - .5;
+ const double x = width * .5;
+ const double y = height * .5;
+ const double y0 = height * .6;
+ const double r = std::min (x, y) * .75;
+ const double o = std::min (x, y) * .275;
+ const double ar = std::min (x, y) * .15;
const double pt = std::min (x, y) * .125;
+
+ const double dashes[] = { 1, pt };
+ cairo_set_dash (cr, dashes, 2, 0);
+ cairo_move_to (cr, x - r, y0);
+ cairo_line_to (cr, x + r, y0);
+ VECTORICONSTROKEOUTLINE(pt * .8, fg_color);
+ cairo_set_dash (cr, 0, 0, 0);
+
+ cairo_move_to (cr, x - o, y0 - o);
+ cairo_line_to (cr, x + o, y0 + o);
+ cairo_move_to (cr, x + o, y0 - o);
+ cairo_line_to (cr, x - o, y0 + o);
+ VECTORICONSTROKEOUTLINE(pt * .8, fg_color);
+
+ cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
+ cairo_arc (cr, x, y0, r, 0, 0);
+ cairo_arc (cr, x, y0, r *.8, 1.92 * M_PI, 1.92 * M_PI);
+ cairo_arc (cr, x, y0, r * 1.17, 1.92 * M_PI, 1.92 * M_PI);
+ cairo_close_path (cr);
+ cairo_arc_negative (cr, x, y0, r, 0, M_PI);
+ VECTORICONSTROKEOUTLINE(pt, fg_color);
+}
+
+
+static void icon_reset_knob (cairo_t *cr, const int width, const int height, const uint32_t fg_color)
+{
+ const double x = width * .5;
+ const double y = height * .5;
const double r0 = std::min (x, y) * .3;
const double r1 = std::min (x, y) * .7;
- const double ar = r0;
- const double ra = r1 * .707;
+ const double ar = std::min (x, y) * .25;
+ const double pt = std::min (x, y) * .125;
cairo_arc (cr, x, y, r0, 0, 2. * M_PI);
cairo_move_to (cr, x, y - r0);
cairo_line_to (cr, x, y);
VECTORICONSTROKEOUTLINE(pt, fg_color);
- /* outer ring w/arrow) */
- cairo_arc (cr, x, y, r1, -.24 * M_PI, 1.5 * M_PI);
- cairo_move_to (cr, x + ra, y - ra);
- cairo_rel_line_to (cr, 0, ar * 1.25);
- cairo_move_to (cr, x + ra, y - ra);
- cairo_rel_line_to (cr, ar, 0);
+ /* outer ring w/CCW arrow */
+ cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
+ cairo_arc (cr, x, y, r1, -.25 * M_PI, -.25 * M_PI);
+ cairo_rel_line_to (cr, 0, ar);
+ cairo_rel_line_to (cr, ar, -ar);
+ cairo_arc (cr, x, y, r1, -.25 * M_PI, -.25 * M_PI);
+ cairo_arc (cr, x, y, r1, -.25 * M_PI, 1.50 * M_PI);
VECTORICONSTROKEOUTLINE(pt, fg_color);
}
+static void icon_config_wheel (cairo_t *cr, const int width, const int height, const uint32_t fg_color, int arrow)
+{
+ const double x = width * .5;
+ const double y = height * .5;
+ const double r0 = std::min (x, y) * .3;
+ const double r1 = std::min (x, y) * .60;
+ const double r2 = std::min (x, y) * .75;
+ const double ar = std::min (x, y) * .25;
+ const double pt = std::min (x, y) * .125;
+
+
+ for (int i = 0; i < 8; ++i) {
+ double ang0 = i * 2.0 * M_PI / 8.0;
+ double ang1 = (i + 1) * 2.0 * M_PI / 8.0;
+ double angm = 2.0 * M_PI / 48.0;
+ double angd = 2.0 * M_PI / 64.0;
+
+ cairo_arc (cr, x, y, r2, ang0 - angm, ang0 + angm);
+ cairo_arc (cr, x, y, r1, ang0 + angm + angd, ang1 - angm - angd);
+ }
+ cairo_close_path (cr);
+ VECTORICONSTROKEOUTLINE(pt, fg_color);
+
+ cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
+ if (arrow == 0) {
+ cairo_arc (cr, x, y, r0, 0, 2.0 * M_PI);
+ } else if (arrow > 0) {
+ /* clockwise pointing arrow */
+ cairo_arc (cr, x, y, r0, 1.9 * M_PI, 1.9 * M_PI);
+ cairo_rel_line_to (cr, 0, -ar);
+ cairo_rel_line_to (cr, -ar, ar);
+ cairo_arc (cr, x, y, r0, 1.9 * M_PI, 1.9 * M_PI);
+ cairo_arc_negative (cr, x, y, r0, 1.9 * M_PI, .5 * M_PI);
+ } else {
+ /* counterclockwise arrow */
+ cairo_arc (cr, x, y, r0, 1.1 * M_PI, 1.1 * M_PI);
+ cairo_rel_line_to (cr, 0, -ar);
+ cairo_rel_line_to (cr, ar, ar);
+ cairo_arc (cr, x, y, r0, 1.1 * M_PI, 1.1 * M_PI);
+ cairo_arc (cr, x, y, r0, 1.1 * M_PI, .5 * M_PI);
+ }
+ VECTORICONSTROKEOUTLINE(pt, fg_color);
+}
+
+static void icon_pcb_via (cairo_t *cr, const int width, const int height, const uint32_t fg_color)
+{
+ const double x = ceil (width * .5) - .5;
+ const double y = ceil (height * .5) - .5;
+
+ const double d = rint (std::min (x, y) * .5);
+ const double r = std::min (x, y) * .15;
+ const double p = std::min (x, y) * .1;
+ const double o = std::min (x, y) * .4;
+
+ cairo_arc_negative (cr, x+d, y+d, r, 1.15 * M_PI, -.85 * M_PI);
+ cairo_arc (cr, x+d, y+d, d * 1.12, 1.15 * M_PI, 1.15 * M_PI);
+
+ cairo_arc (cr, x-d, y-d, d * 1.12, 0.15 * M_PI, .15 * M_PI);
+ cairo_arc (cr, x-d, y-d, r, 0.15 * M_PI, 2.5 * M_PI);
+
+ cairo_arc (cr, x-d, y-d, r, .5 * M_PI, .5 * M_PI);
+ cairo_arc (cr, x-d, y+d, r, -.5 * M_PI, 1.5 * M_PI);
+ VECTORICONSTROKEOUTLINE(p, fg_color);
+
+ cairo_arc (cr, x+d, y-d, o, -.5 * M_PI, -.5 * M_PI);
+ cairo_arc (cr, x+d, y-d, r, -.5 * M_PI, 1.5 * M_PI);
+ VECTORICONSTROKEOUTLINE(p, fg_color);
+}
/*****************************************************************************/
@@ -1211,6 +1312,18 @@ ArdourWidgets::ArdourIcon::render (cairo_t *cr,
icon_reset_knob (cr, width, height, fg_color);
break;
case PluginBypass:
+ icon_bypass (cr, width, height, fg_color);
+ break;
+ case PluginPinout:
+ icon_pcb_via (cr, width, height, fg_color);
+ break;
+ case Config: /* unused */
+ icon_config_wheel (cr, width, height, fg_color, 0);
+ break;
+ case ConfigReset: /* unused */
+ icon_config_wheel (cr, width, height, fg_color, -1);
+ break;
+ case PowerOnOff: /* unused */
icon_on_off (cr, width, height, fg_color);
break;
default:
diff --git a/libs/widgets/widgets/ardour_icon.h b/libs/widgets/widgets/ardour_icon.h
index ca79f5418c..7b39046cf1 100644
--- a/libs/widgets/widgets/ardour_icon.h
+++ b/libs/widgets/widgets/ardour_icon.h
@@ -61,6 +61,10 @@ namespace ArdourWidgets { namespace ArdourIcon {
PsetDelete,
PluginReset,
PluginBypass,
+ PluginPinout,
+ Config,
+ ConfigReset,
+ PowerOnOff,
};
LIBWIDGETS_API bool render (cairo_t *cr,