mirror of
https://github.com/scorpion-26/gBar.git
synced 2024-11-22 03:02:49 +00:00
EventBox: Add scroll event
This commit is contained in:
parent
6f3f398ead
commit
b4dfaa62b1
3 changed files with 43 additions and 11 deletions
|
@ -210,7 +210,7 @@ namespace Bar
|
||||||
auto revealer = Widget::Create<Revealer>();
|
auto revealer = Widget::Create<Revealer>();
|
||||||
revealer->SetTransition({TransitionType::SlideLeft, 500});
|
revealer->SetTransition({TransitionType::SlideLeft, 500});
|
||||||
// Add event to eventbox for the revealer to open
|
// Add event to eventbox for the revealer to open
|
||||||
eventBox->SetEventFn(
|
eventBox->SetHoverFn(
|
||||||
[textRevealer = revealer.get()](EventBox&, bool hovered)
|
[textRevealer = revealer.get()](EventBox&, bool hovered)
|
||||||
{
|
{
|
||||||
textRevealer->SetRevealed(hovered);
|
textRevealer->SetRevealed(hovered);
|
||||||
|
@ -269,7 +269,7 @@ namespace Bar
|
||||||
auto revealer = Widget::Create<Revealer>();
|
auto revealer = Widget::Create<Revealer>();
|
||||||
revealer->SetTransition({TransitionType::SlideLeft, 500});
|
revealer->SetTransition({TransitionType::SlideLeft, 500});
|
||||||
// Add event to eventbox for the revealer to open
|
// Add event to eventbox for the revealer to open
|
||||||
eventBox.SetEventFn(
|
eventBox.SetHoverFn(
|
||||||
[slideRevealer = revealer.get()](EventBox&, bool hovered)
|
[slideRevealer = revealer.get()](EventBox&, bool hovered)
|
||||||
{
|
{
|
||||||
slideRevealer->SetRevealed(hovered);
|
slideRevealer->SetRevealed(hovered);
|
||||||
|
@ -339,7 +339,7 @@ namespace Bar
|
||||||
auto revealer = Widget::Create<Revealer>();
|
auto revealer = Widget::Create<Revealer>();
|
||||||
revealer->SetTransition({TransitionType::SlideLeft, 500});
|
revealer->SetTransition({TransitionType::SlideLeft, 500});
|
||||||
// Add event to eventbox for the revealer to open
|
// Add event to eventbox for the revealer to open
|
||||||
eventBox->SetEventFn(
|
eventBox->SetHoverFn(
|
||||||
[textRevealer = revealer.get()](EventBox&, bool hovered)
|
[textRevealer = revealer.get()](EventBox&, bool hovered)
|
||||||
{
|
{
|
||||||
textRevealer->SetRevealed(hovered);
|
textRevealer->SetRevealed(hovered);
|
||||||
|
@ -388,7 +388,7 @@ namespace Bar
|
||||||
void WidgetPower(Widget& parent)
|
void WidgetPower(Widget& parent)
|
||||||
{
|
{
|
||||||
auto eventBox = Widget::Create<EventBox>();
|
auto eventBox = Widget::Create<EventBox>();
|
||||||
eventBox->SetEventFn(DynCtx::PowerBoxEvent);
|
eventBox->SetHoverFn(DynCtx::PowerBoxEvent);
|
||||||
{
|
{
|
||||||
auto powerBox = Widget::Create<Box>();
|
auto powerBox = Widget::Create<Box>();
|
||||||
powerBox->SetClass("power-box");
|
powerBox->SetClass("power-box");
|
||||||
|
|
|
@ -187,9 +187,14 @@ void CenterBox::Create()
|
||||||
ApplyPropertiesToWidget();
|
ApplyPropertiesToWidget();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventBox::SetEventFn(std::function<void(EventBox&, bool)>&& fn)
|
void EventBox::SetHoverFn(std::function<void(EventBox&, bool)>&& fn)
|
||||||
{
|
{
|
||||||
m_EventFn = fn;
|
m_HoverFn = fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EventBox::SetScrollFn(std::function<void(EventBox&, ScrollDirection)>&& fn)
|
||||||
|
{
|
||||||
|
m_ScrollFn = fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventBox::Create()
|
void EventBox::Create()
|
||||||
|
@ -199,18 +204,37 @@ void EventBox::Create()
|
||||||
auto enter = [](GtkWidget*, GdkEventCrossing*, gpointer data) -> gboolean
|
auto enter = [](GtkWidget*, GdkEventCrossing*, gpointer data) -> gboolean
|
||||||
{
|
{
|
||||||
EventBox* box = (EventBox*)data;
|
EventBox* box = (EventBox*)data;
|
||||||
box->m_EventFn(*box, true);
|
if (box->m_HoverFn)
|
||||||
|
box->m_HoverFn(*box, true);
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
auto leave = [](GtkWidget*, GdkEventCrossing*, void* data) -> gboolean
|
auto leave = [](GtkWidget*, GdkEventCrossing*, void* data) -> gboolean
|
||||||
{
|
{
|
||||||
EventBox* box = (EventBox*)data;
|
EventBox* box = (EventBox*)data;
|
||||||
box->m_EventFn(*box, false);
|
if (box->m_HoverFn)
|
||||||
|
box->m_HoverFn(*box, false);
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
gtk_widget_set_events(m_Widget, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
|
auto scroll = [](GtkWidget*, GdkEventScroll event, void* data) -> gboolean
|
||||||
|
{
|
||||||
|
EventBox* box = (EventBox*)data;
|
||||||
|
if (box->m_ScrollFn)
|
||||||
|
{
|
||||||
|
if (event.direction == GDK_SCROLL_DOWN)
|
||||||
|
{
|
||||||
|
box->m_ScrollFn(*box, ScrollDirection::Down);
|
||||||
|
}
|
||||||
|
else if (event.direction == GDK_SCROLL_UP)
|
||||||
|
{
|
||||||
|
box->m_ScrollFn(*box, ScrollDirection::Up);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
gtk_widget_set_events(m_Widget, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_SCROLL_MASK);
|
||||||
g_signal_connect(m_Widget, "enter-notify-event", G_CALLBACK(+enter), this);
|
g_signal_connect(m_Widget, "enter-notify-event", G_CALLBACK(+enter), this);
|
||||||
g_signal_connect(m_Widget, "leave-notify-event", G_CALLBACK(+leave), this);
|
g_signal_connect(m_Widget, "leave-notify-event", G_CALLBACK(+leave), this);
|
||||||
|
g_signal_connect(m_Widget, "scroll-event", G_CALLBACK(+scroll), this);
|
||||||
|
|
||||||
ApplyPropertiesToWidget();
|
ApplyPropertiesToWidget();
|
||||||
}
|
}
|
||||||
|
|
12
src/Widget.h
12
src/Widget.h
|
@ -80,6 +80,12 @@ enum class TimerResult
|
||||||
Delete
|
Delete
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class ScrollDirection
|
||||||
|
{
|
||||||
|
Up,
|
||||||
|
Down
|
||||||
|
};
|
||||||
|
|
||||||
template<typename TWidget>
|
template<typename TWidget>
|
||||||
using Callback = std::function<void(TWidget&)>;
|
using Callback = std::function<void(TWidget&)>;
|
||||||
template<typename TWidget>
|
template<typename TWidget>
|
||||||
|
@ -194,11 +200,13 @@ private:
|
||||||
class EventBox : public Widget
|
class EventBox : public Widget
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void SetEventFn(std::function<void(EventBox&, bool)>&& fn);
|
void SetHoverFn(std::function<void(EventBox&, bool)>&& fn);
|
||||||
|
void SetScrollFn(std::function<void(EventBox&, ScrollDirection)>&& fn);
|
||||||
virtual void Create() override;
|
virtual void Create() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::function<void(EventBox&, bool)> m_EventFn;
|
std::function<void(EventBox&, bool)> m_HoverFn;
|
||||||
|
std::function<void(EventBox&, ScrollDirection)> m_ScrollFn;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CairoArea : public Widget
|
class CairoArea : public Widget
|
||||||
|
|
Loading…
Reference in a new issue