LCOV - code coverage report
Current view: top level - gfx/src - nsBoundingMetrics.h (source / functions) Hit Total Coverage
Test: output.info Lines: 3 15 20.0 %
Date: 2017-07-14 16:53:18 Functions: 1 2 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /* This Source Code Form is subject to the terms of the Mozilla Public
       3             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       4             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       5             : 
       6             : #ifndef __nsBoundingMetrics_h
       7             : #define __nsBoundingMetrics_h
       8             : 
       9             : #include "nsCoord.h"
      10             : #include <algorithm>
      11             : 
      12             : /* Struct used for accurate measurements of a string, in order to
      13             :  * allow precise positioning when processing MathML.  This is in its
      14             :  * own header file because some very-widely-included headers need it
      15             :  * but not the rest of nsFontMetrics, or vice versa.
      16             :  */
      17             : 
      18             : struct nsBoundingMetrics {
      19             : 
      20             :     ///////////
      21             :     // Metrics that _exactly_ enclose the text:
      22             : 
      23             :     // The character coordinate system is the one used on X Windows:
      24             :     // 1. The origin is located at the intersection of the baseline
      25             :     //    with the left of the character's cell.
      26             :     // 2. All horizontal bearings are oriented from left to right.
      27             :     // 2. All horizontal bearings are oriented from left to right.
      28             :     // 3. The ascent is oriented from bottom to top (being 0 at the orgin).
      29             :     // 4. The descent is oriented from top to bottom (being 0 at the origin).
      30             : 
      31             :     // Note that Win32/Mac/PostScript use a different convention for
      32             :     // the descent (all vertical measurements are oriented from bottom
      33             :     // to top on these palatforms). Make sure to flip the sign of the
      34             :     // descent on these platforms for cross-platform compatibility.
      35             : 
      36             :     // Any of the following member variables listed here can have
      37             :     // positive or negative value.
      38             : 
      39             :     nscoord leftBearing;
      40             :     /* The horizontal distance from the origin of the drawing
      41             :        operation to the left-most part of the drawn string. */
      42             : 
      43             :     nscoord rightBearing;
      44             :     /* The horizontal distance from the origin of the drawing
      45             :        operation to the right-most part of the drawn string.
      46             :        The _exact_ width of the string is therefore:
      47             :        rightBearing - leftBearing */
      48             : 
      49             :     nscoord ascent;
      50             :     /* The vertical distance from the origin of the drawing
      51             :        operation to the top-most part of the drawn string. */
      52             : 
      53             :     nscoord descent;
      54             :     /* The vertical distance from the origin of the drawing
      55             :        operation to the bottom-most part of the drawn string.
      56             :        The _exact_ height of the string is therefore:
      57             :        ascent + descent */
      58             : 
      59             :     nscoord width;
      60             :     /* The horizontal distance from the origin of the drawing
      61             :        operation to the correct origin for drawing another string
      62             :        to follow the current one. Depending on the font, this
      63             :        could be greater than or less than the right bearing. */
      64             : 
      65         657 :     nsBoundingMetrics() : leftBearing(0), rightBearing(0),
      66         657 :                           ascent(0), descent(0), width(0)
      67         657 :     {}
      68             : 
      69             :     void
      70           0 :     operator += (const nsBoundingMetrics& bm) {
      71           0 :         if (ascent + descent == 0 && rightBearing - leftBearing == 0) {
      72           0 :             ascent = bm.ascent;
      73           0 :             descent = bm.descent;
      74           0 :             leftBearing = width + bm.leftBearing;
      75           0 :             rightBearing = width + bm.rightBearing;
      76             :         }
      77             :         else {
      78           0 :             if (ascent < bm.ascent) ascent = bm.ascent;
      79           0 :             if (descent < bm.descent) descent = bm.descent;
      80           0 :             leftBearing = std::min(leftBearing, width + bm.leftBearing);
      81           0 :             rightBearing = std::max(rightBearing, width + bm.rightBearing);
      82             :         }
      83           0 :         width += bm.width;
      84           0 :     }
      85             : };
      86             : 
      87             : #endif // __nsBoundingMetrics_h

Generated by: LCOV version 1.13