| Index: views/controls/separator.cc
|
| ===================================================================
|
| --- views/controls/separator.cc (revision 17379)
|
| +++ views/controls/separator.cc (working copy)
|
| @@ -1,15 +1,62 @@
|
| -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| #include "views/controls/separator.h"
|
|
|
| -#include "views/controls/native/native_view_host.h"
|
| +#if defined(OS_LINUX)
|
| +#include "views/controls/native_control_gtk.h"
|
| +#elif defined(OS_WIN)
|
| +#include "views/controls/native_control_win.h"
|
| +#endif
|
| +#include "views/widget/widget.h"
|
|
|
| namespace views {
|
|
|
| -static const int kSeparatorSize = 2;
|
| +#if defined(OS_WIN)
|
| +class NativeSeparatorWin : public NativeControlWin {
|
| + public:
|
| + explicit NativeSeparatorWin(Separator* separator) : separator_(separator) {}
|
| + virtual ~NativeSeparatorWin() {}
|
|
|
| + // Overridden from NativeControlWin:
|
| + virtual void CreateNativeControl() {
|
| + HWND control_hwnd = CreateWindowEx(GetAdditionalExStyle(), L"STATIC", L"",
|
| + WS_CHILD | SS_ETCHEDHORZ | SS_SUNKEN,
|
| + 0, 0, width(), height(),
|
| + separator_->GetWidget()->GetNativeView(),
|
| + NULL, NULL, NULL);
|
| + NativeControlCreated(control_hwnd);
|
| + }
|
| +
|
| + private:
|
| + Separator* separator_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(NativeSeparatorWin);
|
| +};
|
| +#elif defined(OS_LINUX)
|
| +class NativeSeparatorGtk : public NativeControlGtk {
|
| + public:
|
| + explicit NativeSeparatorGtk(Separator* separator) : separator_(separator) {}
|
| + virtual ~NativeSeparatorGtk() {}
|
| +
|
| + // Overridden from NativeSeparatorGtk:
|
| + virtual void CreateNativeControl() {
|
| + // TODO(port): create a separator widget and pass to NativeControlCreated.
|
| + }
|
| +
|
| + private:
|
| + Separator* separator_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(NativeSeparatorGtk);
|
| +};
|
| +#endif
|
| +
|
| +// static
|
| +const char Separator::kViewClassName[] = "views/Separator";
|
| +
|
| +const int kSeparatorSize = 2;
|
| +
|
| Separator::Separator() {
|
| SetFocusable(false);
|
| }
|
| @@ -17,21 +64,41 @@
|
| Separator::~Separator() {
|
| }
|
|
|
| -HWND Separator::CreateNativeControl(HWND parent_container) {
|
| - SetFixedHeight(kSeparatorSize, CENTER);
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// Separator, View overrides:
|
|
|
| - return ::CreateWindowEx(GetAdditionalExStyle(), L"STATIC", L"",
|
| - WS_CHILD | SS_ETCHEDHORZ | SS_SUNKEN,
|
| - 0, 0, width(), height(),
|
| - parent_container, NULL, NULL, NULL);
|
| +gfx::Size Separator::GetPreferredSize() {
|
| + return gfx::Size(width(), kSeparatorSize);
|
| }
|
|
|
| -LRESULT Separator::OnNotify(int w_param, LPNMHDR l_param) {
|
| - return 0;
|
| +void Separator::Layout() {
|
| + if (native_wrapper_) {
|
| + native_wrapper_->SetBounds(0, 0, width(), height());
|
| + native_wrapper_->Layout();
|
| + }
|
| }
|
|
|
| -gfx::Size Separator::GetPreferredSize() {
|
| - return gfx::Size(width(), fixed_height_);
|
| +void Separator::ViewHierarchyChanged(bool is_add, View* parent,
|
| + View* child) {
|
| + if (is_add && !native_wrapper_ && GetWidget()) {
|
| + CreateNativeWrapper();
|
| + AddChildView(native_wrapper_);
|
| + }
|
| }
|
|
|
| +std::string Separator::GetClassName() const {
|
| + return kViewClassName;
|
| +}
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// Separator, private:
|
| +
|
| +void Separator::CreateNativeWrapper() {
|
| +#if defined(OS_WIN)
|
| + native_wrapper_ = new NativeSeparatorWin(this);
|
| +#elif defined(OS_LINUX)
|
| + native_wrapper_ = new NativeSeparatorGtk(this);
|
| +#endif
|
| +}
|
| +
|
| } // namespace views
|
|
|