Add flag for corners, where top+left shadows are both required.
authorBen Loftis <ben@harrisonconsoles.com>
Mon, 19 Feb 2018 14:01:27 +0000 (08:01 -0600)
committerBen Loftis <ben@harrisonconsoles.com>
Mon, 19 Feb 2018 14:01:27 +0000 (08:01 -0600)
libs/widgets/ardour_spacer.cc
libs/widgets/widgets/ardour_spacer.h

index 712792a710f326f1d6ceb81c026e69ffc69c9488..941b9d34dab3f138bc7624c7c5108d9d437c80e6 100644 (file)
@@ -26,8 +26,9 @@ ArdourVSpacer::ArdourVSpacer (float r)
 {
 }
 
-ArdourDropShadow::ArdourDropShadow (float a)
+ArdourDropShadow::ArdourDropShadow (ShadowMode m, float a)
        : CairoWidget ()
        , alpha (a)
+       , mode (m)
 {
 }
index e9f6ad144800aacb1eadcb7aa890cbb51e7d34c5..d7c915a0074b5891fe67c4004eeb19383080ee19 100644 (file)
@@ -54,24 +54,43 @@ protected:
 class LIBWIDGETS_API ArdourDropShadow : public CairoWidget
 {
 public:
-       ArdourDropShadow (float a = 0.75f);
+       enum ShadowMode {
+               DropShadowLongSideOnly,
+               DropShadowBoth,
+       };
+
+       ArdourDropShadow (ShadowMode m = DropShadowLongSideOnly, float a = 0.55f);
+
+       void set_mode(ShadowMode m) {mode = m;}
 
 protected:
        void render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*) {
                float width = get_width();
                float height = get_height();
 
-               Cairo::RefPtr<Cairo::LinearGradient> _gradient = Cairo::LinearGradient::create (0, 0, 0, height);
-               _gradient->add_color_stop_rgba (0, 0, 0, 0, alpha);
-               _gradient->add_color_stop_rgba (1, 0, 0, 0, 0);
-
-               ctx->set_source (_gradient);
-
-               ctx->rectangle (0, 0, width, height);
-               ctx->fill ();
+               Cairo::RefPtr<Cairo::LinearGradient> _gradient;
+
+               if ( (width>height) || mode == DropShadowBoth ) {
+                       _gradient = Cairo::LinearGradient::create (0, 0, 0, 4);
+                       _gradient->add_color_stop_rgba (0, 0, 0, 0, alpha);
+                       _gradient->add_color_stop_rgba (1, 0, 0, 0, 0);
+                       ctx->set_source (_gradient);
+                       ctx->rectangle (0, 0, width, 4);
+                       ctx->fill ();
+               }
+
+               if ( (height>width) || mode == DropShadowBoth ) {
+                       _gradient = Cairo::LinearGradient::create (0, 0, 4, 0);
+                       _gradient->add_color_stop_rgba (0, 0, 0, 0, alpha);
+                       _gradient->add_color_stop_rgba (1, 0, 0, 0, 0);
+                       ctx->set_source (_gradient);
+                       ctx->rectangle (0, 0, 4, height);
+                       ctx->fill ();
+               }               
        }
 
        float alpha;
+       ShadowMode mode;
 };
 
 } /* end namespace */