Chromium browser: как двигать widget чтоб не мерцал?
От: Aleksey82  
Дата: 26.11.19 22:23
Оценка:
В общем, есть popup диалог, наследованный от views::BubbleDialogDelegateView ( аналогичный существующему ProfileChooserView )

Мне его надо анимировать аналогично боковой панельке easy setup в опере. Т.е. когда он появляется, он должен "выехать" справа налево.

Если я изменяю размер виджета как в коде внизу, то диалог мерцает. Т.е. я в цикле по таймеру вызываю widget->SetBounds() и диалог мигает.
Я нашел как сделать анимацию движения окна без мерцания, но это основано на библиотеке aura, а оно только под винду. Есть ли какой-то кроссплатформенный способ изменять размер виджета диалога и чтоб избежать мерцания

class WebViewPopup : public views::BubbleDialogDelegateView,
                       public ExtensionViewViews::Container,
                       public content::NotificationObserver,
                       public TabStripModelObserver,
                       public content::DevToolsAgentHostObserver,
                       public zoom::ZoomObserver,
                       public FullscreenObserver
{
....
static void ShowPopup(views::Button* anchor_button,
                        Browser* browser) {
  auto* popup =
      new WebViewPopup(anchor_button, browser);
  views::BubbleDialogDelegateView::CreateBubble(popup);
}

void WebViewPopup::SetPaneWidth(int w)
{
  views::Widget* this_widget = this->GetWidget();
  gfx::Rect bounds(); //calculate new widget size
  this_widget->SetBounds(bounds); // здесь мерцает
}
....
}
Отредактировано 26.11.2019 22:25 Aleksey82 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.