/* 描画イメージのアップデート @param[in] lprc アップデートする範囲 */ void ImgLayer::UpdateEditNode(LPRECT lprc) { ResourceLock( IE_LAYER_RESOURCE_ID::EDITNODE_QUEUE ); if (!m_pEditQueueForeGrnd->empty()) { EditQueue::iterator itr = m_pEditQueueForeGrnd->begin(); for (; itr != m_pEditQueueForeGrnd->end(); itr++) { if ((*itr).flag == EDIT_FLAG::ADD_EDIT) { if ((*itr).pNode->node_flag == NODE_FLAG::EDIT_DRAW) { AddEditNode(dynamic_cast<EditNode*>((*itr).pNode), lprc); } else if ((*itr).pNode->node_flag == NODE_FLAG::MOVE_IMG) { MoveNode* pNode = dynamic_cast<MoveNode*>((*itr).pNode); assert(pNode); m_LayerRect.left += pNode->move_x; m_LayerRect.right += pNode->move_x; m_LayerRect.top += pNode->move_y; m_LayerRect.bottom += pNode->move_y; delete pNode; (*itr).pNode = NULL; } } else if ((*itr).flag == EDIT_FLAG::SUB_EDIT) { if ((*itr).pNode->node_flag == NODE_FLAG::EDIT_DRAW) { SubEditNode(dynamic_cast<EditNode*>((*itr).pNode), lprc); } else if ((*itr).pNode->node_flag == NODE_FLAG::MOVE_IMG) { assert(0); //MoveNode* pNode = dynamic_cast<MoveNode*>((*itr).pNode); //assert(pNode); //m_LayerRect.left -= pNode->move_x; //m_LayerRect.right -= pNode->move_x; //m_LayerRect.top -= pNode->move_y; //m_LayerRect.bottom -= pNode->move_y; } } } } ResourceUnlock( IE_LAYER_RESOURCE_ID::EDITNODE_QUEUE ); }
void EditorSelection::OnHierarchyListSelectionChange(const PODVector<UIElement*>& items, const PODVector<unsigned>& indices) { ClearSelection(); for (unsigned int i = 0; i < indices.Size(); ++i) { unsigned int index = indices[i]; UIElement* item = items[index]; int type = item->GetVar(TYPE_VAR).GetInt(); if (type == ITEM_COMPONENT) { Component* comp = editor_->GetListComponent(item); AddSelectedComponent(comp); } else if (type == ITEM_NODE) { Node* node = editor_->GetListNode(item); AddSelectedNode(node); } else if (type == ITEM_UI_ELEMENT) { UIElement* element = editor_->GetListUIElement(item); AddSelectedUIElement(element); } } // If only one node/UIElement selected, use it for editing if (GetNumSelectedNodes() == 1) editNode_ = selectedNodes_[0]; if (GetNumSelectedUIElements() == 1) editUIElement_ = selectedUIElements_[0]; // If selection contains only components, and they have a common node, use it for editing if (selectedNodes_.Empty() && !selectedComponents_.Empty()) { Node* commonNode = NULL; for (unsigned int i = 0; i < GetNumSelectedComponents(); ++i) { if (i == 0) commonNode = GetSelectedComponents()[i]->GetNode(); else { if (selectedComponents_[i]->GetNode() != commonNode) commonNode = NULL; } } editNode_ = commonNode; } // Now check if the component(s) can be edited. If many selected, must have same type or have same edit node if (!selectedComponents_.Empty()) { if (editNode_ == NULL) { StringHash compType = selectedComponents_[0]->GetType(); bool sameType = true; for (unsigned int i = 1; i < GetNumSelectedComponents(); ++i) { if (selectedComponents_[i]->GetType() != compType) { sameType = false; break; } } if (sameType) editComponents_ = selectedComponents_; } else { editComponents_ = selectedComponents_; numEditableComponentsPerNode_ = GetNumSelectedComponents(); } } // If just nodes selected, and no components, show as many matching components for editing as possible if (!selectedNodes_.Empty() && selectedComponents_.Empty() && selectedNodes_[0]->GetNumComponents() > 0) { unsigned int count = 0; for (unsigned int j = 0; j < selectedNodes_[0]->GetNumComponents(); ++j) { StringHash compType = selectedNodes_[0]->GetComponents()[j]->GetType(); bool sameType = true; for (unsigned int i = 1; i < GetNumSelectedNodes(); ++i) { if (selectedNodes_[i]->GetNumComponents() <= j || selectedNodes_[i]->GetComponents()[j]->GetType() != compType) { sameType = false; break; } } if (sameType) { ++count; for (unsigned int i = 0; i < GetNumSelectedNodes(); ++i) AddEditComponent(selectedNodes_[i]->GetComponents()[j]); } } if (count > 1) numEditableComponentsPerNode_ = count; } if (selectedNodes_.Empty() && editNode_ != NULL) AddEditNode(editNode_); else { editNodes_ = selectedNodes_; // Cannot multi-edit on scene and node(s) together as scene and node do not share identical attributes, // editing via gizmo does not make too much sense either if (editNodes_.Size() > 1 && editNodes_[0] == editor_->GetScene()) editNodes_.Erase(0); } if (selectedUIElements_.Empty() && editUIElement_ != NULL) AddEditUIElement(editUIElement_); else editUIElements_ = selectedUIElements_; }