// Copyright 2014 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.

#ifndef SKY_ENGINE_PUBLIC_PLATFORM_WEBSELECTIONBOUND_H_
#define SKY_ENGINE_PUBLIC_PLATFORM_WEBSELECTIONBOUND_H_

#include "sky/engine/public/platform/WebPoint.h"
#include "sky/engine/public/platform/WebRect.h"

namespace blink {

// An endpoint for an active selection region.
struct WebSelectionBound {
    enum Type {
        Caret,
        SelectionLeft,
        SelectionRight
    };

    explicit WebSelectionBound(Type type)
        : type(type)
        , layerId(0)
    {
    }

    // The logical type of the endpoint. Note that this is dependent not only on
    // the bound's relative location, but also the underlying text direction.
    Type type;

    // The id of the platform layer to which the bound should be anchored.
    int layerId;

    // The one-dimensional rect of the bound's edge in layer coordinates, not to
    // be confused with the selection region.
    // FIXME: Remove when downstream code uses |edge{Top|Bottom}InLayer|,
    // crbug.com/405666.
    WebRect edgeRectInLayer;

    // The bottom and top coordinates of the edge (caret), in layer coordinates,
    // that define the selection bound.
    WebPoint edgeTopInLayer;
    WebPoint edgeBottomInLayer;
};

} // namespace blink

#endif  // SKY_ENGINE_PUBLIC_PLATFORM_WEBSELECTIONBOUND_H_
