Dash.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /* libmspub
00003  * Version: MPL 1.1 / GPLv2+ / LGPLv2+
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License or as specified alternatively below. You may obtain a copy of
00008  * the License at http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * Major Contributor(s):
00016  * Copyright (C) 2012 Brennan Vincent <brennanv@email.arizona.edu>
00017  *
00018  * All Rights Reserved.
00019  *
00020  * For minor contributions see the git repository.
00021  *
00022  * Alternatively, the contents of this file may be used under the terms of
00023  * either the GNU General Public License Version 2 or later (the "GPLv2+"), or
00024  * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
00025  * in which case the provisions of the GPLv2+ or the LGPLv2+ are applicable
00026  * instead of those above.
00027  */
00028 
00029 #ifndef __DASH_H__
00030 #define __DASH_H__
00031 
00032 #include <boost/optional.hpp>
00033 #include <vector>
00034 
00035 namespace libmspub
00036 {
00037 enum DotStyle
00038 {
00039   RECT_DOT,
00040   ROUND_DOT
00041 };
00042 enum MSPUBDashStyle
00043 {
00044   MSPUB_DS_SOLID,
00045   DASH_SYS,
00046   DOT_SYS,
00047   DASH_DOT_SYS,
00048   DASH_DOT_DOT_SYS,
00049   DOT_GEL,
00050   DASH_GEL,
00051   LONG_DASH_GEL,
00052   DASH_DOT_GEL,
00053   LONG_DASH_DOT_GEL,
00054   LONG_DASH_DOT_DOT_GEL
00055 };
00056 struct Dot
00057 {
00058   boost::optional<double> m_length;
00059   unsigned m_count;
00060   Dot(unsigned count) : m_length(), m_count(count)
00061   {
00062   }
00063   Dot(unsigned count, double length) : m_length(length), m_count(count)
00064   {
00065   }
00066 };
00067 struct Dash
00068 {
00069   double m_distance;
00070   DotStyle m_dotStyle;
00071   std::vector<Dot> m_dots; // empty vector is interpreted as solid line
00072   Dash(double distance, DotStyle dotStyle) : m_distance(distance),
00073     m_dotStyle(dotStyle), m_dots()
00074   {
00075   }
00076 };
00077 bool operator!=(const Dot &lhs, const Dot &rhs);
00078 bool operator==(const Dot &lhs, const Dot &rhs);
00079 bool operator==(const Dash &lhs, const Dash &rhs);
00080 Dash getDash(MSPUBDashStyle style, unsigned shapeLineWidthInEmu,
00081              DotStyle dotStyle);
00082 } // namespace libmspub
00083 
00084 #endif /* __DASH_H__ */
00085 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */