// Copyright (c) 2012 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 "ui/gfx/selection_model.h"

#include "base/format_macros.h"
#include "base/strings/stringprintf.h"

namespace gfx {

SelectionModel::SelectionModel()
  : selection_(0), caret_affinity_(CURSOR_BACKWARD) {}

SelectionModel::SelectionModel(size_t position, LogicalCursorDirection affinity)
  : selection_(position), caret_affinity_(affinity) {}

SelectionModel::SelectionModel(ui::Range selection,
                               LogicalCursorDirection affinity)
  : selection_(selection), caret_affinity_(affinity) {}

bool SelectionModel::operator==(const SelectionModel& sel) const {
  return selection_ == sel.selection() &&
         caret_affinity_ == sel.caret_affinity();
}

std::string SelectionModel::ToString() const {
  std::string str = "{";
  if (selection().is_empty())
    base::StringAppendF(&str, "%" PRIuS, caret_pos());
  else
    str += selection().ToString();
  const bool backward = caret_affinity() == CURSOR_BACKWARD;
  return str + (backward ? ",BACKWARD}" : ",FORWARD}");
}

}  // namespace gfx
