/****************************************************************************
**
** 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$
**
****************************************************************************/

/*!
    \example analogclock
    \title Analog Clock Window Example

    \brief The Analog Clock Window example shows how to draw the contents of
    a custom window.

    \image analogclock-window-example.png Screenshot of the Analog
    Clock Window example

    This example demonstrates how the transformation and scaling
    features of QPainter can be used to make drawing easier.

    \section1 AnalogClockWindow Class Definition

    The \c AnalogClockWindow class provides a clock with hour and
    minute hands that is automatically updated every few seconds.  We
    make use of the RasterWindow from the \l {Raster Window Example}
    and reimplement the \c render function to draw the clock face:

    \snippet analogclock/main.cpp 5

    \section1 AnalogClock Class Implementation

    \snippet analogclock/main.cpp 6

    We set a title on the window and resize to a reasonable size. Then
    we start a timer which we will use to redraw the clock every
    second.

    \snippet analogclock/main.cpp 7

    The timerEvent function is called every second as a result of
    our startTimer call. Making use of the convenience in the base
    class, we schedule the window to be repainted.

    Checking the timer's id is not strictly needed as we only have
    one active timer in this instance, but it is good practice to do
    so.

    \snippet analogclock/main.cpp 14
    \snippet analogclock/main.cpp 8

    Before we set up the painter and draw the clock, we first define
    two lists of \l {QPoint}s and two \l{QColor}s that will be used
    for the hour and minute hands. The minute hand's color has an
    alpha component of 191, meaning that it's 75% opaque.

    \snippet analogclock/main.cpp 9

    We call QPainter::setRenderHint() with QPainter::Antialiasing to
    turn on antialiasing. This makes drawing of diagonal lines much
    smoother.

    \snippet analogclock/main.cpp 10

    The translation moves the origin to the center of the window, and
    the scale operation ensures that the following drawing operations
    are scaled to fit within the window. We use a scale factor that
    let's us use x and y coordinates between -100 and 100, and that
    ensures that these lie within the length of the window's shortest
    side.

    To make our code simpler, we will draw a fixed size clock face that will
    be positioned and scaled so that it lies in the center of the window.

    We also determine the length of the window's shortest side so that we
    can fit the clock face inside the window.

    The painter takes care of all the transformations made during the
    rendering, and ensures that everything is drawn correctly. Letting
    the painter handle transformations is often easier than performing
    manual calculations.

    \image analogclockwindow-viewport.png

    We draw the hour hand first, using a formula that rotates the coordinate
    system counterclockwise by a number of degrees determined by the current
    hour and minute. This means that the hand will be shown rotated clockwise
    by the required amount.

    \snippet analogclock/main.cpp 11

    We set the pen to be Qt::NoPen because we don't want any outline,
    and we use a solid brush with the color appropriate for
    displaying hours. Brushes are used when filling in polygons and
    other geometric shapes.

    \snippet analogclock/main.cpp 2

    We save and restore the transformation matrix before and after the
    rotation because we want to place the minute hand without having to
    take into account any previous rotations.

    \snippet analogclock/main.cpp 12

    We draw markers around the edge of the clock for each hour. We
    draw each marker then rotate the coordinate system so that the
    painter is ready for the next one.

    \snippet analogclock/main.cpp 13
    \snippet analogclock/main.cpp 3

    The minute hand is rotated in a similar way to the hour hand.

    \snippet analogclock/main.cpp 4

    Again, we draw markers around the edge of the clock, but this
    time to indicate minutes. We skip multiples of 5 to avoid drawing
    minute markers on top of hour markers.
*/
