summaryrefslogtreecommitdiffstats
path: root/khtml/misc/khtmllayout.h
diff options
context:
space:
mode:
Diffstat (limited to 'khtml/misc/khtmllayout.h')
-rw-r--r--khtml/misc/khtmllayout.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/khtml/misc/khtmllayout.h b/khtml/misc/khtmllayout.h
new file mode 100644
index 000000000..e4fb531a1
--- /dev/null
+++ b/khtml/misc/khtmllayout.h
@@ -0,0 +1,112 @@
+/*
+ This file is part of the KDE libraries
+
+ Copyright (C) 1999 Lars Knoll (knoll@kde.org)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+ This widget holds some useful definitions needed for layouting Elements
+*/
+#ifndef HTML_LAYOUT_H
+#define HTML_LAYOUT_H
+
+
+/*
+ * this namespace contains definitions for various types needed for
+ * layouting.
+ */
+namespace khtml
+{
+
+ const int UNDEFINED = -1;
+
+ // alignment
+ enum VAlign { VNone=0, Bottom, VCenter, Top, Baseline };
+ enum HAlign { HDefault, Left, HCenter, Right, HNone = 0 };
+
+ /*
+ * %multiLength and %Length
+ */
+ enum LengthType { Variable = 0, Relative, Percent, Fixed, Static };
+ struct Length
+ {
+ Length() : _length(0) {}
+ Length(LengthType t) { _length = 0; l.type = t; }
+ Length(int v, LengthType t, bool q=false)
+ { _length= 0; l.value = v; l.type = t; l.quirk = q; }
+ bool operator==(const Length& o) const
+ { return _length == o._length; }
+ bool operator!=(const Length& o) const
+ { return _length != o._length; }
+ void setValue(LengthType t, int v) {
+ _length = 0; l.value = v; l.type = t; l.quirk = false;
+ }
+ /*
+ * works only for Fixed and Percent, returns -1 otherwise
+ */
+ int width(int maxWidth) const
+ {
+ switch(l.type)
+ {
+ case Fixed:
+ return l.value;
+ case Percent:
+ return maxWidth*l.value/100;
+ case Variable:
+ return maxWidth;
+ default:
+ return -1;
+ }
+ }
+ /*
+ * returns the minimum width value which could work...
+ */
+ int minWidth(int maxWidth) const
+ {
+ switch(l.type)
+ {
+ case Fixed:
+ return l.value;
+ case Percent:
+ return maxWidth*l.value/100;
+ case Variable:
+ default:
+ return 0;
+ }
+ }
+ bool isVariable() const { return ((LengthType) l.type == Variable); }
+ bool isRelative() const { return ((LengthType) l.type == Relative); }
+ bool isPercent() const { return ((LengthType ) l.type == Percent); }
+ bool isFixed() const { return ((LengthType) l.type == Fixed); }
+ bool isStatic() const { return ((LengthType) l.type == Static); }
+ bool isQuirk() const { return l.quirk; }
+
+ int value() const { return l.value; }
+ LengthType type() const { return (LengthType) l.type; }
+
+ union {
+ struct {
+ signed int value : 28;
+ unsigned type : 3;
+ bool quirk : 1;
+ } l;
+ Q_UINT32 _length;
+ };
+ };
+
+}
+
+#endif