Home | History | Annotate | Download | only in dom
      1 /*
      2  * Copyright (C) 1999 Lars Knoll (knoll (at) kde.org)
      3  *           (C) 1999 Antti Koivisto (koivisto (at) kde.org)
      4  *           (C) 2001 Dirk Mueller (mueller (at) kde.org)
      5  *           (C) 2006 Alexey Proskuryakov (ap (at) webkit.org)
      6  * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
      7  * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
      8  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
      9  * Copyright (C) 2012-2013 Intel Corporation. All rights reserved.
     10  *
     11  * This library is free software; you can redistribute it and/or
     12  * modify it under the terms of the GNU Library General Public
     13  * License as published by the Free Software Foundation; either
     14  * version 2 of the License, or (at your option) any later version.
     15  *
     16  * This library is distributed in the hope that it will be useful,
     17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     19  * Library General Public License for more details.
     20  *
     21  * You should have received a copy of the GNU Library General Public License
     22  * along with this library; see the file COPYING.LIB.  If not, write to
     23  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     24  * Boston, MA 02110-1301, USA.
     25  *
     26  */
     27 
     28 #ifndef ViewportDescription_h
     29 #define ViewportDescription_h
     30 
     31 #include "core/page/PageScaleConstraints.h"
     32 #include "platform/Length.h"
     33 #include "platform/geometry/FloatSize.h"
     34 
     35 namespace WebCore {
     36 
     37 struct ViewportDescription {
     38 
     39     enum Type {
     40         // These are ordered in increasing importance.
     41         UserAgentStyleSheet,
     42         HandheldFriendlyMeta,
     43         MobileOptimizedMeta,
     44         ViewportMeta,
     45         AuthorStyleSheet
     46     } type;
     47 
     48     enum {
     49         ValueAuto = -1,
     50         ValueDeviceWidth = -2,
     51         ValueDeviceHeight = -3,
     52         ValuePortrait = -4,
     53         ValueLandscape = -5,
     54         ValueDeviceDPI = -6,
     55         ValueLowDPI = -7,
     56         ValueMediumDPI = -8,
     57         ValueHighDPI = -9,
     58         ValueExtendToZoom = -10
     59     };
     60 
     61     ViewportDescription(Type type = UserAgentStyleSheet)
     62         : type(type)
     63         , zoom(ValueAuto)
     64         , minZoom(ValueAuto)
     65         , maxZoom(ValueAuto)
     66         , userZoom(ValueAuto)
     67         , orientation(ValueAuto)
     68         , deprecatedTargetDensityDPI(ValueAuto)
     69     {
     70     }
     71 
     72     // All arguments are in CSS units.
     73     PageScaleConstraints resolve(const FloatSize& initialViewportSize) const;
     74 
     75     Length minWidth;
     76     Length maxWidth;
     77     Length minHeight;
     78     Length maxHeight;
     79     float zoom;
     80     float minZoom;
     81     float maxZoom;
     82     float userZoom;
     83     float orientation;
     84     float deprecatedTargetDensityDPI; // Only used for Android WebView
     85 
     86     bool operator==(const ViewportDescription& other) const
     87     {
     88         // Used for figuring out whether to reset the viewport or not,
     89         // thus we are not taking type into account.
     90         return minWidth == other.minWidth
     91             && maxWidth == other.maxWidth
     92             && minHeight == other.minHeight
     93             && maxHeight == other.maxHeight
     94             && zoom == other.zoom
     95             && minZoom == other.minZoom
     96             && maxZoom == other.maxZoom
     97             && userZoom == other.userZoom
     98             && orientation == other.orientation
     99             && deprecatedTargetDensityDPI == other.deprecatedTargetDensityDPI;
    100     }
    101 
    102     bool operator!=(const ViewportDescription& other) const
    103     {
    104         return !(*this == other);
    105     }
    106 
    107     bool isLegacyViewportType() const { return type >= HandheldFriendlyMeta && type <= ViewportMeta; }
    108     bool isMetaViewportType() const { return type == ViewportMeta; }
    109     bool isSpecifiedByAuthor() const { return type != UserAgentStyleSheet; }
    110 
    111 private:
    112     enum Direction { Horizontal, Vertical };
    113     static float resolveViewportLength(const Length&, const FloatSize& initialViewportSize, Direction);
    114 };
    115 
    116 } // namespace WebCore
    117 
    118 #endif // ViewportDescription_h
    119