15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/selection_model.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/format_macros.h"
87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/stringprintf.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SelectionModel::SelectionModel()
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    : selection_(0),
14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      caret_affinity_(CURSOR_BACKWARD) {}
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SelectionModel::SelectionModel(size_t position, LogicalCursorDirection affinity)
17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    : selection_(position),
18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      caret_affinity_(affinity) {}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)SelectionModel::SelectionModel(const Range& selection,
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               LogicalCursorDirection affinity)
22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    : selection_(selection),
23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      caret_affinity_(affinity) {}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SelectionModel::operator==(const SelectionModel& sel) const {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return selection_ == sel.selection() &&
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         caret_affinity_ == sel.caret_affinity();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string SelectionModel::ToString() const {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string str = "{";
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (selection().is_empty())
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::StringAppendF(&str, "%" PRIuS, caret_pos());
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    str += selection().ToString();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const bool backward = caret_affinity() == CURSOR_BACKWARD;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return str + (backward ? ",BACKWARD}" : ",FORWARD}");
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gfx
41