summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/tabs/tab_2.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/tabs/tab_2.cc')
-rw-r--r--chrome/browser/views/tabs/tab_2.cc119
1 files changed, 119 insertions, 0 deletions
diff --git a/chrome/browser/views/tabs/tab_2.cc b/chrome/browser/views/tabs/tab_2.cc
new file mode 100644
index 0000000..a541f3a
--- /dev/null
+++ b/chrome/browser/views/tabs/tab_2.cc
@@ -0,0 +1,119 @@
+// Copyright (c) 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 "chrome/browser/views/tabs/tab_2.h"
+
+#include "app/gfx/canvas.h"
+#include "app/gfx/font.h"
+#include "app/gfx/path.h"
+#include "views/animator.h"
+
+static const SkScalar kTabCapWidth = 15;
+static const SkScalar kTabTopCurveWidth = 4;
+static const SkScalar kTabBottomCurveWidth = 3;
+
+////////////////////////////////////////////////////////////////////////////////
+// Tab2, public:
+
+Tab2::Tab2(Tab2Model* model)
+ : model_(model),
+ dragging_(false),
+ removing_(false) {
+}
+
+Tab2::~Tab2() {
+}
+
+void Tab2::SetRemovingModel(Tab2Model* model) {
+ removing_model_.reset(model);
+ model_ = removing_model_.get();
+}
+
+bool Tab2::IsAnimating() const {
+ return animator_.get() && animator_->IsAnimating();
+}
+
+views::Animator* Tab2::GetAnimator() {
+ if (!animator_.get())
+ animator_.reset(new views::Animator(this, model_->AsAnimatorDelegate()));
+ return animator_.get();
+}
+
+// static
+gfx::Size Tab2::GetStandardSize() {
+ return gfx::Size(140, 27);
+}
+
+void Tab2::AddTabShapeToPath(gfx::Path* path) const {
+ SkScalar h = SkIntToScalar(height());
+ SkScalar w = SkIntToScalar(width());
+
+ path->moveTo(0, h);
+
+ // Left end cap.
+ path->lineTo(kTabBottomCurveWidth, h - kTabBottomCurveWidth);
+ path->lineTo(kTabCapWidth - kTabTopCurveWidth, kTabTopCurveWidth);
+ path->lineTo(kTabCapWidth, 0);
+
+ // Connect to the right cap.
+ path->lineTo(w - kTabCapWidth, 0);
+
+ // Right end cap.
+ path->lineTo(w - kTabCapWidth + kTabTopCurveWidth, kTabTopCurveWidth);
+ path->lineTo(w - kTabBottomCurveWidth, h - kTabBottomCurveWidth);
+ path->lineTo(w, h);
+
+ // Close out the path.
+ path->lineTo(0, h);
+ path->close();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Tab2, views::View overrides:
+
+gfx::Size Tab2::GetPreferredSize() {
+ return gfx::Size();
+}
+
+void Tab2::Layout() {
+}
+
+void Tab2::Paint(gfx::Canvas* canvas) {
+ SkColor color = model_->IsSelected(this) ? SK_ColorRED : SK_ColorGREEN;
+
+ gfx::Path path;
+ AddTabShapeToPath(&path);
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setColor(color);
+ canvas->drawPath(path, paint);
+
+ // TODO(beng): less ad-hoc
+ canvas->DrawStringInt(model_->GetTitle(this), gfx::Font(), SK_ColorBLACK,
+ 5, 3, 100, 20);
+}
+
+bool Tab2::OnMousePressed(const views::MouseEvent& event) {
+ if (event.IsLeftMouseButton()) {
+ model_->SelectTab(this);
+ model_->CaptureDragInfo(this, event);
+ }
+ return true;
+}
+
+bool Tab2::OnMouseDragged(const views::MouseEvent& event) {
+ dragging_ = true;
+ return model_->DragTab(this, event);
+}
+
+void Tab2::OnMouseReleased(const views::MouseEvent& event, bool canceled) {
+ if (dragging_) {
+ dragging_ = false;
+ model_->DragEnded(this);
+ }
+}
+
+void Tab2::DidChangeBounds(const gfx::Rect& previous,
+ const gfx::Rect& current) {
+}