00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #define DOM_OPTIMIZATION 0
00024
00025 #define SetStyleOrigin 0
00026 #define SetStyleLeftTop 0
00027 #define SetStyleRightTop 1
00028 #define SetStyleLeftBottom 2
00029 #define SetStyleRightBottom 3
00030 #define SetStyleSize 4
00031 #define SetSize 5
00032 #define AppendChild 6
00033 #define InsertBefore 7
00034 #define RemoveChild 8
00035
00036 #define CPDOMDisplayServerSetStyleOrigin(anInstruction, aDOMElement, aTransform, x, y)\
00037 if (!aDOMElement.CPDOMDisplayContext)\
00038 aDOMElement.CPDOMDisplayContext = [];\
00039 var __index = aDOMElement.CPDOMDisplayContext[SetStyleOrigin];\
00040 if (!(__index >= 0))\
00041 {\
00042 __index = aDOMElement.CPDOMDisplayContext[SetStyleOrigin] = CPDOMDisplayServerInstructionCount;\
00043 CPDOMDisplayServerInstructionCount += 5;\
00044 }\
00045 CPDOMDisplayServerInstructions[__index] = anInstruction;\
00046 CPDOMDisplayServerInstructions[__index + 1] = aDOMElement;\
00047 CPDOMDisplayServerInstructions[__index + 2] = aTransform;\
00048 CPDOMDisplayServerInstructions[__index + 3] = x;\
00049 CPDOMDisplayServerInstructions[__index + 4] = y;
00050 #if !DOM_OPTIMIZATION
00051 #define CPDOMDisplayServerSetStyleLeftTop(aDOMElement, aTransform, aLeft, aTop) \
00052 if (aTransform) var ____p = _CGPointApplyAffineTransform(CGPointMake(aLeft, aTop), aTransform); \
00053 else var ____p = _CGPointMake(aLeft, aTop); \
00054 aDOMElement.style.left = ROUND(____p.x) + "px";\
00055 aDOMElement.style.top = ROUND(____p.y) + "px";
00056
00057 #define CPDOMDisplayServerSetStyleRightTop(aDOMElement, aTransform, aRight, aTop) \
00058 if (aTransform) var ____p = _CGPointApplyAffineTransform(CGPointMake(aRight, aTop), aTransform); \
00059 else var ____p = _CGPointMake(aRight, aTop); \
00060 aDOMElement.style.right = ROUND(____p.x) + "px";\
00061 aDOMElement.style.top = ROUND(____p.y) + "px";
00062
00063 #define CPDOMDisplayServerSetStyleLeftBottom(aDOMElement, aTransform, aLeft, aBottom) \
00064 if (aTransform) var ____p = _CGPointApplyAffineTransform(CGPointMake(aLeft, aBottom), aTransform); \
00065 else var ____p = _CGPointMake(aLeft, aBottom); \
00066 aDOMElement.style.left = ROUND(____p.x) + "px";\
00067 aDOMElement.style.bottom = ROUND(____p.y) + "px";
00068
00069 #define CPDOMDisplayServerSetStyleRightBottom(aDOMElement, aTransform, aRight, aBottom) \
00070 if (aTransform) var ____p = _CGPointApplyAffineTransform(CGPointMake(aRight, aBottom), aTransform); \
00071 else var ____p = _CGPointMake(aRight, aBottom); \
00072 aDOMElement.style.right = ROUND(____p.x) + "px";\
00073 aDOMElement.style.bottom = ROUND(____p.y) + "px";
00074
00075 #define CPDOMDisplayServerSetStyleSize(aDOMElement, aWidth, aHeight) \
00076 aDOMElement.style.width = MAX(0.0, ROUND(aWidth)) + "px";\
00077 aDOMElement.style.height = MAX(0.0, ROUND(aHeight)) + "px";
00078
00079 #define CPDOMDisplayServerSetSize(aDOMElement, aWidth, aHeight) \
00080 aDOMElement.width = MAX(0.0, ROUND(aWidth));\
00081 aDOMElement.height = MAX(0.0, ROUND(aHeight));
00082
00083 #define CPDOMDisplayServerAppendChild(aParentElement, aChildElement) aParentElement.appendChild(aChildElement)
00084
00085 #define CPDOMDisplayServerInsertBefore(aParentElement, aChildElement, aBeforeElement) aParentElement.insertBefore(aChildElement, aBeforeElement)
00086
00087 #define CPDOMDisplayServerRemoveChild(aParentElement, aChildElement) aParentElement.removeChild(aChildElement)
00088
00089 #define PREPARE_DOM_OPTIMIZATION()
00090 #define EXECUTE_DOM_INSTRUCTIONS()
00091
00092 #else
00093 #define CPDOMDisplayServerSetStyleLeftTop(aDOMElement, aTransform, aLeft, aTop) CPDOMDisplayServerSetStyleOrigin(SetStyleLeftTop, aDOMElement, aTransform, aLeft, aTop)
00094
00095 #define CPDOMDisplayServerSetStyleRightTop(aDOMElement, aTransform, aRight, aTop) CPDOMDisplayServerSetStyleOrigin(SetStyleRightTop, aDOMElement, aTransform, aRight, aTop)
00096
00097 #define CPDOMDisplayServerSetStyleLeftBottom(aDOMElement, aTransform, aLeft, aBottom) CPDOMDisplayServerSetStyleOrigin(SetStyleLeftBottom, aDOMElement, aTransform, aLeft, aBottom)
00098
00099 #define CPDOMDisplayServerSetStyleRightBottom(aDOMElement, aTransform, aRight, aBottom) CPDOMDisplayServerSetStyleOrigin(SetStyleRightBottom, aDOMElement, aTransform, aRight, aBottom)
00100
00101 #define CPDOMDisplayServerSetStyleSize(aDOMElement, aWidth, aHeight)\
00102 if (!aDOMElement.CPDOMDisplayContext)\
00103 aDOMElement.CPDOMDisplayContext = [];\
00104 var __index = aDOMElement.CPDOMDisplayContext[SetStyleSize];\
00105 if (!(__index >= 0))\
00106 {\
00107 __index = aDOMElement.CPDOMDisplayContext[SetStyleSize] = CPDOMDisplayServerInstructionCount;\
00108 CPDOMDisplayServerInstructionCount += 4;\
00109 }\
00110 CPDOMDisplayServerInstructions[__index] = SetStyleSize;\
00111 CPDOMDisplayServerInstructions[__index + 1] = aDOMElement;\
00112 CPDOMDisplayServerInstructions[__index + 2] = aWidth;\
00113 CPDOMDisplayServerInstructions[__index + 3] = aHeight;
00114
00115 #define CPDOMDisplayServerSetSize(aDOMElement, aWidth, aHeight)\
00116 if (!aDOMElement.CPDOMDisplayContext)\
00117 aDOMElement.CPDOMDisplayContext = [];\
00118 var __index = aDOMElement.CPDOMDisplayContext[SetSize];\
00119 if (!(__index >= 0))\
00120 {\
00121 __index = aDOMElement.CPDOMDisplayContext[SetSize] = CPDOMDisplayServerInstructionCount;\
00122 CPDOMDisplayServerInstructionCount += 4;\
00123 }\
00124 CPDOMDisplayServerInstructions[__index] = SetSize;\
00125 CPDOMDisplayServerInstructions[__index + 1] = aDOMElement;\
00126 CPDOMDisplayServerInstructions[__index + 2] = aWidth;\
00127 CPDOMDisplayServerInstructions[__index + 3] = aHeight;
00128
00129 #define CPDOMDisplayServerAppendChild(aParentElement, aChildElement)\
00130 if (aChildElement.CPDOMDisplayContext) aChildElement.CPDOMDisplayContext[SetStyleOrigin] = -1;\
00131 CPDOMDisplayServerInstructions[CPDOMDisplayServerInstructionCount++] = AppendChild;\
00132 CPDOMDisplayServerInstructions[CPDOMDisplayServerInstructionCount++] = aParentElement;\
00133 CPDOMDisplayServerInstructions[CPDOMDisplayServerInstructionCount++] = aChildElement;
00134
00135 #define CPDOMDisplayServerInsertBefore(aParentElement, aChildElement, aBeforeElement)\
00136 if (aChildElement.CPDOMDisplayContext) aChildElement.CPDOMDisplayContext[SetStyleOrigin] = -1;\
00137 CPDOMDisplayServerInstructions[CPDOMDisplayServerInstructionCount++] = InsertBefore;\
00138 CPDOMDisplayServerInstructions[CPDOMDisplayServerInstructionCount++] = aParentElement;\
00139 CPDOMDisplayServerInstructions[CPDOMDisplayServerInstructionCount++] = aChildElement;\
00140 CPDOMDisplayServerInstructions[CPDOMDisplayServerInstructionCount++] = aBeforeElement;
00141
00142 #define CPDOMDisplayServerRemoveChild(aParentElement, aChildElement)\
00143 CPDOMDisplayServerInstructions[CPDOMDisplayServerInstructionCount++] = RemoveChild;\
00144 CPDOMDisplayServerInstructions[CPDOMDisplayServerInstructionCount++] = aParentElement;\
00145 CPDOMDisplayServerInstructions[CPDOMDisplayServerInstructionCount++] = aChildElement;
00146
00147 #define PREPARE_DOM_OPTIMIZATION()\
00148 CPDOMDisplayServerInstructions = [];\
00149 CPDOMDisplayServerInstructionCount = 0;
00150 #define EXECUTE_DOM_INSTRUCTIONS()\
00151 var index = 0;\
00152 while (index < CPDOMDisplayServerInstructionCount)\
00153 {\
00154 var instruction = CPDOMDisplayServerInstructions[index++];\
00155 try{\
00156 switch (instruction)\
00157 {\
00158 case SetStyleLeftTop:\
00159 case SetStyleRightTop:\
00160 case SetStyleLeftBottom:\
00161 case SetStyleRightBottom: var element = CPDOMDisplayServerInstructions[index],\
00162 style = element.style,\
00163 x = (instruction == SetStyleLeftTop || instruction == SetStyleLeftBottom) ? "left" : "right",\
00164 y = (instruction == SetStyleLeftTop || instruction == SetStyleRightTop) ? "top" : "bottom";\
00165 CPDOMDisplayServerInstructions[index++] = nil;\
00166 var transform = CPDOMDisplayServerInstructions[index++];\
00167 if (transform)\
00168 {\
00169 var point = _CGPointMake(CPDOMDisplayServerInstructions[index++], CPDOMDisplayServerInstructions[index++]),\
00170 transformed = _CGPointApplyAffineTransform(point, transform);\
00171 style[x] = ROUND(transformed.x) + "px";\
00172 style[y] = ROUND(transformed.y) + "px";\
00173 }\
00174 else\
00175 {\
00176 style[x] = ROUND(CPDOMDisplayServerInstructions[index++]) + "px";\
00177 style[y] = ROUND(CPDOMDisplayServerInstructions[index++]) + "px";\
00178 }\
00179 element.CPDOMDisplayContext[SetStyleOrigin] = -1;\
00180 break;\
00181 case SetStyleSize: var element = CPDOMDisplayServerInstructions[index],\
00182 style = element.style;\
00183 CPDOMDisplayServerInstructions[index++] = nil;\
00184 element.CPDOMDisplayContext[SetStyleSize] = -1;\
00185 style.width = MAX(0.0, ROUND(CPDOMDisplayServerInstructions[index++])) + "px";\
00186 style.height = MAX(0.0, ROUND(CPDOMDisplayServerInstructions[index++])) + "px";\
00187 break;\
00188 case SetSize: var element = CPDOMDisplayServerInstructions[index];\
00189 CPDOMDisplayServerInstructions[index++] = nil;\
00190 element.CPDOMDisplayContext[SetSize] = -1;\
00191 element.width = MAX(0.0, ROUND(CPDOMDisplayServerInstructions[index++]));\
00192 element.height = MAX(0.0, ROUND(CPDOMDisplayServerInstructions[index++]));\
00193 break;\
00194 case AppendChild: CPDOMDisplayServerInstructions[index].appendChild(CPDOMDisplayServerInstructions[index + 1]);\
00195 CPDOMDisplayServerInstructions[index++] = nil;\
00196 CPDOMDisplayServerInstructions[index++] = nil;\
00197 break;\
00198 case InsertBefore: CPDOMDisplayServerInstructions[index].insertBefore(CPDOMDisplayServerInstructions[index + 1], CPDOMDisplayServerInstructions[index + 2]);\
00199 CPDOMDisplayServerInstructions[index++] = nil;\
00200 CPDOMDisplayServerInstructions[index++] = nil;\
00201 CPDOMDisplayServerInstructions[index++] = nil;\
00202 break;\
00203 case RemoveChild: CPDOMDisplayServerInstructions[index].removeChild(CPDOMDisplayServerInstructions[index + 1]);\
00204 CPDOMDisplayServerInstructions[index++] = nil;\
00205 CPDOMDisplayServerInstructions[index++] = nil;\
00206 break;\
00207 }\
00208 }\
00209 catch(e) { CPLog("e " + e + " " + instruction); }\
00210 }\
00211 CPDOMDisplayServerInstructionCount = 0;
00212 #endif