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 |