Implement setting dock side.

This commit is contained in:
Cheng Zhao 2014-06-10 12:03:20 +08:00
parent 1943d88bdc
commit d70d24c360

View file

@ -22,6 +22,7 @@ class ContainerView : public views::View {
public: public:
explicit ContainerView(InspectableWebContentsViewWin* web_contents_view) explicit ContainerView(InspectableWebContentsViewWin* web_contents_view)
: container_view_created_(false), : container_view_created_(false),
dockside_("bottom"),
web_view_(new views::WebView(NULL)), web_view_(new views::WebView(NULL)),
web_contents_view_(web_contents_view) { web_contents_view_(web_contents_view) {
set_owned_by_client(); set_owned_by_client();
@ -45,10 +46,12 @@ class ContainerView : public views::View {
split_view_.reset(new views::SingleSplitView( split_view_.reset(new views::SingleSplitView(
web_view_.get(), web_view_.get(),
devtools_view_, devtools_view_,
views::SingleSplitView::VERTICAL_SPLIT, GetSplitViewOrientation(),
NULL)); NULL));
split_view_->set_divider_offset(GetSplitVievDividerOffset());
AddChildView(split_view_.get()); AddChildView(split_view_.get());
Layout(); Layout();
devtools_view_->RequestFocus(); devtools_view_->RequestFocus();
} }
@ -66,6 +69,22 @@ class ContainerView : public views::View {
return split_view_; return split_view_;
} }
bool SetDockSide(const std::string& side) {
if (side != "bottom" && side != "right")
return false; // unsupported display location
if (dockside_ == side)
return true; // no change from current location
dockside_ = side;
if (!IsDevToolsViewShowing())
return true;
split_view_->set_orientation(GetSplitViewOrientation());
split_view_->set_divider_offset(GetSplitVievDividerOffset());
split_view_->Layout();
return true;
}
private: private:
// views::View: // views::View:
virtual void Layout() OVERRIDE { virtual void Layout() OVERRIDE {
@ -86,9 +105,25 @@ class ContainerView : public views::View {
} }
} }
views::SingleSplitView::Orientation GetSplitViewOrientation() const {
if (dockside_ == "bottom")
return views::SingleSplitView::VERTICAL_SPLIT;
else
return views::SingleSplitView::HORIZONTAL_SPLIT;
}
int GetSplitVievDividerOffset() const {
if (dockside_ == "bottom")
return height() * 2 / 3;
else
return width() * 2 / 3;
}
// True if the container view has already been created, or false otherwise. // True if the container view has already been created, or false otherwise.
bool container_view_created_; bool container_view_created_;
std::string dockside_;
scoped_ptr<views::WebView> web_view_; scoped_ptr<views::WebView> web_view_;
scoped_ptr<views::SingleSplitView> split_view_; scoped_ptr<views::SingleSplitView> split_view_;
views::WebView* devtools_view_; // Owned by split_view_. views::WebView* devtools_view_; // Owned by split_view_.
@ -158,7 +193,7 @@ bool InspectableWebContentsViewWin::IsDevToolsViewShowing() {
} }
bool InspectableWebContentsViewWin::SetDockSide(const std::string& side) { bool InspectableWebContentsViewWin::SetDockSide(const std::string& side) {
return false; return container_->SetDockSide(side);
} }
} // namespace brightray } // namespace brightray