1 /*
2  * DISTRHO Plugin Framework (DPF)
3  * Copyright (C) 2012-2019 Filipe Coelho <falktx@falktx.com>
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any purpose with
6  * or without fee is hereby granted, provided that the above copyright notice and this
7  * permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
10  * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
11  * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
12  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
13  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 #include "DemoWidgetBanner.hpp"
18 
19 #include "Cairo.hpp"
20 #include "Window.hpp"
21 
22 START_NAMESPACE_DGL
23 
24 // -----------------------------------------------------------------------
25 
26 static const char* banner =
27 "                                                                        "
28 "  *     *               *                                 *     *       "
29 "  **   **               *                           *     *     *       "
30 "  * * * *               *                                 *     *       "
31 "  *  *  *   ****    *** *   ****         *     *   **    ****   * ***   "
32 "  *     *       *  *   **  *    *        *     *    *     *     **   *  "
33 "  *     *   *****  *    *  ******        *  *  *    *     *     *    *  "
34 "  *     *  *    *  *    *  *             *  *  *    *     *     *    *  "
35 "  *     *  *   **  *   **  *    *        *  *  *    *     *  *  *    *  "
36 "  *     *   *** *   *** *   ****          ** **   *****    **   *    *  "
37 "                                                                        "
38 "                                                                        "
39 "                                                                        "
40 "                          *****   ****   *****                          "
41 "                           *   *  *   *  *                              "
42 "                           *   *  *   *  *                              "
43 "                           *   *  *   *  *                              "
44 "                           *   *  ****   ****                           "
45 "                           *   *  *      *                              "
46 "                           *   *  *      *                              "
47 "                           *   *  *      *                              "
48 "                          *****   *      *                              "
49 "                                                                        ";
50 
51 enum
52 {
53     rows = 23,
54     columns = 72,
55 };
56 
DemoWidgetBanner(Widget * group)57 DemoWidgetBanner::DemoWidgetBanner(Widget* group)
58     : Widget(group)
59 {
60 }
61 
onDisplay()62 void DemoWidgetBanner::onDisplay()
63 {
64     cairo_t* cr = getParentWindow().getGraphicsContext().cairo;
65 
66     Size<uint> sz = getSize();
67     int w = sz.getWidth();
68     int h = sz.getHeight();
69 
70     double diameter = (double)w / columns;
71     double radius = 0.5 * diameter;
72     double xoff = 0;
73     double yoff = 0.5 * (h - rows * diameter);
74     for (int r = 0; r < rows; ++r)
75     {
76         for (int c = 0; c < columns; ++c)
77         {
78             double cx = xoff + radius + c * diameter;
79             double cy = yoff + radius + r * diameter;
80 
81             char ch = banner[c + r * columns];
82             if (ch != ' ')
83                 cairo_set_source_rgb(cr, 0.5, 0.9, 0.2);
84             else
85                 cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
86 
87             cairo_save(cr);
88             cairo_translate(cr, cx, cy);
89             cairo_scale(cr, radius, radius);
90             cairo_arc(cr, 0.0, 0.0, 1.0, 0.0, 2 * M_PI);
91             cairo_restore(cr);
92 
93             cairo_fill(cr);
94         }
95     }
96 }
97 
98 // -----------------------------------------------------------------------
99 
100 END_NAMESPACE_DGL
101