#pragma once
#include <widget/Widget.hpp>


namespace rack {
namespace widget {


/** A Widget that stops propagation of all recursive PositionEvents but gives a chance for children to consume first.
Also consumes Hover and Button for left-clicks.
*/
struct OpaqueWidget : Widget {
	void onHover(const event::Hover& e) override {
		Widget::onHover(e);
		e.stopPropagating();
		// Consume if not consumed by child
		if (!e.isConsumed())
			e.consume(this);
	}
	void onButton(const event::Button& e) override {
		Widget::onButton(e);
		e.stopPropagating();
		if (e.button == GLFW_MOUSE_BUTTON_LEFT) {
			// Consume if not consumed by child
			if (!e.isConsumed())
				e.consume(this);
		}
	}
	void onHoverKey(const event::HoverKey& e) override {
		Widget::onHoverKey(e);
		e.stopPropagating();
	}
	void onHoverText(const event::HoverText& e) override {
		Widget::onHoverText(e);
		e.stopPropagating();
	}
	void onHoverScroll(const event::HoverScroll& e) override {
		Widget::onHoverScroll(e);
		e.stopPropagating();
	}
	void onDragHover(const event::DragHover& e) override {
		Widget::onDragHover(e);
		e.stopPropagating();
		// Consume if not consumed by child
		if (!e.isConsumed())
			e.consume(this);
	}
	void onPathDrop(const event::PathDrop& e) override {
		Widget::onPathDrop(e);
		e.stopPropagating();
	}
};


} // namespace widget
} // namespace rack
