From 206a58f9996a36693b1e73460191b08db1db0327 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 26 Oct 2018 21:51:44 +0200 Subject: Change window notification style --- css/style.css | 6 +++++- include/WindowNotification.hpp | 1 + src/WindowNotification.cpp | 30 +++++++++++++++++++++--------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/css/style.css b/css/style.css index bcafa69..c024481 100644 --- a/css/style.css +++ b/css/style.css @@ -120,4 +120,8 @@ textview text { #chat-input { padding: 10px 10px 10px 10px; } -*/ \ No newline at end of file +*/ + +.window-notification { + background-color: #aa3030; +} \ No newline at end of file diff --git a/include/WindowNotification.hpp b/include/WindowNotification.hpp index 87111de..595169d 100644 --- a/include/WindowNotification.hpp +++ b/include/WindowNotification.hpp @@ -15,5 +15,6 @@ namespace dchat Gtk::Revealer revealer; Gtk::Label label; sigc::connection hideTimer; + sigc::connection visibilityTimer; }; } \ No newline at end of file diff --git a/src/WindowNotification.cpp b/src/WindowNotification.cpp index acb47da..9e17108 100644 --- a/src/WindowNotification.cpp +++ b/src/WindowNotification.cpp @@ -1,34 +1,46 @@ #include "../include/WindowNotification.hpp" #include -static Gtk::Overlay *overlay = nullptr; -static Gtk::Label *label = nullptr; - namespace dchat { WindowNotification::WindowNotification() { label.set_line_wrap(true); label.set_line_wrap_mode(Pango::WRAP_WORD_CHAR); - label.set_halign(Gtk::ALIGN_START); + label.set_halign(Gtk::ALIGN_CENTER); revealer.add(label); - add(revealer); + revealer.set_hexpand(true); + + Gtk::Grid *grid = Gtk::manage(new Gtk::Grid()); + grid->add(revealer); + grid->get_style_context()->add_class("window-notification"); + + add(*grid); set_valign(Gtk::ALIGN_START); - set_halign(Gtk::ALIGN_CENTER); - revealer.get_style_context()->add_class("window-notification"); + set_hexpand(true); show_all(); + set_visible(false); } void WindowNotification::show(const Glib::ustring &text) { hideTimer.disconnect(); + visibilityTimer.disconnect(); label.set_text(text); + set_visible(true); revealer.set_reveal_child(true); - int showTime = (int)std::max(1.0, (double)text.size() * 0.1); - hideTimer = Glib::signal_timeout().connect_seconds([this] + int showTime = (int)std::max(1.0, (double)text.size() * 0.1) * 1000; + + hideTimer = Glib::signal_timeout().connect([this] { revealer.set_reveal_child(false); return false; }, showTime); + + visibilityTimer = Glib::signal_timeout().connect([this] + { + set_visible(false); + return false; + }, showTime + revealer.get_transition_duration()); } } \ No newline at end of file -- cgit v1.2.3