LayoutEngine.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef ROCKETCORELAYOUTENGINE_H
00029 #define ROCKETCORELAYOUTENGINE_H
00030
00031 #include "LayoutBlockBox.h"
00032
00033 namespace Rocket {
00034 namespace Core {
00035
00036 class Box;
00037
00042 class LayoutEngine
00043 {
00044 public:
00046 LayoutEngine();
00047 ~LayoutEngine();
00048
00052 bool FormatElement(Element* element, const Vector2f& containing_block);
00053
00059 static void BuildBox(Box& box, const Vector2f& containing_block, Element* element, bool inline_element = false);
00067 static void BuildBox(Box& box, float& min_height, float& max_height, LayoutBlockBox* containing_box, Element* element, bool inline_element = false);
00068
00074 static float ClampWidth(float width, Element* element, float containing_block_width);
00080 static float ClampHeight(float height, Element* element, float containing_block_height);
00081
00085 static Vector2f& Round(Vector2f& value);
00089 static float Round(float value);
00090
00091 static void* AllocateLayoutChunk(size_t size);
00092 static void DeallocateLayoutChunk(void* chunk);
00093
00094 private:
00097 bool FormatElement(Element* element);
00098
00101 bool FormatElementBlock(Element* element);
00104 bool FormatElementInline(Element* element);
00107 void FormatElementReplaced(Element* element);
00111 bool FormatElementSpecial(Element* element);
00112
00116 static Vector2f GetContainingBlock(const LayoutBlockBox* containing_box);
00117
00122 static void BuildBoxWidth(Box& box, Element* element, float containing_block_width);
00127 static void BuildBoxHeight(Box& box, Element* element, float containing_block_height);
00128
00129
00130 LayoutBlockBox* block_box;
00131
00132
00133 LayoutBlockBox* block_context_box;
00134 };
00135
00136 }
00137 }
00138
00139 #endif