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