return __veDebugEnabled;
}
+#ifdef UI_ANIM_DEBUG
+
static int oldDepth = 0;
void
_VeDebug::DumpVisualElementLayout(_VisualElementImpl* pElement, FILE* pFile)
}
void
-_VeDebug::DumpVisualElement(_VisualElementImpl* pElement, const char* func, int line, const char* fmt, ...)
+_VeDebug::DumpEvasObjectForGraphI(FILE* pFile, Evas_Object* pEvasObject, int depth, int pos)
{
- static int count = 0;
- int len = 0;
- int depth = 0;
- int nativeVisible = -1;
- _VisualElementImpl* pDepth = null;
- _VisualElementImpl* pModel = null;
- _VisualElementImpl* pPresentation = null;
- char logPlaceMessage[LOG_LEN_MAX] = { 0, };
- char logMessage[LOG_LEN_MAX] = {0, };
- char logSpaces[LOG_LEN_MAX] = { 0, };
- va_list args;
-
- if (!pElement)
+ if (!pEvasObject)
{
return;
}
- depth = -1;
- pDepth = pElement;
- while (pDepth)
- {
- depth++;
- pDepth = pDepth->__pParent;
- }
-
- if (pElement->GetModel() == pElement) // presenter
- {
- pModel = pElement->GetModel();
- pPresentation = pElement->GetPresentation();
- }
- else
- {
- pModel = null;
- pPresentation = pElement;
- }
+ Tizen::Base::String typeName(evas_object_type_get(pEvasObject));
- if (pPresentation && pPresentation->__pSharedData->pNativeNode)
- {
- VisualElementSurface* pSurface = dynamic_cast< VisualElementSurface* >(pPresentation->__pSharedData->pNativeNode->GetSurface());
- if (pSurface && _VisualElementSurfaceImpl::GetInstance(*pSurface))
- {
- nativeVisible = evas_object_visible_get(reinterpret_cast< Evas_Object* >(_VisualElementSurfaceImpl::GetInstance(*pSurface)->GetNativeHandle()));
- }
- }
+ int objX = 0;
+ int objY = 0;
+ int objW = 0;
+ int objH = 0;
+ evas_object_geometry_get(pEvasObject, &objX, &objY, &objW, &objH);
- if (func)
- {
- snprintf(logPlaceMessage, sizeof(logPlaceMessage), "(%s:%4d)", func, line);
- }
+ Evas_Object* pClipper = evas_object_clip_get(pEvasObject);
+ const Evas_Map* pMap = evas_object_map_get(pEvasObject);
+ Evas_Render_Op renderOp = evas_object_render_op_get(pEvasObject);
- snprintf(logSpaces, sizeof(logSpaces), "%*s", depth * 3, " ");
+ int r = 0;
+ int g = 0;
+ int b = 0;
+ int a = 0;
+ evas_object_color_get(pEvasObject, &r, &g, &b, &a);
- Tizen::Base::String name = pElement->GetSharedData().name;
+ int visible = evas_object_visible_get(pEvasObject);
-#ifndef VE_SIMULATOR
- Tizen::Ui::_Control* pControl = null;
- Tizen::Ui::_ControlImpl* pCtrlImpl = null;
+ Tizen::Base::String output;
+ Tizen::Base::String label;
+ Tizen::Base::String common;
+ Tizen::Base::String type;
+ Tizen::Base::String order;
+ Tizen::Base::String clipper;
+ Tizen::Base::String map;
+ Tizen::Base::String bounds;
+ Tizen::Base::String showState;
+ Tizen::Base::String rop;
+ Tizen::Base::String color;
+ Tizen::Base::String imageSize;
+ Tizen::Base::String imageFill;
+ Tizen::Base::String imageSource;
- pControl = dynamic_cast< Tizen::Ui::_Control* >(static_cast< Tizen::Ui::_Control* >(pElement->GetUserData()));
- if (pControl)
- {
- pCtrlImpl = dynamic_cast< Tizen::Ui::_ControlImpl* >(static_cast< Tizen::Ui::_ControlImpl* >(pControl->GetUserData()));
- if (pCtrlImpl)
- {
- name = name + L", " + pCtrlImpl->GetPublicClassName();
- }
- Tizen::Ui::Controls::_Label* pLabel = null;
- Tizen::Ui::Controls::_Edit* pEdit = null;
- Tizen::Ui::Controls::_Button* pButton = null;
- Tizen::Ui::Controls::_Popup* pPopup = null;
- Tizen::Ui::Controls::Form* pForm = null;
- Tizen::Ui::Controls::Header* pHeader = null;
- Tizen::Ui::_Window* pWindow = null;
+ type.Format(256, L"<TD>type</TD> <TD>%ls</TD>", typeName.GetPointer());
+ order.Format(256, L"<TD>order</TD> <TD>%d-%d</TD>", depth, pos);
+ clipper.Format(256, L"<TD>clipper</TD> <TD PORT=\"clipper\">%x</TD>", pClipper);
+ map.Format(256, L"<TD>map</TD> <TD>%ls</TD>", (pMap ? L"used" : L"unused"));
+ bounds.Format(256, L"<TD>bounds</TD> <TD>%d : %d ~ %d : %d</TD>", objX, objY, objX + objW, objY + objH);
+ showState.Format(256, L"<TD>showState</TD> <TD>%ls</TD>", (visible ? L"show" : L"hidden"));
+ rop.Format(256, L"<TD>rop</TD> <TD>%d</TD>", renderOp);
+ color.Format(256, L"<TD>color</TD> <TD>0x%08x</TD>", (a << 24) | (r << 16) | (g << 8) | b);
- pLabel = dynamic_cast< Tizen::Ui::Controls::_Label* >(pControl);
- if (pLabel)
- {
- name = name + L", '" + pLabel->GetText() + L"'";
- }
- pEdit = dynamic_cast< Tizen::Ui::Controls::_Edit* >(pControl);
- if (pEdit)
- {
- name = name + L", '" + pEdit->GetText() + L"'";
- }
+ if (typeName == "image")
+ {
+ int iw = 0;
+ int ih = 0;
+ evas_object_image_size_get(pEvasObject, &iw, &ih);
+ int fillX = 0;
+ int fillY = 0;
+ int fillW = 0;
+ int fillH = 0;
+ evas_object_image_fill_get(pEvasObject, &fillX, &fillY, &fillW, &fillH);
+ Evas_Object* pSource = evas_object_image_source_get(pEvasObject);
- pButton = dynamic_cast< Tizen::Ui::Controls::_Button* >(pControl);
- if (pButton)
- {
- name = name + L", '" + pButton->GetText() + L"'";
- }
+ imageSize.Format(256, L"<TD>imageSize</TD> <TD>%d:%d</TD>", iw, ih);
+ imageFill.Format(256, L"<TD>fill</TD> <TD>%d : %d ~ %d : %d</TD>", fillX, fillY, fillX + fillW, fillY + fillH);
+ imageSource.Format(256, L"<TD PORT=\"proxy\">source</TD> <TD>N%lx</TD>", pSource);
- pPopup = dynamic_cast< Tizen::Ui::Controls::_Popup* >(pControl);
- if (pPopup)
+ if (pSource)
{
- name = name + L", '" + pPopup->GetTitleText() + L"'";
+ DumpEvasObjectForGraphI(pFile, pSource, depth, pos);
+ fprintf(pFile, "N%lx:proxy -> N%lx [style=dashed, label=source];\n", (unsigned long)pEvasObject, (unsigned long)pSource);
}
+ }
- pWindow = dynamic_cast< Tizen::Ui::_Window* >(pControl);
- if (pWindow)
- {
- name = name + L", '_Window'";
- }
- pForm = dynamic_cast< Tizen::Ui::Controls::Form* >(pControl);
- if (pForm)
- {
- name = name + L", '" + pForm->GetTitleText() + L"'";
- }
+ label = L"<TR>" + type + L"</TR>";
+ label += L"<TR>" + order + L"</TR>";
+ label += L"<TR>" + clipper + L"</TR>";
+ label += L"<TR>" + map + L"</TR>";
+ label += L"<TR>" + bounds + L"</TR>";
+ label += L"<TR>" + showState + L"</TR>";
+ label += L"<TR>" + rop + L"</TR>";
+ label += L"<TR>" + color + L"</TR>";
- pHeader = dynamic_cast< Tizen::Ui::Controls::Header* >(pControl);
- if (pHeader)
- {
- name = name + L", '" + pHeader->GetTitleText() + L"'";
- }
+ if (!imageSize.IsEmpty())
+ {
+ label += L"<TR>" + imageSize + L"</TR>";
}
-#endif
+ if (!imageFill.IsEmpty())
+ {
+ label += L"<TR>" + imageFill + L"</TR>";
+ }
-#define TERMCOLOR_FMT //"%c[%d;%d;%dm"
+ if (!imageSource.IsEmpty())
+ {
+ label += L"<TR>" + imageSource + L"</TR>";
+ }
- len = snprintf(logMessage, sizeof(logMessage),
- TERMCOLOR_FMT "\n%4d = %2d%s:" TERMCOLOR_FMT "\n%s - [VE(%ls): 0x%08lx->0x%08lx]%s\n%s - [show:%s, %s, %d] [op=%.1f, %.1f, %.1f, %.1f] [%s] [0x%x, "
- "0x%x, 0x%x %s=%p]\n%s - bounds=" VELOGRECTTAG " invRect=" VELOGRECTTAG " vRect=" VELOGRECTTAG,
- /*0x1B, 1, 31, 10,*/
- count, depth,
- (pElement != pElement->__pModel ? "P" : " "),
- /*0x1B, 0, 0, 10,*/
- logSpaces,
- name.GetPointer(), //(pElement->__pSharedData ? pElement->__pSharedData->name.GetPointer() : L" "),
- (unsigned long) pModel, (unsigned long) pPresentation,
- logPlaceMessage,
- logSpaces,
- (pElement->GetShowState() ? "show" : "hide"), (pElement->IsVisible() ? " visible" : "invisible"), nativeVisible,
- pElement->__showOpacity, pElement->__opacity, pElement->__contentOpacity, pElement->GetOpacityFromRoot(),
- (pElement->__pSharedData->pSurface ? " sfc" : "nosfc"),
- pElement->__invalidatedProps,
- pElement->__childrenNeedsUpdateProps,
- pElement->__pSharedData->invalidatedNativeProps, (pElement->__isClipChildren ? "CS" : "NOCS"),
- pElement->__pClipSource,
- logSpaces,
- VELOGRECT(pElement->__bounds),
- VELOGRECT(pElement->__pSharedData->invalidatedRegion),
- VELOGRECT(pElement->__visibleRect)
+ output.Format(1024, L"N%lx [ fillcolor=\"#%06x\", style=filled, label=<<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"3\">%ls</TABLE>>];\n",
+ (unsigned long)pEvasObject,
+ 0xFAF0E6,
+ label.GetPointer()
);
-#undef TERMCOLOR_FMT
+ fprintf(pFile, "%ls", output.GetPointer());
- va_start(args, fmt);
- vsnprintf(&logMessage[len], sizeof(logMessage) - len, fmt, args);
- va_end(args);
- //VeLog(NID_UI_ANIM, "%s", logMessage);
+ if (pClipper)
+ {
+ fprintf(pFile, "N%lx:clipper -> N%lx [style=\"dotted\", label=clipper]; \n",
+ (unsigned long)pEvasObject,
+ (unsigned long)pClipper
+ );
+ }
+}
+
+void
+_VeDebug::DumpEvasTreeGraphI(FILE* pFile, Evas_Object* pObject, int depth, int pos)
+{
+ if (!pObject)
+ {
+ return;
+ }
+ bool prevDebugEnabled = IsDebugEnabled();
+ SetDebugEnabled(true);
- if (pElement == pPresentation && pElement->__pSharedData->pNativeNode)
+ DumpEvasObjectForGraphI(pFile, pObject, depth, pos);
+
+ pos = 0;
+ void* pChild = null;
+ Eina_List* pList = evas_object_smart_members_get(pObject);
+ EINA_LIST_FREE(pList, pChild)
{
- _EflNode* pNativeNode = dynamic_cast< _EflNode* >(pPresentation->__pSharedData->pNativeNode);
- if (pNativeNode)
+ if (pChild)
{
- Evas_Object* pEvasObject = null;
+ DumpEvasTreeGraphI(pFile, (Evas_Object*)pChild, depth + 1, pos++);
+ fprintf(pFile, "N%lx -> N%lx [style=\"solid,bold\"] \n", (unsigned long)pChild, (unsigned long)pObject);
+ }
+ }
- if (pNativeNode->GetSurface() && _VisualElementSurfaceImpl::GetInstance(*pNativeNode->GetSurface()))
- {
- pEvasObject = reinterpret_cast< Evas_Object* >(_VisualElementSurfaceImpl::GetInstance(*pNativeNode->GetSurface())->GetNativeHandle());
- }
- else
- {
- pEvasObject = pNativeNode->__pRectangleObject;
- }
+ SetDebugEnabled(prevDebugEnabled);
+}
- if (pEvasObject)
- {
- int iw = 0;
- int ih = 0;
- int ox = 0;
- int oy = 0;
- int ow = 0;
- int oh = 0;
- int fx = 0;
- int fy = 0;
- int fw = 0;
- int fh = 0;
- int red = 0;
- int green = 0;
- int blue = 0;
- int alpha = 0;
- int argb = 0;
- const char* eoType = evas_object_type_get(pEvasObject);
+void
+_VeDebug::DumpVeObjectForGraphI(FILE* pFile, _VisualElementImpl* pVisualElementImpl, int depth, int pos)
+{
+ if (!pVisualElementImpl)
+ {
+ return;
+ }
- if (!pElement->GetName().IsEmpty())
- {
- ByteBuffer* pByteBuffer(Tizen::Base::Utility::StringUtil::StringToUtf8N(pElement->GetName()));
- evas_object_name_set(pEvasObject, (const char*)pByteBuffer->GetPointer());
- delete pByteBuffer;
- }
+ bool isModel = (pVisualElementImpl == pVisualElementImpl->__pModel);
+ bool isPresentation = (pVisualElementImpl == pVisualElementImpl->__pPresentation);
+ Tizen::Base::String output;
+ Tizen::Base::String label;
+ Tizen::Base::String model;
+ Tizen::Base::String name;
+ Tizen::Base::String order;
+ Tizen::Base::String clip;
+ Tizen::Base::String transformed;
+ Tizen::Base::String show;
+ Tizen::Base::String visible;
+ Tizen::Base::String ror;
+ Tizen::Base::String opacity;
+ Tizen::Base::String showOpacity;
+ Tizen::Base::String opacityFromRoot;
+ Tizen::Base::String bounds;
+ Tizen::Base::String invBounds;
+ Tizen::Base::String rop;
+ const Tizen::Graphics::FloatRectangle& boundsRect = pVisualElementImpl->__bounds;
+ const Tizen::Graphics::FloatRectangle& invBoundsRect = pVisualElementImpl->GetSharedData().invalidatedRegion;
- if (!strcmp(eoType, "image"))
- {
- if (evas_object_image_source_get(pEvasObject))
- {
- evas_object_image_size_get(evas_object_image_source_get(pEvasObject), &iw, &ih);
- }
- else
- {
- evas_object_image_size_get(pEvasObject, &iw, &ih);
- }
- evas_object_image_fill_get(pEvasObject, &fx, &fy, &fw, &fh);
- }
+ model.Format(256, L"<TD>type</TD> <TD>%ls</TD>", (isModel ? L"Model" : isPresentation ? L"Presentation" : L"<unknown>"));
+ name.Format(256, L"<TD>name</TD> <TD>%ls</TD>", pVisualElementImpl->GetSharedData().name.GetPointer());
+ order.Format(256, L"<TD>order</TD> <TD>%d-%d</TD>", depth, pos);
+ clip.Format(256, L"<TD>clip</TD> <TD>%ls</TD>", (pVisualElementImpl->__isClipChildren ? L"CS" : L"NO-CS"));
+ transformed.Format(256, L"<TD>xform</TD> <TD>%ls</TD>", (pVisualElementImpl->__needTransform ? L"NO-AA" : L"AA"));
+ show.Format(256, L"<TD>showState</TD> <TD>%ls</TD>", (pVisualElementImpl->GetShowState() ? L"show" : L"hidden"));
+ visible.Format(256, L"<TD>visibility</TD> <TD>%ls</TD>", (pVisualElementImpl->IsVisible() ? L"visible" : L"invisible"));
+ ror.Format(256, L"<TD>redrawOnResize</TD> <TD>%ls</TD>", (pVisualElementImpl->GetRedrawOnResizeEnabled() ? L"ROR" : L"NO-ROR"));
+ opacity.Format(256, L"<TD>opacity</TD> <TD>%3.1f</TD>", pVisualElementImpl->GetOpacity());
+ showOpacity.Format(256, L"<TD>showOpacity</TD> <TD>%3.1f</TD>", pVisualElementImpl->__showOpacity);
+ opacityFromRoot.Format(256, L"<TD>visOpacity</TD> <TD>%3.1f</TD>", pVisualElementImpl->GetOpacityFromRoot());
+ bounds.Format(256, L"<TD>bounds</TD> <TD>%.2f : %.2f ~ %.2f : %.2f</TD>", boundsRect.x, boundsRect.y, boundsRect.x + boundsRect.width, boundsRect.y + boundsRect.height);
+ invBounds.Format(256, L"<TD>invBounds</TD> <TD>%.2f : %.2f ~ %.2f : %.2f</TD>", invBoundsRect.x, invBoundsRect.y, invBoundsRect.x + invBoundsRect.width, invBoundsRect.y + invBoundsRect.height);
+ rop.Format(256, L"<TD>rop</TD> <TD>%d</TD>", pVisualElementImpl->__renderOperation);
- evas_object_geometry_get(pEvasObject, &ox, &oy, &ow, &oh);
- evas_object_color_get(pEvasObject, &red, &green, &blue, &alpha);
- argb = (((alpha << 24) & 0xff000000) | ((red << 16) & 0x00ff0000) | ((green << 8) & 0x0000ff00) | (blue & 0x000000ff));
- bool showState = evas_object_visible_get(pEvasObject);
- len = strlen(logMessage);
- snprintf(&logMessage[len], sizeof(logMessage) - len, "%s - type=%s[%p] bounds=[%d:%d ~ %d:%d] fill=[%d:%d ~ %d:%d] imgsize=[%d:%d] show=%s color=%08X",
- logSpaces, evas_object_type_get(pEvasObject), pEvasObject, ox, oy, ox + ow, oy + oh, fx, fy, fx + fw, fy + fh, iw, ih, (showState ? "visible" : "invisible"), argb);
+ long color = (isModel ? 0xF0FFF0 : isPresentation ? 0xE6E6FA : 0x708090);
- //VeLog(NID_UI_ANIM, "%s", logMessage);
- }
- }
- }
+ label = L"<TR>" + model + L"</TR>";
+ label += L"<TR>" + name + L"</TR>";
+ label += L"<TR>" + order + L"</TR>";
+ label += L"<TR>" + clip + L"</TR>";
+ label += L"<TR>" + transformed + L"</TR>";
+ label += L"<TR>" + show + L"</TR>";
+ label += L"<TR>" + visible + L"</TR>";
+ label += L"<TR>" + ror + L"</TR>";
+ label += L"<TR>" + opacity + L"</TR>";
+ label += L"<TR>" + showOpacity + L"</TR>";
+ label += L"<TR>" + opacityFromRoot + L"</TR>";
+ label += L"<TR>" + bounds + L"</TR>";
+ label += L"<TR>" + invBounds + L"</TR>";
+ label += L"<TR>" + rop + L"</TR>";
- VeLog(NID_UI_ANIM, "%s", logMessage);
+ output.Format(1024, L"N%lx [ fillcolor=\"#%06x\", style=filled, label=<<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"3\">%ls</TABLE>>];\n",
+ (unsigned long)pVisualElementImpl->GetPublic(),
+ color,
+ label.GetPointer()
+ );
- count++;
+ fprintf(pFile, "%ls", output.GetPointer());
+
+
+ if (isPresentation)
+ {
+ _EflNode* pEflNode = static_cast< _EflNode* >(pVisualElementImpl->GetSharedData().pNativeNode);
+ Evas_Object* pEvasObject = reinterpret_cast< Evas_Object* >(pEflNode->GetGroupContainer());
+
+ fprintf(pFile, "N%lx -> N%lx [dir=none, style=\"dotted\", label=native]; \n",
+ (unsigned long)pVisualElementImpl->GetPublic(),
+ (unsigned long)pEvasObject
+ );
+
+ if (pVisualElementImpl->__pModel && pVisualElementImpl->__pModel->GetPublic() &&
+ pVisualElementImpl->__pPresentation && pVisualElementImpl->__pPresentation->GetPublic())
+ {
+ fprintf(pFile, "N%lx -> N%lx [style=\"dotted\"]; \n",
+ (unsigned long)pVisualElementImpl->__pModel->GetPublic(),
+ (unsigned long)pVisualElementImpl->__pPresentation->GetPublic()
+ );
+ }
+ }
}
void
-_VeDebug::DumpVeTree(_VisualElementImpl* pElement, int indent)
+_VeDebug::DumpVeTreeGraphI(FILE* pFile, _VisualElementImpl* pVisualElementImpl, int depth, int pos)
{
- if (!pElement)
+ if (!pVisualElementImpl)
{
- _DisplayManager* pDisplayManager = _DisplayManager::GetInstance();
- if (pDisplayManager != null && pDisplayManager->GetRoot(0))
- {
- pElement = _VisualElementImpl::GetInstance(*pDisplayManager->GetRoot(0));
- }
+ return;
}
bool prevDebugEnabled = IsDebugEnabled();
SetDebugEnabled(true);
- if (pElement)
- {
- if (indent == 0)
- {
- VeLog(NID_UI_ANIM, "--------------------------[VE DUMP START]---------------------------");
- }
-
- VELOGEX_NOFUNCTION(pElement, "");
- VELOGEX_NOFUNCTION(pElement->__pPresentation, "\n");
-
- int count = pElement->__children.GetCount();
- for (int i = 0; i < count; i++)
- {
- _VeDebug::DumpVeTree(pElement->__children.GetChildAt(i), indent + 3);
- }
+ DumpVeObjectForGraphI(pFile, pVisualElementImpl, depth, pos);
- if (indent == 0)
- {
- VeLog(NID_UI_ANIM, "--------------------------[VE DUMP END]-----------------------------");
-#if 0
- extern int sfc_memory_usage;
- VeLog(NID_UI_ANIM, "--------------------------[IMAGE SIZE=%d KB]-----------------------------", sfc_memory_usage / 1024);
-#endif
- }
+ for (int i = 0; i < pVisualElementImpl->__children.GetCount(); i++)
+ {
+ _VisualElementImpl* pChild = pVisualElementImpl->__children.GetChildAt(i);
+ DumpVeTreeGraphI(pFile, pChild, depth + 1, i);
+ fprintf(pFile, "N%lx -> N%lx [style=\"solid,bold\"] \n",
+ (unsigned long)pChild->GetPublic(),
+ (unsigned long)pVisualElementImpl->GetPublic()
+ );
}
SetDebugEnabled(prevDebugEnabled);
-
- return;
}
-
void
-_VeDebug::DumpEvasTree(_VisualElementImpl* pElement, int indent)
+_VeDebug::DumpEvasTreeGraph(const char* pFilePath, VisualElement* pVisualElement)
{
- if (!pElement)
+ _VisualElementImpl* pElement = null;
+
+ if (!pVisualElement)
{
_DisplayManager* pDisplayManager = _DisplayManager::GetInstance();
if (pDisplayManager != null && pDisplayManager->GetRoot(0))
pElement = _VisualElementImpl::GetInstance(*pDisplayManager->GetRoot(0));
}
}
+ else
+ {
+ pElement = _VisualElementImpl::GetInstance(*pVisualElement);
+ }
+
+ if (!pElement)
+ {
+ return;
+ }
+
+ FILE* pFile = fopen(pFilePath, "wt");
+ if (!pFile)
+ {
+ return;
+ }
+
+ fprintf(pFile, "digraph VisualElementDump {\n");
+ fprintf(pFile, "node [shape=plaintext, fontsize=10.0];\n");
+ fprintf(pFile, "edge [fontsize=10.0];\n");
+ //fprintf(pFile, "rankdir = TB;\n");
+ fprintf(pFile, "rankdir = BT;\n");
+ fprintf(pFile, "\n");
+
bool prevDebugEnabled = IsDebugEnabled();
SetDebugEnabled(true);
- if (pElement)
- {
- if (indent == 0)
- {
- VeLog(NID_UI_ANIM, "--------------------------[EVAS DUMP START]---------------------------");
- }
- //VELOGEX_NOFUNCTION(pElement, "");
- //VELOGEX_NOFUNCTION(pElement->__pPresentation, "\n");
+ _EflNode* pEflNode = static_cast< _EflNode* >(pElement->GetSharedData().pNativeNode);
+ Evas_Object* pEvasObject = reinterpret_cast< Evas_Object* >(pEflNode->GetGroupContainer());
- DumpEvasTreeI((Evas_Object*)((_EflNode*)pElement->__pSharedData->pNativeNode)->GetGroupContainer(), indent);
+ fprintf(pFile, "subgraph cluster_evas {\n");
+ fprintf(pFile, "clusterrank = local;\n");
+ fprintf(pFile, "fontsize = 30.0;\n");
+ fprintf(pFile, "label = \"Evas Object\";\n");
+ DumpEvasTreeGraphI(pFile, pEvasObject, 0, 0);
+ fprintf(pFile, "}\n");
- if (indent == 0)
- {
- VeLog(NID_UI_ANIM, "--------------------------[EVAS DUMP END]-----------------------------");
- }
- }
+ fprintf(pFile, "subgraph cluster_model {\n");
+ fprintf(pFile, "clusterrank = local;\n");
+ fprintf(pFile, "fontsize = 30.0;\n");
+ fprintf(pFile, "label = \"Model\";\n");
+ DumpVeTreeGraphI(pFile, pElement->__pModel, 0, 0);
+ fprintf(pFile, "}\n");
+
+ fprintf(pFile, "subgraph cluster_presentation {\n");
+ fprintf(pFile, "clusterrank = local;\n");
+ fprintf(pFile, "fontsize = 30.0;\n");
+ fprintf(pFile, "label = \"Presentation\";\n");
+ DumpVeTreeGraphI(pFile, pElement->__pPresentation, 0, 0);
+ fprintf(pFile, "}\n");
+
+ fprintf(pFile, "\n");
SetDebugEnabled(prevDebugEnabled);
- return;
-}
+ fprintf(pFile, "}\n\n");
+ fclose(pFile);
+}
+#endif
void
-_VeDebug::DumpEvasTreeI(Evas_Object* pParent, int indent)
+_VeDebug::DumpVisualElement(_VisualElementImpl* pElement, const char* func, int line, const char* fmt, ...)
{
- if (!pParent)
- {
- return;
- }
-
- bool prevDebugEnabled = IsDebugEnabled();
- SetDebugEnabled(true);
-
- char logMessage1[LOG_LEN_MAX] = { 0, };
- char logMessage2[LOG_LEN_MAX] = { 0, };
+ static int count = 0;
+ int len = 0;
+ int depth = 0;
+ int nativeVisible = -1;
+ _VisualElementImpl* pDepth = null;
+ _VisualElementImpl* pModel = null;
+ _VisualElementImpl* pPresentation = null;
+ char logPlaceMessage[LOG_LEN_MAX] = { 0, };
+ char logMessage[LOG_LEN_MAX] = {0, };
char logSpaces[LOG_LEN_MAX] = { 0, };
+ va_list args;
- int iw = 0;
- int ih = 0;
- int mox = 0;
- int moy = 0;
- int mow = 0;
- int moh = 0;
- int sox = 0;
- int soy = 0;
- int sow = 0;
- int soh = 0;
- int mfx = 0;
- int mfy = 0;
- int mfw = 0;
- int mfh = 0;
- int sfx = 0;
- int sfy = 0;
- int sfw = 0;
- int sfh = 0;
- int red = 0;
- int green = 0;
- int blue = 0;
- int alpha = 0;
- int argb = 0;
- int renderOperation = 0;
- bool mshowState = false;
- bool sshowState = false;
- void* pBuffer = null;
- Tizen::Base::String type(evas_object_type_get(pParent));
- evas_object_geometry_get(pParent, &mox, &moy, &mow, &moh);
+ if (!pElement)
+ {
+ return;
+ }
- // color & show state
- renderOperation = evas_object_render_op_get(pParent);
- evas_object_color_get(pParent, &red, &green, &blue, &alpha);
- argb = (((alpha << 24) & 0xff000000) | ((red << 16) & 0x00ff0000) | ((green << 8) & 0x0000ff00) | (blue & 0x000000ff));
- mshowState = evas_object_visible_get(pParent);
+ depth = -1;
+ pDepth = pElement;
+ while (pDepth)
+ {
+ depth++;
+ pDepth = pDepth->__pParent;
+ }
- if (type != "visual_element")// && argb != 0)
+ if (pElement->GetModel() == pElement) // presenter
{
- bool clip = evas_object_clip_get(pParent) ? true : false;
- char source = ' ';
+ pModel = pElement->GetModel();
+ pPresentation = pElement->GetPresentation();
+ }
+ else
+ {
+ pModel = null;
+ pPresentation = pElement;
+ }
- snprintf(logSpaces, sizeof(logSpaces), "%*s", indent, " ");
- if (type == "image")
+ if (pPresentation && pPresentation->__pSharedData->pNativeNode)
+ {
+ VisualElementSurface* pSurface = dynamic_cast< VisualElementSurface* >(pPresentation->__pSharedData->pNativeNode->GetSurface());
+ if (pSurface && _VisualElementSurfaceImpl::GetInstance(*pSurface))
{
- source = 'P';
+ nativeVisible = evas_object_visible_get(reinterpret_cast< Evas_Object* >(_VisualElementSurfaceImpl::GetInstance(*pSurface)->GetNativeHandle()));
}
+ }
- if (evas_object_clipees_get(pParent))
- {
- type = "cliper";
- }
+ if (func)
+ {
+ snprintf(logPlaceMessage, sizeof(logPlaceMessage), "(%s:%4d)", func, line);
+ }
- snprintf(logMessage1, sizeof(logMessage1),
- "%s[%#x][%c] : %ls(%s) fill(%d,%d,%d,%d) bounds(%d,%d,%d,%d) argb(0x%08x) %s clip=%s show=%s",
- logSpaces, (unsigned int)pParent, source, type.GetPointer(), evas_object_name_get(pParent), mfx, mfy, mfw, mfh, mox, moy, mow, moh,
- (unsigned int)argb, (renderOperation ? "COPY" : "BLEND"), (clip ? "true" : "false"), (mshowState ? "true" : "false")
- );
+ snprintf(logSpaces, sizeof(logSpaces), "%*s", depth * 3, " ");
- VeLog(NID_UI_ANIM, "%s", logMessage1);
+ Tizen::Base::String name = pElement->GetSharedData().name;
- if (type == "image")
- {
- source = 'S';
- evas_object_image_fill_get(pParent, &mfx, &mfy, &mfw, &mfh);
+#ifndef VE_SIMULATOR
+ Tizen::Ui::_Control* pControl = null;
+ Tizen::Ui::_ControlImpl* pCtrlImpl = null;
- // image
- Evas_Object* pSource = evas_object_image_source_get(pParent);
- pSource = pSource ? pSource : pParent;
+ pControl = dynamic_cast< Tizen::Ui::_Control* >(static_cast< Tizen::Ui::_Control* >(pElement->GetUserData()));
+ if (pControl)
+ {
+ pCtrlImpl = dynamic_cast< Tizen::Ui::_ControlImpl* >(static_cast< Tizen::Ui::_ControlImpl* >(pControl->GetUserData()));
+ if (pCtrlImpl)
+ {
+ name = name + L", " + pCtrlImpl->GetPublicClassName();
+ }
- evas_object_image_size_get(pSource, &iw, &ih);
- pBuffer = (void*)evas_object_image_data_get(pSource, EINA_FALSE);
- evas_object_geometry_get(pSource, &sox, &soy, &sow, &soh);
- evas_object_image_fill_get(pSource, &sfx, &sfy, &sfw, &sfh);
- sshowState = evas_object_visible_get(pSource);
+ Tizen::Ui::Controls::_Label* pLabel = null;
+ Tizen::Ui::Controls::_Edit* pEdit = null;
+ Tizen::Ui::Controls::_Button* pButton = null;
+ Tizen::Ui::Controls::_Popup* pPopup = null;
+ Tizen::Ui::Controls::Form* pForm = null;
+ Tizen::Ui::Controls::Header* pHeader = null;
+ Tizen::Ui::_Window* pWindow = null;
- snprintf(logMessage2, sizeof(logMessage2),
- "%s[%#x][%c] : %ls(%s:%#x %d,%d) fill(%d,%d,%d,%d) bounds(%d,%d,%d,%d) argb(0x%08x) %s show=%s",
- logSpaces, (unsigned int)pSource, source, type.GetPointer(), evas_object_name_get(pParent), (unsigned int)pBuffer, iw, ih, sfx, sfy, sfw, sfh, sox, soy, sow, soh,
- (unsigned int)argb, (renderOperation ? "COPY" : "BLEND"), (sshowState ? "true" : "false")
- );
+ pLabel = dynamic_cast< Tizen::Ui::Controls::_Label* >(pControl);
+ if (pLabel)
+ {
+ name = name + L", '" + pLabel->GetText() + L"'";
+ }
- VeLog(NID_UI_ANIM, "%s", logMessage2);
+ pEdit = dynamic_cast< Tizen::Ui::Controls::_Edit* >(pControl);
+ if (pEdit)
+ {
+ name = name + L", '" + pEdit->GetText() + L"'";
}
- }
+ pButton = dynamic_cast< Tizen::Ui::Controls::_Button* >(pControl);
+ if (pButton)
+ {
+ name = name + L", '" + pButton->GetText() + L"'";
+ }
- void* pObject = null;
- Eina_List* pList = evas_object_smart_members_get(pParent);
- EINA_LIST_FREE(pList, pObject)
- {
- if (pObject)
+ pPopup = dynamic_cast< Tizen::Ui::Controls::_Popup* >(pControl);
+ if (pPopup)
{
- DumpEvasTreeI((Evas_Object*)pObject, indent+2);
+ name = name + L", '" + pPopup->GetTitleText() + L"'";
}
- }
- SetDebugEnabled(prevDebugEnabled);
+ pWindow = dynamic_cast< Tizen::Ui::_Window* >(pControl);
+ if (pWindow)
+ {
+ name = name + L", '_Window'";
+ }
- return;
-}
+ pForm = dynamic_cast< Tizen::Ui::Controls::Form* >(pControl);
+ if (pForm)
+ {
+ name = name + L", '" + pForm->GetTitleText() + L"'";
+ }
-void
-_VeDebug::DumpEvasObjectForGraphI(FILE* pFile, Evas_Object* pEvasObject, int depth, int pos)
-{
- if (!pEvasObject)
- {
- return;
+ pHeader = dynamic_cast< Tizen::Ui::Controls::Header* >(pControl);
+ if (pHeader)
+ {
+ name = name + L", '" + pHeader->GetTitleText() + L"'";
+ }
}
+#endif
- Tizen::Base::String typeName(evas_object_type_get(pEvasObject));
-
- int objX = 0;
- int objY = 0;
- int objW = 0;
- int objH = 0;
- evas_object_geometry_get(pEvasObject, &objX, &objY, &objW, &objH);
-
- Evas_Object* pClipper = evas_object_clip_get(pEvasObject);
- const Evas_Map* pMap = evas_object_map_get(pEvasObject);
- Evas_Render_Op renderOp = evas_object_render_op_get(pEvasObject);
- int r = 0;
- int g = 0;
- int b = 0;
- int a = 0;
- evas_object_color_get(pEvasObject, &r, &g, &b, &a);
+#define TERMCOLOR_FMT //"%c[%d;%d;%dm"
- int visible = evas_object_visible_get(pEvasObject);
+ len = snprintf(logMessage, sizeof(logMessage),
+ TERMCOLOR_FMT "\n%4d = %2d%s:" TERMCOLOR_FMT "\n%s - [VE(%ls): 0x%08lx->0x%08lx]%s\n%s - [show:%s, %s, %d] [op=%.1f, %.1f, %.1f, %.1f] [%s] [0x%x, "
+ "0x%x, 0x%x %s=%p]\n%s - bounds=" VELOGRECTTAG " invRect=" VELOGRECTTAG " vRect=" VELOGRECTTAG,
+ /*0x1B, 1, 31, 10,*/
+ count, depth,
+ (pElement != pElement->__pModel ? "P" : " "),
+ /*0x1B, 0, 0, 10,*/
+ logSpaces,
+ name.GetPointer(), //(pElement->__pSharedData ? pElement->__pSharedData->name.GetPointer() : L" "),
+ (unsigned long) pModel, (unsigned long) pPresentation,
+ logPlaceMessage,
+ logSpaces,
+ (pElement->GetShowState() ? "show" : "hide"), (pElement->IsVisible() ? " visible" : "invisible"), nativeVisible,
+ pElement->__showOpacity, pElement->__opacity, pElement->__contentOpacity, pElement->GetOpacityFromRoot(),
+ (pElement->__pSharedData->pSurface ? " sfc" : "nosfc"),
+ pElement->__invalidatedProps,
+ pElement->__childrenNeedsUpdateProps,
+ pElement->__pSharedData->invalidatedNativeProps, (pElement->__isClipChildren ? "CS" : "NOCS"),
+ pElement->__pClipSource,
+ logSpaces,
+ VELOGRECT(pElement->__bounds),
+ VELOGRECT(pElement->__pSharedData->invalidatedRegion),
+ VELOGRECT(pElement->__visibleRect)
+ );
- Tizen::Base::String output;
- Tizen::Base::String label;
- Tizen::Base::String common;
- Tizen::Base::String type;
- Tizen::Base::String order;
- Tizen::Base::String clipper;
- Tizen::Base::String map;
- Tizen::Base::String bounds;
- Tizen::Base::String showState;
- Tizen::Base::String rop;
- Tizen::Base::String color;
- Tizen::Base::String imageSize;
- Tizen::Base::String imageFill;
- Tizen::Base::String imageSource;
+#undef TERMCOLOR_FMT
+ va_start(args, fmt);
+ vsnprintf(&logMessage[len], sizeof(logMessage) - len, fmt, args);
+ va_end(args);
- type.Format(256, L"<TD>type</TD> <TD>%ls</TD>", typeName.GetPointer());
- order.Format(256, L"<TD>order</TD> <TD>%d-%d</TD>", depth, pos);
- clipper.Format(256, L"<TD>clipper</TD> <TD PORT=\"clipper\">%x</TD>", pClipper);
- map.Format(256, L"<TD>map</TD> <TD>%ls</TD>", (pMap ? L"used" : L"unused"));
- bounds.Format(256, L"<TD>bounds</TD> <TD>%d : %d ~ %d : %d</TD>", objX, objY, objX + objW, objY + objH);
- showState.Format(256, L"<TD>showState</TD> <TD>%ls</TD>", (visible ? L"show" : L"hidden"));
- rop.Format(256, L"<TD>rop</TD> <TD>%d</TD>", renderOp);
- color.Format(256, L"<TD>color</TD> <TD>0x%08x</TD>", (a << 24) | (r << 16) | (g << 8) | b);
+ //VeLog(NID_UI_ANIM, "%s", logMessage);
- if (typeName == "image")
+ if (pElement == pPresentation && pElement->__pSharedData->pNativeNode)
{
- int iw = 0;
- int ih = 0;
- evas_object_image_size_get(pEvasObject, &iw, &ih);
- int fillX = 0;
- int fillY = 0;
- int fillW = 0;
- int fillH = 0;
- evas_object_image_fill_get(pEvasObject, &fillX, &fillY, &fillW, &fillH);
- Evas_Object* pSource = evas_object_image_source_get(pEvasObject);
-
- imageSize.Format(256, L"<TD>imageSize</TD> <TD>%d:%d</TD>", iw, ih);
- imageFill.Format(256, L"<TD>fill</TD> <TD>%d : %d ~ %d : %d</TD>", fillX, fillY, fillX + fillW, fillY + fillH);
- imageSource.Format(256, L"<TD PORT=\"proxy\">source</TD> <TD>N%lx</TD>", pSource);
-
- if (pSource)
+ _EflNode* pNativeNode = dynamic_cast< _EflNode* >(pPresentation->__pSharedData->pNativeNode);
+ if (pNativeNode)
{
- DumpEvasObjectForGraphI(pFile, pSource, depth, pos);
- fprintf(pFile, "N%lx:proxy -> N%lx [style=dashed, label=source];\n", (unsigned long)pEvasObject, (unsigned long)pSource);
- }
- }
-
+ Evas_Object* pEvasObject = null;
- label = L"<TR>" + type + L"</TR>";
- label += L"<TR>" + order + L"</TR>";
- label += L"<TR>" + clipper + L"</TR>";
- label += L"<TR>" + map + L"</TR>";
- label += L"<TR>" + bounds + L"</TR>";
- label += L"<TR>" + showState + L"</TR>";
- label += L"<TR>" + rop + L"</TR>";
- label += L"<TR>" + color + L"</TR>";
+ if (pNativeNode->GetSurface() && _VisualElementSurfaceImpl::GetInstance(*pNativeNode->GetSurface()))
+ {
+ pEvasObject = reinterpret_cast< Evas_Object* >(_VisualElementSurfaceImpl::GetInstance(*pNativeNode->GetSurface())->GetNativeHandle());
+ }
+ else
+ {
+ pEvasObject = pNativeNode->__pRectangleObject;
+ }
- if (!imageSize.IsEmpty())
- {
- label += L"<TR>" + imageSize + L"</TR>";
- }
+ if (pEvasObject)
+ {
+ int iw = 0;
+ int ih = 0;
+ int ox = 0;
+ int oy = 0;
+ int ow = 0;
+ int oh = 0;
+ int fx = 0;
+ int fy = 0;
+ int fw = 0;
+ int fh = 0;
+ int red = 0;
+ int green = 0;
+ int blue = 0;
+ int alpha = 0;
+ int argb = 0;
+ const char* eoType = evas_object_type_get(pEvasObject);
- if (!imageFill.IsEmpty())
- {
- label += L"<TR>" + imageFill + L"</TR>";
- }
+ if (!pElement->GetName().IsEmpty())
+ {
+ ByteBuffer* pByteBuffer(Tizen::Base::Utility::StringUtil::StringToUtf8N(pElement->GetName()));
+ evas_object_name_set(pEvasObject, (const char*)pByteBuffer->GetPointer());
+ delete pByteBuffer;
+ }
- if (!imageSource.IsEmpty())
- {
- label += L"<TR>" + imageSource + L"</TR>";
- }
- output.Format(1024, L"N%lx [ fillcolor=\"#%06x\", style=filled, label=<<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"3\">%ls</TABLE>>];\n",
- (unsigned long)pEvasObject,
- 0xFAF0E6,
- label.GetPointer()
- );
+ if (!strcmp(eoType, "image"))
+ {
+ if (evas_object_image_source_get(pEvasObject))
+ {
+ evas_object_image_size_get(evas_object_image_source_get(pEvasObject), &iw, &ih);
+ }
+ else
+ {
+ evas_object_image_size_get(pEvasObject, &iw, &ih);
+ }
+ evas_object_image_fill_get(pEvasObject, &fx, &fy, &fw, &fh);
+ }
- fprintf(pFile, "%ls", output.GetPointer());
+ evas_object_geometry_get(pEvasObject, &ox, &oy, &ow, &oh);
+ evas_object_color_get(pEvasObject, &red, &green, &blue, &alpha);
+ argb = (((alpha << 24) & 0xff000000) | ((red << 16) & 0x00ff0000) | ((green << 8) & 0x0000ff00) | (blue & 0x000000ff));
+ bool showState = evas_object_visible_get(pEvasObject);
+ len = strlen(logMessage);
+ snprintf(&logMessage[len], sizeof(logMessage) - len, "%s - type=%s[%p] bounds=[%d:%d ~ %d:%d] fill=[%d:%d ~ %d:%d] imgsize=[%d:%d] show=%s color=%08X",
+ logSpaces, evas_object_type_get(pEvasObject), pEvasObject, ox, oy, ox + ow, oy + oh, fx, fy, fx + fw, fy + fh, iw, ih, (showState ? "visible" : "invisible"), argb);
- if (pClipper)
- {
- fprintf(pFile, "N%lx:clipper -> N%lx [style=\"dotted\", label=clipper]; \n",
- (unsigned long)pEvasObject,
- (unsigned long)pClipper
- );
+ //VeLog(NID_UI_ANIM, "%s", logMessage);
+ }
+ }
}
+
+ VeLog(NID_UI_ANIM, "%s", logMessage);
+
+ count++;
}
void
-_VeDebug::DumpEvasTreeGraphI(FILE* pFile, Evas_Object* pObject, int depth, int pos)
+_VeDebug::DumpVeTree(_VisualElementImpl* pElement, int indent)
{
- if (!pObject)
+ if (!pElement)
{
- return;
+ _DisplayManager* pDisplayManager = _DisplayManager::GetInstance();
+ if (pDisplayManager != null && pDisplayManager->GetRoot(0))
+ {
+ pElement = _VisualElementImpl::GetInstance(*pDisplayManager->GetRoot(0));
+ }
}
bool prevDebugEnabled = IsDebugEnabled();
SetDebugEnabled(true);
- DumpEvasObjectForGraphI(pFile, pObject, depth, pos);
-
- pos = 0;
- void* pChild = null;
- Eina_List* pList = evas_object_smart_members_get(pObject);
- EINA_LIST_FREE(pList, pChild)
+ if (pElement)
{
- if (pChild)
+ if (indent == 0)
{
- DumpEvasTreeGraphI(pFile, (Evas_Object*)pChild, depth + 1, pos++);
- fprintf(pFile, "N%lx -> N%lx [style=\"solid,bold\"] \n", (unsigned long)pChild, (unsigned long)pObject);
+ VeLog(NID_UI_ANIM, "--------------------------[VE DUMP START]---------------------------");
+ }
+
+ VELOGEX_NOFUNCTION(pElement, "");
+ VELOGEX_NOFUNCTION(pElement->__pPresentation, "\n");
+
+ int count = pElement->__children.GetCount();
+ for (int i = 0; i < count; i++)
+ {
+ _VeDebug::DumpVeTree(pElement->__children.GetChildAt(i), indent + 3);
+ }
+
+ if (indent == 0)
+ {
+ VeLog(NID_UI_ANIM, "--------------------------[VE DUMP END]-----------------------------");
+#if 0
+ extern int sfc_memory_usage;
+ VeLog(NID_UI_ANIM, "--------------------------[IMAGE SIZE=%d KB]-----------------------------", sfc_memory_usage / 1024);
+#endif
}
}
SetDebugEnabled(prevDebugEnabled);
+
+ return;
}
+
void
-_VeDebug::DumpVeObjectForGraphI(FILE* pFile, _VisualElementImpl* pVisualElementImpl, int depth, int pos)
+_VeDebug::DumpEvasTree(_VisualElementImpl* pElement, int indent)
{
- if (!pVisualElementImpl)
+ if (!pElement)
{
- return;
+ _DisplayManager* pDisplayManager = _DisplayManager::GetInstance();
+ if (pDisplayManager != null && pDisplayManager->GetRoot(0))
+ {
+ pElement = _VisualElementImpl::GetInstance(*pDisplayManager->GetRoot(0));
+ }
}
- bool isModel = (pVisualElementImpl == pVisualElementImpl->__pModel);
- bool isPresentation = (pVisualElementImpl == pVisualElementImpl->__pPresentation);
-
- Tizen::Base::String output;
- Tizen::Base::String label;
- Tizen::Base::String model;
- Tizen::Base::String name;
- Tizen::Base::String order;
- Tizen::Base::String clip;
- Tizen::Base::String transformed;
- Tizen::Base::String show;
- Tizen::Base::String visible;
- Tizen::Base::String ror;
- Tizen::Base::String opacity;
- Tizen::Base::String showOpacity;
- Tizen::Base::String opacityFromRoot;
- Tizen::Base::String bounds;
- Tizen::Base::String invBounds;
- Tizen::Base::String rop;
- const Tizen::Graphics::FloatRectangle& boundsRect = pVisualElementImpl->__bounds;
- const Tizen::Graphics::FloatRectangle& invBoundsRect = pVisualElementImpl->GetSharedData().invalidatedRegion;
-
- model.Format(256, L"<TD>type</TD> <TD>%ls</TD>", (isModel ? L"Model" : isPresentation ? L"Presentation" : L"<unknown>"));
- name.Format(256, L"<TD>name</TD> <TD>%ls</TD>", pVisualElementImpl->GetSharedData().name.GetPointer());
- order.Format(256, L"<TD>order</TD> <TD>%d-%d</TD>", depth, pos);
- clip.Format(256, L"<TD>clip</TD> <TD>%ls</TD>", (pVisualElementImpl->__isClipChildren ? L"CS" : L"NO-CS"));
- transformed.Format(256, L"<TD>xform</TD> <TD>%ls</TD>", (pVisualElementImpl->__needTransform ? L"NO-AA" : L"AA"));
- show.Format(256, L"<TD>showState</TD> <TD>%ls</TD>", (pVisualElementImpl->GetShowState() ? L"show" : L"hidden"));
- visible.Format(256, L"<TD>visibility</TD> <TD>%ls</TD>", (pVisualElementImpl->IsVisible() ? L"visible" : L"invisible"));
- ror.Format(256, L"<TD>redrawOnResize</TD> <TD>%ls</TD>", (pVisualElementImpl->GetRedrawOnResizeEnabled() ? L"ROR" : L"NO-ROR"));
- opacity.Format(256, L"<TD>opacity</TD> <TD>%3.1f</TD>", pVisualElementImpl->GetOpacity());
- showOpacity.Format(256, L"<TD>showOpacity</TD> <TD>%3.1f</TD>", pVisualElementImpl->__showOpacity);
- opacityFromRoot.Format(256, L"<TD>visOpacity</TD> <TD>%3.1f</TD>", pVisualElementImpl->GetOpacityFromRoot());
- bounds.Format(256, L"<TD>bounds</TD> <TD>%.2f : %.2f ~ %.2f : %.2f</TD>", boundsRect.x, boundsRect.y, boundsRect.x + boundsRect.width, boundsRect.y + boundsRect.height);
- invBounds.Format(256, L"<TD>invBounds</TD> <TD>%.2f : %.2f ~ %.2f : %.2f</TD>", invBoundsRect.x, invBoundsRect.y, invBoundsRect.x + invBoundsRect.width, invBoundsRect.y + invBoundsRect.height);
- rop.Format(256, L"<TD>rop</TD> <TD>%d</TD>", pVisualElementImpl->__renderOperation);
-
-
- long color = (isModel ? 0xF0FFF0 : isPresentation ? 0xE6E6FA : 0x708090);
-
- label = L"<TR>" + model + L"</TR>";
- label += L"<TR>" + name + L"</TR>";
- label += L"<TR>" + order + L"</TR>";
- label += L"<TR>" + clip + L"</TR>";
- label += L"<TR>" + transformed + L"</TR>";
- label += L"<TR>" + show + L"</TR>";
- label += L"<TR>" + visible + L"</TR>";
- label += L"<TR>" + ror + L"</TR>";
- label += L"<TR>" + opacity + L"</TR>";
- label += L"<TR>" + showOpacity + L"</TR>";
- label += L"<TR>" + opacityFromRoot + L"</TR>";
- label += L"<TR>" + bounds + L"</TR>";
- label += L"<TR>" + invBounds + L"</TR>";
- label += L"<TR>" + rop + L"</TR>";
-
- output.Format(1024, L"N%lx [ fillcolor=\"#%06x\", style=filled, label=<<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"3\">%ls</TABLE>>];\n",
- (unsigned long)pVisualElementImpl->GetPublic(),
- color,
- label.GetPointer()
- );
-
- fprintf(pFile, "%ls", output.GetPointer());
-
+ bool prevDebugEnabled = IsDebugEnabled();
+ SetDebugEnabled(true);
- if (isPresentation)
+ if (pElement)
{
- _EflNode* pEflNode = static_cast< _EflNode* >(pVisualElementImpl->GetSharedData().pNativeNode);
- Evas_Object* pEvasObject = reinterpret_cast< Evas_Object* >(pEflNode->GetGroupContainer());
+ if (indent == 0)
+ {
+ VeLog(NID_UI_ANIM, "--------------------------[EVAS DUMP START]---------------------------");
+ }
- fprintf(pFile, "N%lx -> N%lx [dir=none, style=\"dotted\", label=native]; \n",
- (unsigned long)pVisualElementImpl->GetPublic(),
- (unsigned long)pEvasObject
- );
+ //VELOGEX_NOFUNCTION(pElement, "");
+ //VELOGEX_NOFUNCTION(pElement->__pPresentation, "\n");
- if (pVisualElementImpl->__pModel && pVisualElementImpl->__pModel->GetPublic() &&
- pVisualElementImpl->__pPresentation && pVisualElementImpl->__pPresentation->GetPublic())
+ DumpEvasTreeI((Evas_Object*)((_EflNode*)pElement->__pSharedData->pNativeNode)->GetGroupContainer(), indent);
+
+ if (indent == 0)
{
- fprintf(pFile, "N%lx -> N%lx [style=\"dotted\"]; \n",
- (unsigned long)pVisualElementImpl->__pModel->GetPublic(),
- (unsigned long)pVisualElementImpl->__pPresentation->GetPublic()
- );
+ VeLog(NID_UI_ANIM, "--------------------------[EVAS DUMP END]-----------------------------");
}
}
+
+ SetDebugEnabled(prevDebugEnabled);
+
+ return;
}
+
void
-_VeDebug::DumpVeTreeGraphI(FILE* pFile, _VisualElementImpl* pVisualElementImpl, int depth, int pos)
+_VeDebug::DumpEvasTreeI(Evas_Object* pParent, int indent)
{
- if (!pVisualElementImpl)
+ if (!pParent)
{
return;
}
bool prevDebugEnabled = IsDebugEnabled();
SetDebugEnabled(true);
- DumpVeObjectForGraphI(pFile, pVisualElementImpl, depth, pos);
-
- for (int i = 0; i < pVisualElementImpl->__children.GetCount(); i++)
- {
- _VisualElementImpl* pChild = pVisualElementImpl->__children.GetChildAt(i);
- DumpVeTreeGraphI(pFile, pChild, depth + 1, i);
- fprintf(pFile, "N%lx -> N%lx [style=\"solid,bold\"] \n",
- (unsigned long)pChild->GetPublic(),
- (unsigned long)pVisualElementImpl->GetPublic()
- );
- }
+ char logMessage1[LOG_LEN_MAX] = { 0, };
+ char logMessage2[LOG_LEN_MAX] = { 0, };
+ char logSpaces[LOG_LEN_MAX] = { 0, };
- SetDebugEnabled(prevDebugEnabled);
-}
+ int iw = 0;
+ int ih = 0;
+ int mox = 0;
+ int moy = 0;
+ int mow = 0;
+ int moh = 0;
+ int sox = 0;
+ int soy = 0;
+ int sow = 0;
+ int soh = 0;
+ int mfx = 0;
+ int mfy = 0;
+ int mfw = 0;
+ int mfh = 0;
+ int sfx = 0;
+ int sfy = 0;
+ int sfw = 0;
+ int sfh = 0;
+ int red = 0;
+ int green = 0;
+ int blue = 0;
+ int alpha = 0;
+ int argb = 0;
+ int renderOperation = 0;
+ bool mshowState = false;
+ bool sshowState = false;
+ void* pBuffer = null;
+ Tizen::Base::String type(evas_object_type_get(pParent));
+ evas_object_geometry_get(pParent, &mox, &moy, &mow, &moh);
-void
-_VeDebug::DumpEvasTreeGraph(const char* pFilePath, VisualElement* pVisualElement)
-{
- _VisualElementImpl* pElement = null;
+ // color & show state
+ renderOperation = evas_object_render_op_get(pParent);
+ evas_object_color_get(pParent, &red, &green, &blue, &alpha);
+ argb = (((alpha << 24) & 0xff000000) | ((red << 16) & 0x00ff0000) | ((green << 8) & 0x0000ff00) | (blue & 0x000000ff));
+ mshowState = evas_object_visible_get(pParent);
- if (!pVisualElement)
+ if (type != "visual_element")// && argb != 0)
{
- _DisplayManager* pDisplayManager = _DisplayManager::GetInstance();
- if (pDisplayManager != null && pDisplayManager->GetRoot(0))
+ bool clip = evas_object_clip_get(pParent) ? true : false;
+ char source = ' ';
+
+ snprintf(logSpaces, sizeof(logSpaces), "%*s", indent, " ");
+ if (type == "image")
{
- pElement = _VisualElementImpl::GetInstance(*pDisplayManager->GetRoot(0));
+ source = 'P';
}
- }
- else
- {
- pElement = _VisualElementImpl::GetInstance(*pVisualElement);
- }
-
- if (!pElement)
- {
- return;
- }
-
- FILE* pFile = fopen(pFilePath, "wt");
- if (!pFile)
- {
- return;
- }
- fprintf(pFile, "digraph VisualElementDump {\n");
- fprintf(pFile, "node [shape=plaintext, fontsize=10.0];\n");
- fprintf(pFile, "edge [fontsize=10.0];\n");
- //fprintf(pFile, "rankdir = TB;\n");
- fprintf(pFile, "rankdir = BT;\n");
- fprintf(pFile, "\n");
+ if (evas_object_clipees_get(pParent))
+ {
+ type = "cliper";
+ }
+ snprintf(logMessage1, sizeof(logMessage1),
+ "%s[%#x][%c] : %ls(%s) fill(%d,%d,%d,%d) bounds(%d,%d,%d,%d) argb(0x%08x) %s clip=%s show=%s",
+ logSpaces, (unsigned int)pParent, source, type.GetPointer(), evas_object_name_get(pParent), mfx, mfy, mfw, mfh, mox, moy, mow, moh,
+ (unsigned int)argb, (renderOperation ? "COPY" : "BLEND"), (clip ? "true" : "false"), (mshowState ? "true" : "false")
+ );
- bool prevDebugEnabled = IsDebugEnabled();
- SetDebugEnabled(true);
+ VeLog(NID_UI_ANIM, "%s", logMessage1);
+ if (type == "image")
+ {
+ source = 'S';
+ evas_object_image_fill_get(pParent, &mfx, &mfy, &mfw, &mfh);
- _EflNode* pEflNode = static_cast< _EflNode* >(pElement->GetSharedData().pNativeNode);
- Evas_Object* pEvasObject = reinterpret_cast< Evas_Object* >(pEflNode->GetGroupContainer());
+ // image
+ Evas_Object* pSource = evas_object_image_source_get(pParent);
+ pSource = pSource ? pSource : pParent;
- fprintf(pFile, "subgraph cluster_evas {\n");
- fprintf(pFile, "clusterrank = local;\n");
- fprintf(pFile, "fontsize = 30.0;\n");
- fprintf(pFile, "label = \"Evas Object\";\n");
- DumpEvasTreeGraphI(pFile, pEvasObject, 0, 0);
- fprintf(pFile, "}\n");
+ evas_object_image_size_get(pSource, &iw, &ih);
+ pBuffer = (void*)evas_object_image_data_get(pSource, EINA_FALSE);
+ evas_object_geometry_get(pSource, &sox, &soy, &sow, &soh);
+ evas_object_image_fill_get(pSource, &sfx, &sfy, &sfw, &sfh);
+ sshowState = evas_object_visible_get(pSource);
- fprintf(pFile, "subgraph cluster_model {\n");
- fprintf(pFile, "clusterrank = local;\n");
- fprintf(pFile, "fontsize = 30.0;\n");
- fprintf(pFile, "label = \"Model\";\n");
- DumpVeTreeGraphI(pFile, pElement->__pModel, 0, 0);
- fprintf(pFile, "}\n");
+ snprintf(logMessage2, sizeof(logMessage2),
+ "%s[%#x][%c] : %ls(%s:%#x %d,%d) fill(%d,%d,%d,%d) bounds(%d,%d,%d,%d) argb(0x%08x) %s show=%s",
+ logSpaces, (unsigned int)pSource, source, type.GetPointer(), evas_object_name_get(pParent), (unsigned int)pBuffer, iw, ih, sfx, sfy, sfw, sfh, sox, soy, sow, soh,
+ (unsigned int)argb, (renderOperation ? "COPY" : "BLEND"), (sshowState ? "true" : "false")
+ );
- fprintf(pFile, "subgraph cluster_presentation {\n");
- fprintf(pFile, "clusterrank = local;\n");
- fprintf(pFile, "fontsize = 30.0;\n");
- fprintf(pFile, "label = \"Presentation\";\n");
- DumpVeTreeGraphI(pFile, pElement->__pPresentation, 0, 0);
- fprintf(pFile, "}\n");
+ VeLog(NID_UI_ANIM, "%s", logMessage2);
+ }
+ }
- fprintf(pFile, "\n");
- SetDebugEnabled(prevDebugEnabled);
+ void* pObject = null;
+ Eina_List* pList = evas_object_smart_members_get(pParent);
+ EINA_LIST_FREE(pList, pObject)
+ {
+ if (pObject)
+ {
+ DumpEvasTreeI((Evas_Object*)pObject, indent+2);
+ }
+ }
- fprintf(pFile, "}\n\n");
+ SetDebugEnabled(prevDebugEnabled);
- fclose(pFile);
+ return;
}
void
extern "C" _OSP_EXPORT_ void
-DumpVeLayout(void)
-{
- Tizen::Ui::Animations::_DisplayManager* pDisplayManager = Tizen::Ui::Animations::_DisplayManager::GetInstance();
-
- int ret = system("rm -rf /tmp/layout");
- ret = system("mkdir /tmp/layout");
- if (ret)
- {
- return;
- }
-
- FILE* pFile = fopen("/tmp/layout/layout.html", "w");
- fprintf(pFile, "<body>\n");
- fprintf(pFile, "<div id=\"information_container\" style=\"position:absolute; width:100%%; z-index:0;\"><div id=\"information\" style=\"font-size:9pt; margin:auto; width:350px; z-index:0;\"></div></div>\n");
- fprintf(pFile, "<div style='position:absolute; left:0px; top:0px;'>Model\n");
- fprintf(pFile, "<div style='position:absolute; left:0px; top:30px;'>\n");
- // Model
- for (int i = 0; i < pDisplayManager->GetRootCount(); i++)
- {
- Tizen::Ui::Animations::_VisualElementImpl* pVisualElementImpl = Tizen::Ui::Animations::_VisualElementImpl::GetInstance(*pDisplayManager->GetRoot(i));
- if (pVisualElementImpl)
- {
- Tizen::Ui::Animations::_VeDebug::DumpVeLayout(pVisualElementImpl, 0, pFile);
- }
- }
- fprintf(pFile, "</div></div>\n");
- fprintf(pFile, "<div style='position:absolute; left:62%%; top:0px;'>Presentation\n");
- fprintf(pFile, "<div style='position:absolute; left:0px; top:30px;'>\n");
-
- // Presentation
- for (int i = 0; i < pDisplayManager->GetRootCount(); i++)
- {
- Tizen::Ui::Animations::_VisualElementImpl* pVisualElementImpl = const_cast<Tizen::Ui::Animations::_VisualElementImpl*>(Tizen::Ui::Animations::_VisualElementImpl::GetInstance(*pDisplayManager->GetRoot(i)->AcquirePresentationInstance()));
- if (pVisualElementImpl)
- {
- Tizen::Ui::Animations::_VeDebug::DumpVeLayout(pVisualElementImpl, 0, pFile);
- }
- pDisplayManager->GetRoot(i)->ReleasePresentationInstance();
- }
- fprintf(pFile, "</div></div>\n");
-
- fprintf(pFile, "<script>\n");
- fprintf(pFile, "var divs = document.getElementsByTagName('div');\n");
- fprintf(pFile, "var oldColor;\n\n");
-
- fprintf(pFile, "for(var i = 0; i < divs.length; i++) {\n");
- fprintf(pFile, " if (divs[i].id != \"information_container\" && divs[i].id != \"information\")");
- fprintf(pFile, " {");
- fprintf(pFile, " divs[i].addEventListener('mouseover', highlightThis, false);\n");
- fprintf(pFile, " divs[i].addEventListener('mouseout', restoreThis, false);\n");
- fprintf(pFile, " divs[i].addEventListener('click', informThis, false);\n");
- fprintf(pFile, " divs[i].addEventListener('dblclick', removeThis, false);\n");
- fprintf(pFile, " }");
- fprintf(pFile, "}\n\n");
-
- fprintf(pFile, "function highlightThis(event) {\n");
- fprintf(pFile, " oldColor = this.style.backgroundColor;\n");
- fprintf(pFile, " this.style.backgroundColor='yellow';\n");
- fprintf(pFile, " event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;\n");
- fprintf(pFile, "}\n\n");
-
- fprintf(pFile, "function restoreThis(event) {\n");
- fprintf(pFile, " this.style.backgroundColor = oldColor;\n");
- fprintf(pFile, " event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;\n");
- fprintf(pFile, "}\n\n");
-
- fprintf(pFile, "function informThis(event) {\n");
- fprintf(pFile, " information.innerHTML += getInfo(this);\n");
- fprintf(pFile, " event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;\n");
- fprintf(pFile, "}\n\n");
-
- fprintf(pFile, "function removeThis(event) {\n");
- fprintf(pFile, " if (confirm(\"hide this layer?\")) this.style.display='none';\n");
- fprintf(pFile, " event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;\n");
- fprintf(pFile, "}\n\n");
-
- fprintf(pFile, "function getInfo(o) {\n");
- fprintf(pFile, " var str = o.title;\n");
- fprintf(pFile, " if (document.getElementById(o.id + \"_info\"))\n");
- fprintf(pFile, " return \"\";\n");
- fprintf(pFile, " if (str.substring(0, 2) != \">>\") {\n");
- fprintf(pFile, " var regexp = /(0x[a-z0-9]+$)/img;\n");
- fprintf(pFile, " str = str.replace(regexp, \"<span style='color:#ff0000' onclick=\\\"javascript:document.getElementById('$1').style.backgroundColor=oldColor; information.innerHTML += getInfo(document.getElementById('$1'))\\\" onmouseover=\\\"javascript:oldColor=document.getElementById('$1').style.backgroundColor; document.getElementById('$1').style.backgroundColor='#ff0000'\\\" onmouseout=\\\"javascript:document.getElementById('$1').style.backgroundColor=oldColor\\\">$1</span>\");\n");
- fprintf(pFile, " str = str.replace(/([^>\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)/g, '$1<br>$2');\n");
- fprintf(pFile, " var contents = o.style.backgroundImage ? \"<img src=\" + o.style.backgroundImage.substring(4, o.style.backgroundImage.length-1) + \" style='max-width:100%%;max-height:100%%'><br>\" : \"<div style=\\\"width:100;height:30;border:1px dotted #999999; background-color:\" + oldColor + \"; opacity:\" + o.style.opacity + \"\\\"> </div >\";\n");
- fprintf(pFile, " str = \"<span style='font-size:9pt; color:#ff0000;' onclick=\\\"javascript:var o=getElementById('\" + o.id + \"_info');o.style.display=='block' ? o.style.display='none' : o.style.display='block'\\\">>> Show / Hide</span><div id=\" + o.id + \"_info style='display:block'>\" + contents + str + \"</div><br>\";\n");
- fprintf(pFile, " }\n");
- fprintf(pFile, " return str;\n");
- fprintf(pFile, "}\n");
- fprintf(pFile, "</script>\n");
- fprintf(pFile, "</body>\n");
- fclose(pFile);
-}
-
-extern "C" _OSP_EXPORT_ void
DumpVeTree(void)
{
Tizen::Ui::Animations::_DisplayManager* pDisplayManager = Tizen::Ui::Animations::_DisplayManager::GetInstance();
}
}
+#ifdef UI_ANIM_DEBUG
+extern "C" _OSP_EXPORT_ void
+DumpVeLayout(void)
+{
+ Tizen::Ui::Animations::_DisplayManager* pDisplayManager = Tizen::Ui::Animations::_DisplayManager::GetInstance();
+
+ int ret = system("rm -rf /tmp/layout");
+ ret = system("mkdir /tmp/layout");
+ if (ret)
+ {
+ return;
+ }
+
+ FILE* pFile = fopen("/tmp/layout/layout.html", "w");
+ fprintf(pFile, "<body>\n");
+ fprintf(pFile, "<div id=\"information_container\" style=\"position:absolute; width:100%%; z-index:0;\"><div id=\"information\" style=\"font-size:9pt; margin:auto; width:350px; z-index:0;\"></div></div>\n");
+ fprintf(pFile, "<div style='position:absolute; left:0px; top:0px;'>Model\n");
+ fprintf(pFile, "<div style='position:absolute; left:0px; top:30px;'>\n");
+ // Model
+ for (int i = 0; i < pDisplayManager->GetRootCount(); i++)
+ {
+ Tizen::Ui::Animations::_VisualElementImpl* pVisualElementImpl = Tizen::Ui::Animations::_VisualElementImpl::GetInstance(*pDisplayManager->GetRoot(i));
+ if (pVisualElementImpl)
+ {
+ Tizen::Ui::Animations::_VeDebug::DumpVeLayout(pVisualElementImpl, 0, pFile);
+ }
+ }
+ fprintf(pFile, "</div></div>\n");
+ fprintf(pFile, "<div style='position:absolute; left:62%%; top:0px;'>Presentation\n");
+ fprintf(pFile, "<div style='position:absolute; left:0px; top:30px;'>\n");
+
+ // Presentation
+ for (int i = 0; i < pDisplayManager->GetRootCount(); i++)
+ {
+ Tizen::Ui::Animations::_VisualElementImpl* pVisualElementImpl = const_cast<Tizen::Ui::Animations::_VisualElementImpl*>(Tizen::Ui::Animations::_VisualElementImpl::GetInstance(*pDisplayManager->GetRoot(i)->AcquirePresentationInstance()));
+ if (pVisualElementImpl)
+ {
+ Tizen::Ui::Animations::_VeDebug::DumpVeLayout(pVisualElementImpl, 0, pFile);
+ }
+ pDisplayManager->GetRoot(i)->ReleasePresentationInstance();
+ }
+ fprintf(pFile, "</div></div>\n");
+
+ fprintf(pFile, "<script>\n");
+ fprintf(pFile, "var divs = document.getElementsByTagName('div');\n");
+ fprintf(pFile, "var oldColor;\n\n");
+
+ fprintf(pFile, "for(var i = 0; i < divs.length; i++) {\n");
+ fprintf(pFile, " if (divs[i].id != \"information_container\" && divs[i].id != \"information\")");
+ fprintf(pFile, " {");
+ fprintf(pFile, " divs[i].addEventListener('mouseover', highlightThis, false);\n");
+ fprintf(pFile, " divs[i].addEventListener('mouseout', restoreThis, false);\n");
+ fprintf(pFile, " divs[i].addEventListener('click', informThis, false);\n");
+ fprintf(pFile, " divs[i].addEventListener('dblclick', removeThis, false);\n");
+ fprintf(pFile, " }");
+ fprintf(pFile, "}\n\n");
+
+ fprintf(pFile, "function highlightThis(event) {\n");
+ fprintf(pFile, " oldColor = this.style.backgroundColor;\n");
+ fprintf(pFile, " this.style.backgroundColor='yellow';\n");
+ fprintf(pFile, " event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;\n");
+ fprintf(pFile, "}\n\n");
+
+ fprintf(pFile, "function restoreThis(event) {\n");
+ fprintf(pFile, " this.style.backgroundColor = oldColor;\n");
+ fprintf(pFile, " event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;\n");
+ fprintf(pFile, "}\n\n");
+
+ fprintf(pFile, "function informThis(event) {\n");
+ fprintf(pFile, " information.innerHTML += getInfo(this);\n");
+ fprintf(pFile, " event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;\n");
+ fprintf(pFile, "}\n\n");
+
+ fprintf(pFile, "function removeThis(event) {\n");
+ fprintf(pFile, " if (confirm(\"hide this layer?\")) this.style.display='none';\n");
+ fprintf(pFile, " event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;\n");
+ fprintf(pFile, "}\n\n");
+
+ fprintf(pFile, "function getInfo(o) {\n");
+ fprintf(pFile, " var str = o.title;\n");
+ fprintf(pFile, " if (document.getElementById(o.id + \"_info\"))\n");
+ fprintf(pFile, " return \"\";\n");
+ fprintf(pFile, " if (str.substring(0, 2) != \">>\") {\n");
+ fprintf(pFile, " var regexp = /(0x[a-z0-9]+$)/img;\n");
+ fprintf(pFile, " str = str.replace(regexp, \"<span style='color:#ff0000' onclick=\\\"javascript:document.getElementById('$1').style.backgroundColor=oldColor; information.innerHTML += getInfo(document.getElementById('$1'))\\\" onmouseover=\\\"javascript:oldColor=document.getElementById('$1').style.backgroundColor; document.getElementById('$1').style.backgroundColor='#ff0000'\\\" onmouseout=\\\"javascript:document.getElementById('$1').style.backgroundColor=oldColor\\\">$1</span>\");\n");
+ fprintf(pFile, " str = str.replace(/([^>\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)/g, '$1<br>$2');\n");
+ fprintf(pFile, " var contents = o.style.backgroundImage ? \"<img src=\" + o.style.backgroundImage.substring(4, o.style.backgroundImage.length-1) + \" style='max-width:100%%;max-height:100%%'><br>\" : \"<div style=\\\"width:100;height:30;border:1px dotted #999999; background-color:\" + oldColor + \"; opacity:\" + o.style.opacity + \"\\\"> </div >\";\n");
+ fprintf(pFile, " str = \"<span style='font-size:9pt; color:#ff0000;' onclick=\\\"javascript:var o=getElementById('\" + o.id + \"_info');o.style.display=='block' ? o.style.display='none' : o.style.display='block'\\\">>> Show / Hide</span><div id=\" + o.id + \"_info style='display:block'>\" + contents + str + \"</div><br>\";\n");
+ fprintf(pFile, " }\n");
+ fprintf(pFile, " return str;\n");
+ fprintf(pFile, "}\n");
+ fprintf(pFile, "</script>\n");
+ fprintf(pFile, "</body>\n");
+ fclose(pFile);
+}
+
extern "C" _OSP_EXPORT_ void
DumpEvasTreeGraph(void)
{
Tizen::Ui::Animations::_VeDebug::DumpEvasTreeGraph(filePath, pDisplayManager->GetRoot(i));
}
}
+#endif
#ifdef __i386__
extern "C" _OSP_EXPORT_ void
#define DEGTORAD(d) ((d) * M_PI / 180.0f)
#define RADTODEG(r) ((r) * 180.0f / M_PI)
-#if 0
-void
-DumpQuaternion(const _TransformMatrix3Df& tm)
-{
- float x, y, z, w;
- float halfth;
-
- tm.GetQuaternion(x, y, z, w);
- halfth = acosf(w);
- if (halfth > 1e-5f)
- {
- float sinh = sin(halfth);
- float rx = x / sinh;
- float ry = y / sinh;
- float rz = z / sinh;
- printf("QuatR: x= %f, y= %f, z= %f, w= %f\n", x, y, z, w);
- printf("Quat: rx= %f, ry= %f, rz= %f, theta= %f\n", rx, ry, rz, 2.0f * halfth * 180.0f / M_PI);
- }
-
- tm.GetEulerAngles(x, y, z);
- printf("Euler Rotation: %f, %f, %f\n", x, y, z);
-}
-
-void
-DumpMatrix(const FloatMatrix4& m)
-{
- printf("Matrix: %f %f %f %f\n", m.matrix[0][0], m.matrix[1][0], m.matrix[2][0], m.matrix[3][0]);
- printf(" %f %f %f %f\n", m.matrix[0][1], m.matrix[1][1], m.matrix[2][1], m.matrix[3][1]);
- printf(" %f %f %f %f\n", m.matrix[0][2], m.matrix[1][2], m.matrix[2][2], m.matrix[3][2]);
- printf(" %f %f %f %f\n", m.matrix[0][3], m.matrix[1][3], m.matrix[2][2], m.matrix[3][3]);
-}
-#endif
-
namespace {
FloatMatrix4
bool
_TransformMatrix3Df::SetTransformMatrix(const FloatMatrix4& transformMatrix)
{
- // Check if fast-path is available
-// if (transformMatrix.IsIdentity())
-#if 0
- if (transformMatrix == FloatMatrix4::IDENTITY_MATRIX)
- {
- Clear();
- return true;
- }
-#endif
-
// Normalize the matrix.
-// float mw = transformMatrix.Get(3, 3);
float mw = transformMatrix.matrix[3][3];
-// if (_FloatHardCompare(mw, 0.0f))
if (unlikely(mw == 0.0f))
{
return false;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
- //locmat.Set(i, j, transformMatrix.Get(j, i) / mw);
+ {
locmat.matrix[j][i] = transformMatrix.matrix[i][j] / mw;
+ }
}
// pmat is used to solve for perspective, but it also provides
//
FloatMatrix4 pmat(locmat);
for (int i = 0; i < 3; i++)
-// pmat.Set(i, 3, 0.0f);
+ {
pmat.matrix[3][i] = 0.0f;
+ }
-// pmat.Set(3, 3, 1.0f);
pmat.matrix[3][3] = 1.0f;
FloatMatrix4 pmatInverseTranspose(pmat);
-// if (!pmatInverseTranspose.Invert())
-// return false;
-#if 0
- if (!pmatInverseTranspose.IsInvertible())
- {
- return false;
- }
-#endif
if (pmatInverseTranspose.Invert() != E_SUCCESS)
{
return false;
// First, isolate perspective. This is the messiest.
-// if (!_FloatHardCompare(locmat.Get(0, 3), 0.0f) || !_FloatHardCompare(locmat.Get(1, 3), 0.0f) || !_FloatHardCompare(locmat.Get(2, 3), 0.0f))
if (unlikely(locmat.matrix[3][0] != 0.0f) || unlikely(locmat.matrix[3][1] != 0.0f) || unlikely(locmat.matrix[3][2] != 0.0f))
{
// prhs is the right hand side of the equation.
Vector4Df prhs, psol;
-// prhs.x = locmat.Get(0, 3);
-// prhs.y = locmat.Get(1, 3);
-// prhs.z = locmat.Get(2, 3);
-// prhs.w = locmat.Get(3, 3);
prhs.x = locmat.matrix[3][0];
prhs.y = locmat.matrix[3][1];
prhs.z = locmat.matrix[3][2];
// prhs by the inverse. (This is the easiest way, not necessarily the best.)
// inverse function (and det4x4, above) from the Matrix Inversion gem in the first volume.
//
- //V4MulPointByMatrix(prhs, pmatInverseTranspose, psol);
psol = prhs.Transform(pmatInverseTranspose);
__perspectiveW = psol.w;
// Clear the perspective partition.
-// locmat.Set(0, 3, 0.0f);
-// locmat.Set(1, 3, 0.0f);
-// locmat.Set(2, 3, 0.0f);
-// locmat.Set(3, 3, 1.0f);
locmat.matrix[3][0] = (0.0f);
locmat.matrix[3][1] = (0.0f);
locmat.matrix[3][2] = (0.0f);
}
// Next take care of translation (easy).
-// __translationX = locmat.Get(3, 0);
-// __translationY = locmat.Get(3, 1);
-// __translationZ = locmat.Get(3, 2);
__translationX = locmat.matrix[0][3];
__translationY = locmat.matrix[1][3];
__translationZ = locmat.matrix[2][3];
for (int i = 0; i < 3; i++)
{
-// locmat.Set(3, i, 0.0f);
locmat.matrix[i][3] = 0.0f;
}
Vector3Df row[3];
for (int i = 0; i < 3; i++)
{
-// row[i].x = locmat.Get(i, 0);
-// row[i].y = locmat.Get(i, 1);
-// row[i].z = locmat.Get(i, 2);
row[i].x = locmat.matrix[0][i];
row[i].y = locmat.matrix[1][i];
row[i].z = locmat.matrix[2][i];
__scaleAnchorY = 0.0f;
__scaleAnchorZ = 0.0f;
-#if 0
- //printf("--------- Rotate: %f, %f, %f, %f\n", __quatX, __quatY, __quatZ, __quatW);
- DumpQuaternion(*this);
- DumpMatrix(transformMatrix);
-// printf("--------- Scale: %f, %f, %f\n", __scaleX, __scaleY, __scaleZ);
-// printf("--------- Translate: %f, %f, %f\n", __translationX, __translationY, __translationZ);
- printf("\n\n");
-#endif
-
UpdateMatrixType(true);
return true;
// rotation component
// WARNING:
// It is not needed to update __rotX/Y/Z because the calculating interpolated matrix would not use those values
-#if 0
- FLOAT_INTP(__rotX, currentTransform, fromTransform, toTransform, progress);
- FLOAT_INTP(__rotY, currentTransform, fromTransform, toTransform, progress);
- FLOAT_INTP(__rotZ, currentTransform, fromTransform, toTransform, progress);
- currentTransform.UpdateRotationFromEulerAngles(currentTransform.__rotX, currentTransform.__rotY, currentTransform.__rotZ);
-#else
DoSlerp(¤tTransform.__quatX, &fromTransform.__quatX, &toTransform.__quatX, progress);
-#endif
// WARNING:
// 'GetTransformMatrix' will use matrix type
currentTransform.UpdateMatrixType(true);
+#undef FLOAT_INTP
-#if 0
- printf("----------p: %f\n", progress);
- printf("--------- qf: %f, %f, %f, %f\n", fromTransform.__quatX, fromTransform.__quatY, fromTransform.__quatZ, fromTransform.__quatW);
- printf("--------- qt: %f, %f, %f, %f\n", toTransform.__quatX, toTransform.__quatY, toTransform.__quatZ, toTransform.__quatW);
- printf("--------- q: %f, %f, %f, %f\n", currentTransform.__quatX, currentTransform.__quatY, currentTransform.__quatZ, currentTransform.__quatW);
-
- float rx, ry, rz;
- float halfth = acosf(currentTransform.__quatW);
- if (halfth > 1e-5)
- {
- rx = currentTransform.__quatX / sinf(halfth);
- ry = currentTransform.__quatY / sinf(halfth);
- rz = currentTransform.__quatZ / sinf(halfth);
- printf(" ==> q: %f, %f, %f, %f\n", rx, ry, rz, 2.0f * halfth * 180 / M_PI);
- printf(" ==> q: %f, %f, %f, %f\n", -rx, -ry, -rz, 2.0f * halfth * 180 / M_PI);
- }
-#endif
-
-#if 1
return currentTransform.GetTransformMatrix();
-#else
- printf("--------- q: %f, %f, %f, %f\n", currentTransform.__quatX, currentTransform.__quatY, currentTransform.__quatZ, currentTransform.__quatW);
- FloatMatrix4 cm = currentTransform.GetTransformMatrix();
- DumpMatrix(cm);
- return cm;
-#endif
-
-#undef FLOAT_INTP
}
void
- // apply perspective;
-// m.Set(0, 3, __perspectiveX);
-// m.Set(1, 3, __perspectiveY);
-// m.Set(2, 3, __perspectiveZ);
-// m.Set(3, 3, __perspectiveW);
+ // apply perspective
m.matrix[3][0] = __perspectiveX;
m.matrix[3][1] = __perspectiveY;
m.matrix[3][2] = __perspectiveZ;
// apply translation
-// m.Set(3, 0, __translationX);
-// m.Set(3, 1, __translationY);
-// m.Set(3, 2, __translationZ);
-// m.Set(3, 3, __perspectiveW + (__perspectiveX * __translationX) + (__perspectiveY * __translationY) + (__perspectiveZ * __translationZ));
m.matrix[0][3] = __translationX;
m.matrix[1][3] = __translationY;
m.matrix[2][3] = __translationZ;
float zw = __quatZ * __quatW;
// Construct a composite rotation matrix from the quaternion values
-#if 0
- const float rotM[4][4] = { // WARNING: C++ array is row-major order !
- { 1 - 2 * (yy + zz), 2 * (xy + zw), 2 * (xz - yw), 0 },
- { 2 * (xy - zw), 1 - 2 * (xx + zz), 2 * (yz + xw), 0 },
- { 2 * (xz + yw), 2 * (yz - xw), 1 - 2 * (xx + yy), 0 },
- { 0, 0, 0, 1 }
- };
-#else
const float rotM[4][4] = { // WARNING: C++ array is row-major order !
{ 1 - 2 * (yy + zz), 2 * (xy - zw), 2 * (xz + yw), 0 },
{ 2 * (xy + zw), 1 - 2 * (xx + zz), 2 * (yz - xw), 0 },
{ 2 * (xz - yw), 2 * (yz + xw), 1 - 2 * (xx + yy), 0 },
{ 0, 0, 0, 1 }
};
-#endif
-#if 0
- m = FloatMatrix4(rotM) * m;
-#else
-#if 0
- if (__rotAnchorX != 0.0f || __rotAnchorY != 0.0f || __rotAnchorZ != 0.0f)
- m = GetTranslationMatrix(-__rotAnchorX, -__rotAnchorY, -__rotAnchorZ) * FloatMatrix4(rotM) * GetTranslationMatrix(__rotAnchorX, __rotAnchorY, __rotAnchorZ) * m;
- else
- m = FloatMatrix4(rotM) * m;
-#else
+
if (__rotAnchorX != 0.0f || __rotAnchorY != 0.0f || __rotAnchorZ != 0.0f)
{
const FloatMatrix4& back = GetTranslationMatrix(-__rotAnchorX, -__rotAnchorY, -__rotAnchorZ);
const FloatMatrix4& move = GetTranslationMatrix(__rotAnchorX, __rotAnchorY, __rotAnchorZ);
FloatMatrix4 intm;
- _MatrixUtilMultiply(intm, back, FloatMatrix4(rotM));
- _MatrixUtilMultiply(intm, intm, move);
- _MatrixUtilMultiply(m, intm, m);
+ intm = back * FloatMatrix4(rotM);
+ intm = intm * move;
+ m = intm * m;
}
else
{
- _MatrixUtilMultiply(m, FloatMatrix4(rotM), m);
+ m = FloatMatrix4(rotM) * m;
}
-#endif
-#endif
}
if (__shearYZ)
{
FloatMatrix4 sh;
- //sh.Set(2, 1, __shearYZ);
sh.matrix[1][2] = __shearYZ;
-// m = sh * m;
- _MatrixUtilMultiply(m, sh, m);
+ m = sh * m;
}
if (__shearXZ)
{
FloatMatrix4 sh;
- //sh.Set(2, 0, __shearXZ);
sh.matrix[0][2] = __shearXZ;
-// m = sh * m;
- _MatrixUtilMultiply(m, sh, m);
+ m = sh * m;
}
if (__shearXY)
{
FloatMatrix4 sh;
- //sh.Set(1, 0, __shearXY);
sh.matrix[0][1] = __shearXY;
-// m = sh * m;
- _MatrixUtilMultiply(m, sh, m);
+ m = sh * m;
}
// apply scale
-#if 0
- if (__scaleX != 1.0f)
- {
-// m.Set(0, 0, m.Get(0, 0) * __scaleX);
-// m.Set(0, 1, m.Get(0, 1) * __scaleX);
-// m.Set(0, 2, m.Get(0, 2) * __scaleX);
-// m.Set(0, 3, m.Get(0, 3) * __scaleX);
- m.matrix[0][0] = m.matrix[0][0] * __scaleX;
- m.matrix[1][0] = m.matrix[1][0] * __scaleX;
- m.matrix[2][0] = m.matrix[2][0] * __scaleX;
- m.matrix[3][0] = m.matrix[3][0] * __scaleX;
- }
-
- if (__scaleY != 1.0f)
- {
-// m.Set(1, 0, m.Get(1, 0) * __scaleY);
-// m.Set(1, 1, m.Get(1, 1) * __scaleY);
-// m.Set(1, 2, m.Get(1, 2) * __scaleY);
-// m.Set(1, 3, m.Get(1, 3) * __scaleY);
- m.matrix[0][1] = m.matrix[0][1] * __scaleX;
- m.matrix[1][1] = m.matrix[1][1] * __scaleX;
- m.matrix[2][1] = m.matrix[2][1] * __scaleX;
- m.matrix[3][1] = m.matrix[3][1] * __scaleX;
- }
-
- if (__scaleZ != 1.0f)
- {
-// m.Set(2, 0, m.Get(2, 0) * __scaleZ);
-// m.Set(2, 1, m.Get(2, 1) * __scaleZ);
-// m.Set(2, 2, m.Get(2, 2) * __scaleZ);
-// m.Set(2, 3, m.Get(2, 3) * __scaleZ);
- m.matrix[0][2] = m.matrix[0][2] * __scaleX;
- m.matrix[1][2] = m.matrix[1][2] * __scaleX;
- m.matrix[2][2] = m.matrix[2][2] * __scaleX;
- m.matrix[3][2] = m.matrix[3][2] * __scaleX;
- }
-#else
if (__scaleAnchorX != 0.0f || __scaleAnchorY != 0.0f || __scaleAnchorZ != 0.0f)
{
FloatMatrix4 sc;
_MatrixUtilScale(sc, __scaleX, __scaleY, __scaleZ);
-// m = GetTranslationMatrix(-__scaleAnchorX, -__scaleAnchorY, -__scaleAnchorZ) * sc * GetTranslationMatrix(__scaleAnchorX, __scaleAnchorY, __scaleAnchorZ) * m;
const FloatMatrix4& back = GetTranslationMatrix(-__scaleAnchorX, -__scaleAnchorY, -__scaleAnchorZ);
const FloatMatrix4& move = GetTranslationMatrix(__scaleAnchorX, __scaleAnchorY, __scaleAnchorZ);
FloatMatrix4 intm;
- _MatrixUtilMultiply(intm, back, sc);
- _MatrixUtilMultiply(intm, intm, move);
- _MatrixUtilMultiply(m, intm, m);
+ intm = back * sc;
+ intm = intm * move;
+ m = intm * m;
}
else
{
m.matrix[3][2] = m.matrix[3][2] * __scaleZ;
}
}
-#endif
m.Transpose();
__quatY = zcosh * ysinh * xcosh + zsinh * ycosh * xsinh;
__quatZ = zsinh * ycosh * xcosh - zcosh * ysinh * xsinh;
-#if 0
- printf("--euler:%f,%f,%f(%f, %f, %f)\n",
- x, y, z,
- atan2f(2.0f * (__quatW * __quatX + __quatY * __quatZ), 1.0f - 2.0f * (__quatX * __quatX + __quatY * __quatY)) * 180.0f / M_PI,
- asinf(2.0f * (__quatW * __quatY - __quatZ * __quatX)) * 180.0f / M_PI,
- atan2f(2.0f * (__quatW * __quatZ + __quatX * __quatY), 1.0f - 2.0f * (__quatY * __quatY + __quatZ * __quatZ)) * 180.0f / M_PI
- );
-#endif
-
__rotX = x;
__rotY = y;
__rotZ = z;
__useRotation = (unlikely(!_FloatCompare(__quatX, 0.0f)) || unlikely(!_FloatCompare(__quatY, 0.0f)) || unlikely(!_FloatCompare(__quatZ, 0.0f)) || unlikely(!_FloatCompare(__quatW, 1.0f)));
UpdateMatrixType(false);
-
- //DumpQuaternion(*this);
}
-#if 0
-void
-_TransformMatrix3Df::CalcEulerAngles(void)
-{
- exit(1);
-
- float sx = __quatX * __quatX;
- float sy = __quatY * __quatY;
- float sz = __quatZ * __quatZ;
-
-#if 0
- float sw = __quatW * __quatW;
-
- __rotX = atan2f(2.0f * (__quatY * __quatZ + __quatX * __quatW), (sw - sx - sy + sz));
- __rotY = asinf(-2.0f * (__quatX * __quatZ - __quatY * __quatW));
- __rotZ = atan2f(2.0f * (__quatX * __quatY + __quatZ * __quatW), (sw + sx - sy - sz));
-#else
- __rotX = atan2f(2.0f * (__quatX * __quatW + __quatY * __quatZ), 1.0f - 2.0f * (sx + sy));
- __rotY = asinf(-2.0f * (__quatX * __quatZ - __quatY * __quatW));
- __rotZ = atan2f(2.0f * (__quatX * __quatY + __quatZ * __quatW), 1.0f - 2.0f * (sy + sz));
-#endif
-
- __rotX *= 180.0f / M_PI;
- __rotY *= 180.0f / M_PI;
- __rotZ *= 180.0f / M_PI;
-}
-#endif
-
void
_TransformMatrix3Df::GetEulerAngles(float& x, float& y, float& z) const
{
angle = ax * bx + ay * by + az * bz + aw * bw;
-#if 1
if (angle < 0.0f)
{
ax = -ax; ay = -ay;
cy = ay * scale + by * invscale;
cz = az * scale + bz * invscale;
cw = aw * scale + bw * invscale;
- //cz = -cz;
-#if 0
- float the, a, rx, ry, rz;
- the = acosf(cw);
- a = the * 2.0f * 180.0f / M_PI;
- rx = cx / sinf(the);
- ry = cy / sinf(the);
- rz = cz / sinf(the);
-//printf("--- angle= %f(f= %f,%f,%f)(%f, %f, %f, %f)\n", a, rx, ry, rz, cx, cy, cz, cw);
-#endif
-#endif
-
-#if 0
- if (angle < 0)
- {
- bx = -bx;
- by = -by;
- bz = -bz;
- bw = -bw;
- angle = -angle;
- }
-
- if (angle <= -1.0f || angle >= 1.0f)
- {
- cx = ax;
- cy = ay;
- cz = az;
- cw = aw;
- }
- else
- {
- th = acos(angle);
- float sinHalfTheta = sqrt(1.0 - angle * angle);
- if (abs(sinHalfTheta) < 0.001)
- {
- cx = ax * 0.5 + bx * 0.5;
- cy = ay * 0.5 + by * 0.5;
- cz = az * 0.5 + bz * 0.5;
- cw = aw * 0.5 + bw * 0.5;
- }
- else
- {
- float ra = sin((1.0 - t) * th) / sinHalfTheta;
- float rb = sin(t * th) / sinHalfTheta;
- cx = ax * ra + bx * rb;
- cy = ay * ra + by * rb;
- cz = az * ra + bz * rb;
- cw = aw * ra + bw * rb;
- }
- }
-#endif
-
result[0] = cx;
result[1] = cy;
result[3] = cw;
}
-#if 0
-void
-_TransformMatrix3Df::V4MulPointByMatrix(const _Vector4Df& pin, const FloatMatrix4& m, _Vector4Df& pout) const
-{
-/*
- pout.x = (pin.x * m.Get(0, 0))
- + (pin.y * m.Get(1, 0))
- + (pin.z * m.Get(2, 0))
- + (pin.w * m.Get(3, 0));
-
- pout.y = (pin.x * m.Get(0, 1))
- + (pin.y * m.Get(1, 1))
- + (pin.z * m.Get(2, 1))
- + (pin.w * m.Get(3, 1));
-
- pout.z = (pin.x * m.Get(0, 2))
- + (pin.y * m.Get(1, 2))
- + (pin.z * m.Get(2, 2))
- + (pin.w * m.Get(3, 2));
-
- pout.w = (pin.x * m.Get(0, 3))
- + (pin.y * m.Get(1, 3))
- + (pin.z * m.Get(2, 3))
- + (pin.w * m.Get(3, 3));
-*/
-
- pout.x = (pin.x * m.matrix[0][0])
- + (pin.y * m.matrix[0][1])
- + (pin.z * m.matrix[0][2])
- + (pin.w * m.matrix[0][3]);
-
- pout.y = (pin.x * m.matrix[1][0])
- + (pin.y * m.matrix[1][1])
- + (pin.z * m.matrix[1][2])
- + (pin.w * m.matrix[1][3]);
-
- pout.z = (pin.x * m.matrix[2][0])
- + (pin.y * m.matrix[2][1])
- + (pin.z * m.matrix[2][2])
- + (pin.w * m.matrix[2][3]);
-
- pout.w = (pin.x * m.matrix[3][0])
- + (pin.y * m.matrix[3][1])
- + (pin.z * m.matrix[3][2])
- + (pin.w * m.matrix[3][3]);
-
-}
-
-float
-_TransformMatrix3Df::V3SquaredLength(const _Vector3Df& v) const
-{
- return ((v.x * v.x) + (v.y * v.y) + (v.z * v.z));
-}
-
-float
-_TransformMatrix3Df::V3Length(const _Vector3Df& v) const
-{
- return (sqrtf(V3SquaredLength(v)));
-}
-
-void
-_TransformMatrix3Df::V3Scale(_Vector3Df& v, float newlen) const
-{
- float len = V3Length(v);
-
- if (len != 0.0f)
- {
- v.x *= newlen / len;
- v.y *= newlen / len;
- v.z *= newlen / len;
- }
-}
-
-float
-_TransformMatrix3Df::V3Dot(const _Vector3Df& a, const _Vector3Df& b) const
-{
- return ((a.x * b.x) + (a.y * b.y) + (a.z * b.z));
-}
-
-void
-_TransformMatrix3Df::V3Combine(const _Vector3Df& a, const _Vector3Df& b, _Vector3Df& result, float ascl, float bscl) const
-{
- result.x = (ascl * a.x) + (bscl * b.x);
- result.y = (ascl * a.y) + (bscl * b.y);
- result.z = (ascl * a.z) + (bscl * b.z);
-}
-
-void
-_TransformMatrix3Df::V3Cross(const _Vector3Df& a, const _Vector3Df& b, _Vector3Df& c) const
-{
- c.x = (a.y * b.z) - (a.z * b.y);
- c.y = (a.z * b.x) - (a.x * b.z);
- c.z = (a.x * b.y) - (a.y * b.x);
-}
-#endif
}}} // Tizen::Ui::Animations