为chromium增加底部工具栏

src\chrome\browser\ui\views\frame\browser_view.hscoped_ptr<BottomBarView> bottombar_;src\chrome\browser\ui\views\frame\browser_view.ccvoid BrowserView::InitViews() { …… bottombar_.reset(new BottomBarView(browser_.get())); AddChildView(bottombar_.get()); bottombar_->Init(); ……}

在往BrowserView中增加bottombar_后,需要为bottombar_设置它的布局,也就是bottombar_的显示位置。BrowserView的布局由BrowserViewLayout负责,需要修改这个类。

src\chrome\browser\ui\views\frame\browser_view_layout.hclass BrowserViewLayout : public views::LayoutManager { …… BottomBarView *bottombar_; ……}src\chrome\browser\ui\views\frame\ browser_view_layout.ccvoid BrowserViewLayout::Layout(views::View* browser_view) { …… int bottom = LayoutBottombar(browser_view->height()); bottom = LayoutDownloadShelf(bottom); //int bottom = LayoutDownloadShelf(browser_view->height()); ……}

bottombar_会在视图的最底端显示,,而这个位置原来是下载栏的位置,修改一下这段代码,把下载栏放在底部工具栏之上。实现LayoutBottombar函数:

src\chrome\browser\ui\views\frame\ browser_view_layout.ccint BrowserViewLayout::LayoutBottombar(int bottom) { int browser_view_width = vertical_layout_rect_.width(); int height = bottombar_->GetPreferredSize().height(); if (!delegate_->IsTabStripVisible()) {bottombar_->SetVisible(false);bottombar_->SetBounds(0, bottom, browser_view_width, 0);return bottom; } bottombar_->SetVisible(true); bottombar_->SetBounds(vertical_layout_rect_.x(), bottom – height, browser_view_width, height); return bottom – height;}

SetBounds函数就是设置bottombar_的绘制位置,它的参数分别是x、y、width、height。在chromium中,这四个参数的含义如下。

在按F11显示全屏时标签栏是不显示的,底部工具栏和标签栏一样在全屏模式下不进行显示,所以增加IsTabStripVisible的判定。

接下来,我们来实现类BottomBarView,在src\chrome\browser\ui\views\目录下增加目录bottombar,在该目录下增加文件bottombar_view.h以及bottombar_view.cc。底部工具栏我是根据ToolbarView改的,所以一开始,我直接先从src\chrome\browser\ui\views\toolbar把toolbar_view.h和toolbar_view.cc拷贝过来,然后在这基础上进行修改。

增加代码需要更改src/chrome/chrome_browser_ui.gypi文件, 找到browser_view的位置,增加bottombar的文件路径

……'browser/ui/views/frame/browser_view.cc','browser/ui/views/frame/browser_view.h','browser/ui/views/bottombar/bottombar_view.h','browser/ui/views/bottombar/bottombar_view.cc',……

修改的办法就是保留back_按扭,把所有其它如下所示所有不相关的按钮和元素相关的代码通通注释掉。

ToolbarButton*forward_;

ReloadButton*reload_;

HomeButton*home_;

LocationBarView*location_bar_;

BrowserActionsContainer*browser_actions_;

WrenchToolbarButton*app_menu_;

接下来开始修改back按钮,把它修改成查看历史记录的按扭。

src\chrome\browser\ui\views\bottombar\bottombar_view.hBackButton* history_;

在Init()函数中,把back_相应的代码段改为

src\chrome\browser\ui\views\bottombar\bottombar_view.ccvoid BottomBarView::Init() { ……history_ = new BackButton(this, NULL); history_->set_triggerable_event_flags( ui::EF_LEFT_MOUSE_BUTTON | ui::EF_MIDDLE_MOUSE_BUTTON); history_->set_tag(IDC_SHOW_HISTORY); history_->SetTooltipText(l10n_util::GetStringUTF16(IDS_SHOW_HISTORY)); history_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_SHOW_HISTORY)); history_->set_id(VIEW_ID_HISTORY_BUTTON_BOTTOMBAR); history_->Init(); AddChildView(history_); ……}BackButton中原来会弹出一个菜单,新的按钮不需要菜单,所以构造函数的第二个参数设置成NULL。当点击history_按钮时,会调用查看历史的命令,该命令对应IDC_SHOW_HISTORY,其它更多的命令在src\chrome\app\chrome_command_ids.h定义,选择不同的IDC会触发相应的命令。

IDC_SHOW_HISTORY会弹出查看历史记录的页面。history_按钮需要一个id,这个id在src\chrome\browser\ui\view_ids.h中定义一个即可,在该文件后边添加了如下的内容,这些id可以自由定义。

VIEW_ID_BOTTOM_BAR = 2000,VIEW_ID_BACK_BUTTON_BOTTOMBAR,VIEW_ID_PRINT_BUTTON_BOTTOMBAR,VIEW_ID_DOWNLOAD_BUTTON_BOTTOMBAR,VIEW_ID_HISTORY_BUTTON_BOTTOMBAR,

IDS_SHOW_HISTORY是src\chrome\app\generated_resources.grd中定义的字符串,我暂时用了chromium下拉菜单的“历史记录”文字来代替。

Init()函数最后还会调用LoadImages函数,这个函数用于设置按钮图片,对该函数进行如下修改。

void BottomBarView::LoadImages() { ui::ThemeProvider* tp = GetThemeProvider(); history_->SetImage(views::Button::STATE_NORMAL, *(tp->GetImageSkiaNamed(IDR_HISTORY_BOTTOMBAR)));}

IDR_HISTORY_BOTTOMBAR是在src\chrome\app\theme\theme_resources.grd文件下增加一行设置,并在src\chrome\app\theme\default_100_percent\common增加一个按钮图标history.png。

""common/history.png" />

该图标的大小我按照back_按扭的大小改的,是一张29*29的图标。看着它洗涤一缕缕阳光,看着它映衬一片片星辉,

为chromium增加底部工具栏

相关文章:

你感兴趣的文章:

标签云: