【问题标题】:Gtkmm3 : wait for css transition to finishGtkmm3 : 等待 css 转换完成
【发布时间】:2017-01-04 19:22:16
【问题描述】:

我的问题不涉及 JavaScript,而是涉及 C++:

在 gtkmm3 中,应用程序的外观由 CSS 管理,因此可以这样设置过渡:

主题.css:

.purple {
transition: 500ms linear;
background-image: -gtk-gradient (radial,
    center center, 0,
    center center, 1,
    from (#FFB2E8),
    to (#80005A));
 }

main.cc:

   // Create and define the StyleContext
   CssProvider = Gtk::CssProvider::create();
   CssProvider->load_from_path (Glib::build_filename (UI_DIR, "theme.css"));
   Glib::RefPtr<Gtk::StyleContext> ButtonContext = button->get_style_context ();
   ButtonContext->add_provider (CssProvider,
                                GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
   // Assign new color
   ButtonContext->add_class ("purple");
   // Assign an intermediate color
   ButtonContext->remove_class ("purple");
   ButtonContexy->add_class ("green");
   // To something
   // ... ...
   // Change the color again
   ButtonContext->remove_class ("green");
   ButtonContext->add_class ("yellow")

使用此代码,用户只能看到按钮的“黄色”状态,而看不到之前的状态,因为跳过了转换。 如何将所有的颜色变化一个接一个地显示出来?

编辑:

我的应用程序是一个游戏,其中的按钮根据其标签进行着色。这个标签可以非常紧密地改变多次,我希望用户看到这些变化,所以,看到每个状态之间的转换。所以,它不仅仅是一个flash(我的例子并不完美,如果你想要应用程序的完整代码,你可以得到它here)。

编辑 2:

我修改了上面的代码和下面的句子来更好地解释我的问题。

【问题讨论】:

    标签: c++ css gtkmm3


    【解决方案1】:

    您是否要让按钮短暂闪烁紫色?如果是这样,您可以使用 GLib::SignalTimeout 设置超时,以确保按钮闪烁的正确时间。

    【讨论】:

    • 我将我的问题编辑得更准确(你的回答不能解决我的问题)
    • 我认为确实如此。例如,如果您将超时设置为 1050 毫秒,那么您将获得 500 毫秒的紫色过渡、50 毫秒的紫色闪光和 500 毫秒的过渡回原始颜色。
    • 再一次,我不希望按钮闪烁。我希望它等到 CSS 过渡结束后再更改其颜色。它可以是多个连续的颜色变化,在所有情况下,我都希望用户看到这些连续的变化(而不仅仅是最后一种颜色,因为它现在是这样)。 Glib::SignalTimout 不能解决我的问题(我已经测试过了)。
    • 我花了很长时间学习如何使用它,但最后,我设法用Glib::signal_timeout ().connect () 做我想做的事。谢谢你,很抱歉我花了多长时间才接受你的回答!
    猜你喜欢
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 2017-05-13
    • 2015-11-19
    • 2013-03-15
    • 2021-08-17
    • 2020-10-04
    • 2020-07-04
    相关资源
    最近更新 更多