khtml Library API Documentation

khtmllayout.h

00001 /*
00002     This file is part of the KDE libraries
00003 
00004     Copyright (C) 1999 Lars Knoll (knoll@kde.org)
00005 
00006     This library is free software; you can redistribute it and/or
00007     modify it under the terms of the GNU Library General Public
00008     License as published by the Free Software Foundation; either
00009     version 2 of the License, or (at your option) any later version.
00010 
00011     This library is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014     Library General Public License for more details.
00015 
00016     You should have received a copy of the GNU Library General Public License
00017     along with this library; see the file COPYING.LIB.  If not, write to
00018     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00019     Boston, MA 02111-1307, USA.
00020 
00021     $Id: khtmllayout.h,v 1.18.2.4 2003/08/17 14:38:51 mueller Exp $
00022 
00023     This widget holds some useful definitions needed for layouting Elements
00024 */
00025 #ifndef HTML_LAYOUT_H
00026 #define HTML_LAYOUT_H
00027 
00028 
00029 /*
00030  * this namespace contains definitions for various types needed for
00031  * layouting.
00032  */
00033 namespace khtml
00034 {
00035 
00036     const int UNDEFINED = -1;
00037 
00038     // alignment
00039     enum VAlign { VNone=0, Bottom, VCenter, Top, Baseline };
00040     enum HAlign { HDefault, Left, HCenter, Right, HNone = 0 };
00041 
00042     /*
00043      * %multiLength and %Length
00044      */
00045     enum LengthType { Variable = 0, Relative, Percent, Fixed, Static };
00046     class Length
00047     {
00048     public:
00049         Length() : _length(0) {}
00050         Length(LengthType t) { l.value = 0; l.type = t; }
00051         Length(int v, LengthType t) { l.value = v; l.type = t; }
00052 
00053         bool operator==(const Length& o) const
00054             { return _length == o._length; }
00055         bool operator!=(const Length& o) const
00056             { return _length != o._length ; }
00057 
00058         /*
00059          * works only for Fixed and Percent, returns -1 otherwise
00060          */
00061         int width(int maxWidth) const
00062             {
00063                 switch(l.type)
00064                 {
00065                 case Fixed:
00066                     return l.value;
00067                 case Percent:
00068                     return maxWidth*l.value/100;
00069                 case Variable:
00070                     return maxWidth;
00071                 default:
00072                     return -1;
00073                 }
00074             }
00075         /*
00076          * returns the minimum width value which could work...
00077          */
00078         int minWidth(int maxWidth) const
00079             {
00080                 switch(l.type)
00081                 {
00082                 case Fixed:
00083                     return l.value;
00084                 case Percent:
00085                     return maxWidth*l.value/100;
00086                 case Variable:
00087                 default:
00088                     return 0;
00089                 }
00090             }
00091         bool isVariable() const { return (l.type == Variable); }
00092         bool isRelative() const { return (l.type == Relative); }
00093         bool isPercent() const { return (l.type == Percent); }
00094         bool isFixed() const { return (l.type == Fixed); }
00095         bool isStatic() const { return (l.type == Static); }
00096 
00097         int value() const { return l.value; }
00098         LengthType type() const { return l.type; }
00099         union {
00100           struct {
00101             signed int value : 29;
00102             LengthType type : 3;
00103           } l;
00104           Q_UINT32 _length;
00105        };
00106     };
00107 
00108 }
00109 
00110 #ifdef __GNUC__
00111 #if __GNUC__ -  0 < 3 // stupid stl_relops.h
00112 inline bool operator!=(khtml::LengthType __x, khtml::LengthType __y) {
00113   return !(__x == __y);
00114 }
00115 #endif
00116 #endif
00117 
00118 #endif
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.5.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Wed Jan 28 13:34:08 2004 by doxygen 1.3.4 written by Dimitri van Heesch, © 1997-2001