铬浏览器:如何在不闪烁的情况下移动BubbleDialogDelegateView小部件?

时间:2019-11-26 22:12:59

标签: c++ webview chromium

我有一个基于views :: BubbleDialogDelegateView的弹出对话框(类似于ProfileChooserView)。

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);
}
....
}

当窗口出现时,我需要从左向右移动(动画)。类似于Opera简易设置栏。 是否有跨平台的方式来移动或设置小部件的动画而不会闪烁?

如果我使用计时器模仿动画并逐步更改小部件大小,则会闪烁

void WebViewPopup::SetPaneWidth(int w)
{
  views::Widget* this_widget = this->GetWidget();
  gfx::Rect bounds(); //calculate new widget size
  this_widget->SetBounds(bounds); // flickers!
}

我在chrome \ src \ ui \ wm \ core \ window_animations.cc中找到了窗口动画,它可以正常运行,但是它使用了Aura,并且仅在Windows上可用。

所以,再次要问的主要问题是:是否存在一种跨平台的方式来移动或设置小部件的动画而不会闪烁?

0 个答案:

没有答案