/* * TextLayoutHelper.h * created for Marathon: Aleph One Copyright (C) 2001 and beyond by Woody Zenfell, III and the "Aleph One" developers. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. This license is contained in the file "COPYING", which is included with this source code; it is available online at http://www.gnu.org/licenses/gpl.html * The code in this file is licensed to you under the GNU GPL. As the copyright holder, * however, I reserve the right to use this code as I see fit, without being bound by the * GPL's terms. This exemption is not intended to apply to modified versions of this file - * if I were to use a modified version, I would be a licensee of whomever modified it, and * thus must observe the GPL terms. * * TextLayoutHelper assists with laying out a set of non-overlapping rectangles. It's not * as smart or as general as it could be, but it works. * * Created by woody on Thu Nov 08 2001. */ #ifndef TEXTLAYOUTHELPER_H #define TEXTLAYOUTHELPER_H // should eventually use list and some other sort mechanism, probably, for cheaper insertions. #include using namespace std; class TextLayoutHelper { public: TextLayoutHelper(); ~TextLayoutHelper(); // Remove all reservations void removeAllReservations(); // Reserve a place for the rectangle given. Returns the smallest bottom that will not overlap previous reservations. int reserveSpaceFor(int inLeft, unsigned int inWidth, int inLowestBottom, unsigned int inHeight); protected: struct ReservationEnd; struct Reservation; typedef vector CollectionOfReservationEnds; CollectionOfReservationEnds mReservationEnds; }; struct TextLayoutHelper::ReservationEnd { int mHorizontalCoordinate; TextLayoutHelper::Reservation* mReservation; bool mStartOfReservation; }; struct TextLayoutHelper::Reservation { int mBottom; int mTop; }; #endif//TEXTLAYOUTHELPER_H