/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \class QCocoaWindowFunctions
    \inmodule QtPlatformHeaders

    \brief The QCocoaWindowFunctions class is an inline class containing
    miscellaneous functionality for NSWindow and NSView window specific functionality.

    \note There is no binary compatibility guarantee for this class,
    meaning that an application using it is only guaranteed to work with the Qt
    version it was developed against.
*/

/*!
    \typedef QCocoaWindowFunctions::BottomLeftClippedByNSWindowOffset

    This is the typedef for the function returned by QGuiApplication::platformFunction when passed clippedByNSWindowIdentifier.
*/

/*!
    \fn QByteArray QCocoaWindowFunctions::bottomLeftClippedByNSWindowOffsetIdentifier()

    This function returns the bytearray that can be used to query
    QGuiApplication::platformFunction to retrieve the BottomLeftClippedByNSWindowOffset function.
*/

/*!
    \fn QPoint QCocoaWindowFunctions::bottomLeftClippedByNSWindowOffset(QWindow *window)

    This is a convenience function that can be used directly instead of resolving the function pointer.
    \a window will be relayed to the function retrieved by QGuiApplication
*/
