2017-01-04 4 views
0

Мой вопрос не относится к JavaScript, но C++:Gtkmm3: ждать перехода Css закончить

В 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") 

С помощью этого кода пользователь видит только «желтое» состояние кнопки, а не предыдущие, поскольку переходы пропускаются. Как отображать все изменения цвета один за другим?

EDIT:

Мое приложение является игра, в которой кнопки окрашены в соответствии с их лейблом. Эта метка может меняться несколько раз очень близко, и я хочу, чтобы пользователь увидел эти изменения, чтобы увидеть переходы между каждым состоянием. Таким образом, это не просто вспышка (мой пример был не идеальным, если вы хотите весь код приложения, вы можете получить его here).

EDIT 2:

Я изменил код выше и следующие предложения, чтобы объяснить мою проблему лучше.

ответ

0

Вы пытаетесь сделать кнопку вспышкой фиолетовым ненадолго? Если это так, вы можете установить тайм-аут с GLib::SignalTimeout за правильное количество времени, в течение которого вы хотите, чтобы кнопка мигала.

+0

Будет ли это работать на каждой машине? – Felandral

+0

Я отредактировал мой вопрос, чтобы быть более точным (ваш ответ не разрешает мою проблему) – Felandral

+0

Я думаю, что так и есть. Если вы установите тайм-аут, например, 1050 мс, то вы получите 500 мс перехода к фиолетовому, 50 мс фиолетовой вспышки и 500 мс перехода обратно к исходному цвету. – ptomato

Смежные вопросы