static LRESULT CALLBACK _funcToolProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { // static BOOL bCapture=false; // static POINT Dif; RECT Rect; // POINT Point; INT Child=0; LPDRAWITEMSTRUCT DIs; // S_WINSCENA WScena; CHAR *lpIcone; // INT OldCol; INT wID; INT a,x,y; PAINTSTRUCT ps; LPRECT lprc; INT ColBg; S_WTOOLBAR * psTb; HDC hDC; TOOLINFO ti; INT SizePlus=GetSystemMetrics(SM_CXFRAME)*2; INT ilx,ily,slx,sly; CHAR Buf[10]; INT idx; LPCREATESTRUCT psCs; WINDOWPLACEMENT sWp; psTb=(S_WTOOLBAR *) GetWindowLong(hWnd,GWL_USERDATA); switch (message) { case WM_CREATE: //if (_s.iToolNow==-1) ehExit("ToolBar Full"); psCs=(LPCREATESTRUCT) lParam; psTb=psCs->lpCreateParams; SetWindowLong(hWnd,GWL_USERDATA,(LONG) psTb); psTb->hWnd=hWnd; psTb->hWndTT= CreateWindowEx(0, TOOLTIPS_CLASS, (LPSTR) NULL, TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, psTb->hWnd, (HMENU) NULL, sys.EhWinInstance, NULL); // Creo la ToolTip //InitCommonControls(); for (a=0;a<psTb->iElement;a++) { psTb->arhButton[a]=CreateWindow("Button","", WS_CHILD|BS_OWNERDRAW|WS_VISIBLE| //BS_FLAT| BS_PUSHLIKE|BS_NOTIFY| BS_VCENTER, 0,0,10,10, hWnd, //GetForegroundWindow(), (HMENU) a, sys.EhWinInstance, NULL); // Inserisco i Nuovi ToolTip ti.cbSize = sizeof(TOOLINFO); ti.uFlags = TTF_IDISHWND|TTF_SUBCLASS; ti.hwnd = hWnd; ti.hinst = 0;//sys.EhWinInstance; ti.uId = (UINT) psTb->arhButton[a]; ti.lpszText = psTb->arsObj[a].lpHmz; SendMessage(psTb->hWndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); if (!psTb->arsObj[a].bEnable) EnableWindow(psTb->arhButton[a],FALSE); } break; case WM_DESTROY: // if ((Tb=GiveMeTb(hWnd))==NULL) break; if (!psTb) break; for (a=0;a<psTb->iElement;a++) DestroyWindow(psTb->arhButton[a]); DestroyWindow(psTb->hWndTT); break; case WM_MOVE: break; case WM_SIZE: // if ((Tb=GiveMeTb(hWnd))==NULL) break; GetWindowRect(psTb->hWnd,&Rect); psTb->WinLx=Rect.right-Rect.left; psTb->WinLy=Rect.bottom-Rect.top; GetClientRect(psTb->hWnd,&Rect); psTb->ClientLx=Rect.right-Rect.left; psTb->ClientLy=Rect.bottom-Rect.top; _keysMove(psTb); //return 0; break; case WM_EXITSIZEMOVE: // if ((Tb=GiveMeTb(hWnd))==NULL) break; SetFocus(psTb->hWndOwner); break; case WM_SIZING: //fwSide = wParam; lprc = (LPRECT) lParam; // if ((Tb=GiveMeTb(hWnd))==NULL) break; //dispx(" ->> %d ",GetSystemMetrics(SM_CYEDGE)); switch (wParam) { case WMSZ_TOP: case WMSZ_BOTTOM: case WMSZ_BOTTOMLEFT: case WMSZ_BOTTOMRIGHT: a=lprc->bottom-lprc->top-psTb->KeySy-SizePlus; y=(a/psTb->KeyLy); if (y<1) y=1; x=(psTb->iElement/y); if (x<1) x=1; for (;;) { if ((x*y)<psTb->iElement) x++; else break; } if ((x*y)>(psTb->iElement-x)) {y=((psTb->iElement+x-1)/x);} break; case WMSZ_LEFT: case WMSZ_RIGHT: default: a=lprc->right-lprc->left-(psTb->KeySx<<1)-SizePlus; x=(a/psTb->KeyLx); if (x<1) x=1; y=(psTb->iElement/x); if (y<1) y=1; for (;;) { if ((x*y)<psTb->iElement) y++; else break; } break; } if ((y*x)>psTb->iElement) { if (x==1) y=psTb->iElement; if (y==1) x=psTb->iElement; } GiveToolRect(psTb,x,y,lprc); return TRUE; case WM_MEASUREITEM: //MIs=(LPMEASUREITEMSTRUCT) lParam; //MIs->itemWidth=24; //MIs->itemHeight=24; return TRUE; case WM_DRAWITEM: // DRAWITEMSTRUCT { RECT rc; RECTD rcd; HDC dc; DIs=(LPDRAWITEMSTRUCT) lParam; dc=DIs->hDC; // dispx("%d- %d",DIs->CtlID,DIs->itemState&ODS_CHECKED); // WinDirectDC(DIs->hDC,&WScena,NULL); // OldCol=ModeColor(TRUE); idx=DIs->CtlID%psTb->iElement; lpIcone=psTb->arsObj[idx].lpIcone; switch(psTb->arsObj[idx].iType) { case O_TBCOLORRADIO: rectCopy(rc,DIs->rcItem); rc.right--; rc.bottom--; dcBoxp(dc,&rc,sys.ColorBackGround); //boxp(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1,sys.ColorBackGround,SET); if (strlen(lpIcone)==6) { Buf[2]=0; memcpy(Buf,lpIcone,2); ColBg=xtoi(Buf); memcpy(Buf,lpIcone+2,2); ColBg+=(xtoi(Buf)<<8); memcpy(Buf,lpIcone+4,2); ColBg+=(xtoi(Buf)<<16); } rc.left+=2; rc.top+=2; rc.right--; rc.bottom--; dcBoxp(dc,&rc,ColBg); //boxp(DIs->rcItem.left+2,DIs->rcItem.top+2,DIs->rcItem.right-3,DIs->rcItem.bottom-3,ColBg,SET); if (*lpIcone=='*') { dcBoxp(dc,rectFill(&rc,DIs->rcItem.left+2,DIs->rcItem.top+2,DIs->rcItem.right-3,DIs->rcItem.bottom-3),sys.arsColor[15]); //boxp(DIs->rcItem.left+2,DIs->rcItem.top+2,DIs->rcItem.right-3,DIs->rcItem.bottom-3,sys.arsColor[15],SET); dcLine(dc,DIs->rcItem.left+2,DIs->rcItem.top+2,DIs->rcItem.right-3,DIs->rcItem.bottom-3,0); dcLine(dc,DIs->rcItem.right-3,DIs->rcItem.top+2,DIs->rcItem.left+2,DIs->rcItem.bottom-3,0); } if ((DIs->itemState&ODS_SELECTED)||psTb->arsObj[DIs->CtlID].fChecked) { //box(DIs->rcItem.left+2,DIs->rcItem.top+2,DIs->rcItem.right-3,DIs->rcItem.bottom-3,15,XOR); dcBoxp(dc,rectFill(&rc,DIs->rcItem.left+2,DIs->rcItem.top+2,DIs->rcItem.right-3,DIs->rcItem.bottom-3),sys.arsColor[15]); //box3d(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1,1); //box3d(DIs->rcItem.left+1,DIs->rcItem.top+1,DIs->rcItem.right-2,DIs->rcItem.bottom-2,4); } else { //box3d(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1,0); } break; default: if (DIs->itemState&ODS_SELECTED) ColBg=ColorLum(sys.ColorBackGround,-4); else ColBg=sys.ColorBackGround; if (psTb->arsObj[DIs->CtlID].fChecked) { INT a,b; INT Len=DIs->rcItem.right-DIs->rcItem.left+1; for (a=0,b=0;a<Len;a++,b+=4) { // X:100:A:(len-1) //boxp(DIs->rcItem.left+a,DIs->rcItem.top,DIs->rcItem.left+a,DIs->rcItem.bottom,ColorFusion(RGB(0,80,200),RGB(0,200,255),a*100/(Len-1)),SET); dcBoxp(dc,rectFill(&rc,DIs->rcItem.left+a,DIs->rcItem.top,DIs->rcItem.left+a,DIs->rcItem.bottom),ColorFusion(RGB(0,80,200),RGB(0,200,255),a*100/(Len-1))); } /* ColBg=ColorLum(sys.ColorBackGround,-20); boxp(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.left,DIs->rcItem.bottom,ColBg,SET); for (a=0,b=0;a<7;a++,b+=16) { box(DIs->rcItem.left+a,DIs->rcItem.top+a,DIs->rcItem.right-a,DIs->rcItem.bottom-a, ColorFusion(ColorLum(sys.ColorBackGround,70),ColBg,b),SET); } */ } else //boxp(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1,ColBg,SET); dcBoxp(dc,rectFill(&rc,DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1),ColBg); if (ico_info(&ilx,&ily,lpIcone)<0) break; //{ilx=1;ily=1;} slx=(psTb->KeyLx-ilx)>>1; sly=(psTb->KeyLy-ily)>>1; if ((DIs->itemState&ODS_SELECTED)||psTb->arsObj[idx].fChecked) { //ico_disp(DIs->rcItem.left+1+slx,DIs->rcItem.top+1+sly,lpIcone); dcIcone(dc,DIs->rcItem.left+1+slx,DIs->rcItem.top+1+sly,lpIcone); // box3d(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1,1); // box3d(DIs->rcItem.left+1,DIs->rcItem.top+1,DIs->rcItem.right-2,DIs->rcItem.bottom-2,4); } else { S_ICONE_EFFECT sEfx; sEfx.enType=IEFX_GRAYSCALE; if (DIs->itemState&ODS_DISABLED) //ico_disp3D(DIs->rcItem.left+slx,DIs->rcItem.top+sly,sys.ColorBackGround,lpIcone); //dcIconeEx(dc,DIs->rcItem.left+slx,DIs->rcItem.top+sly,lpIcone,&sEfx); dcIconeGray(dc,DIs->rcItem.left+slx,DIs->rcItem.top+sly,lpIcone,sys.Color3DShadow,0); else //ico_disp(DIs->rcItem.left+slx,DIs->rcItem.top+sly,lpIcone); dcIcone(dc,DIs->rcItem.left+slx,DIs->rcItem.top+sly,lpIcone); dcBox(dc,rectFillD(&rcd,DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1),rgba(0,0,0,255),1.0); //box3d(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1,0); } break; } //AVANTISSIMO: // ModeColor(OldCol); //WinDirectDC(NULL,&WScena,NULL); } break; case WM_LBUTTONDOWN: psTb->bCapture=true; sWp.length=sizeof(sWp); GetWindowPlacement(hWnd,&sWp); //GetWindowRect(hWnd,&psTb->rcShot); // Posizione attuale rectCopy(psTb->rcShot,sWp.rcNormalPosition); GetCursorPos(&psTb->ptStart); SetCapture(hWnd); // Dif.x=Point.x-Rect.left; // Dif.y=Point.y-Rect.top; //return TRUE; break; case WM_LBUTTONUP: if (psTb->bCapture) ReleaseCapture(); psTb->bCapture=false; break; //return TRUE; //break; case WM_RBUTTONDOWN: case WM_RBUTTONUP: case WM_LBUTTONDBLCLK: case WM_ACTIVATEAPP: break; case WM_MOUSEMOVE: if (psTb->bCapture) { POINT ptNow; POINT ptDelta; GetCursorPos(&ptNow); ptDelta.x=ptNow.x-psTb->ptStart.x; ptDelta.y=ptNow.y-psTb->ptStart.y; // printf("%d,%d" CRLF,ptDelta.x,ptDelta.y); MoveWindow(hWnd,psTb->rcShot.left+ptDelta.x,psTb->rcShot.top+ptDelta.y,psTb->WinLx,psTb->WinLy,TRUE); } break; case WM_NCHITTEST: // if ((Tb=GiveMeTb(hWnd))==NULL) break; break; // Messaggio di cambio cursore //case WM_SETCURSOR: break; // Intercettazione degli oggetti Windows //case WM_COMMAND: break; case WM_COMMAND: wID = LOWORD(wParam); if (HIWORD(wParam)==BN_CLICKED) { // if ((Tb=GiveMeTb(hWnd))==NULL) break; LKeySelect(psTb,wID); _objEvent(psTb,wID); SetFocus(psTb->hWndOwner); } break; case WM_PAINT: hDC=BeginPaint(hWnd,&ps); /* if ((Tb=GiveMeTb(hWnd))==NULL) break; // WinDirectDC(hDC,&WScena,NULL); if (psTb->ClientLy>psTb->ClientLx) { box3d(0,0,psTb->ClientLx,1,0); box3d(0,2,psTb->ClientLx,3,0); box3d(0,psTb->ClientLy-2,psTb->ClientLx,psTb->ClientLy-1,0); box3d(0,psTb->ClientLy-4,psTb->ClientLx,psTb->ClientLy-3,0); } else { box3d(0,0,1,psTb->ClientLy,0); box3d(2,0,3,psTb->ClientLy,0); box3d(psTb->ClientLx-2,0,psTb->ClientLx-1,psTb->ClientLy-1,0); box3d(psTb->ClientLx-4,0,psTb->ClientLx-3,psTb->ClientLy-1,0); //box3d(2,0,3,psTb->ClientLy,0); } WinDirectDC(NULL,&WScena,NULL); */ EndPaint(hWnd,&ps); break; //case WM_SETFOCUS: IsFocus=TRUE; break; //case WM_KILLFOCUS: IsFocus=FALSE; break; } // switch message return(DefWindowProc(hWnd, message, wParam, lParam)); }
void DebugRenderSystem::Process() { uint32 size = entities.size(); for(uint32 i = 0; i < size; ++i) { Entity * entity = entities[i]; DebugRenderComponent * debugRenderComponent = cast_if_equal<DebugRenderComponent*>(entity->GetComponent(Component::DEBUG_RENDER_COMPONENT)); TransformComponent * transformComponent = cast_if_equal<TransformComponent*>(entity->GetComponent(Component::TRANSFORM_COMPONENT)); //RenderComponent * renderComponent = cast_if_equal<RenderComponent*>(entity->GetComponent(Component::RENDER_COMPONENT)); Matrix4 worldTransform = /*(*transformComponent->GetWorldTransform()) * */camera->GetMatrix(); RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_MODELVIEW, camera->GetMatrix()); AABBox3 debugBoundigBox = entity->GetWTMaximumBoundingBoxSlow(); uint32 debugFlags = debugRenderComponent->GetDebugFlags(); // Camera debug draw if(debugFlags & DebugRenderComponent::DEBUG_DRAW_CAMERA) { CameraComponent * entityCameraComp = (CameraComponent *) entity->GetComponent(Component::CAMERA_COMPONENT); if(NULL != entityCameraComp) { Camera* entityCamera = entityCameraComp->GetCamera(); if(NULL != entityCamera && camera != entityCamera) { Color camColor(0.0f, 1.0f, 0.0f, 1.0f); Vector3 camPos = entityCamera->GetPosition(); //Vector3 camDirect = entityCamera->GetDirection(); AABBox3 camBox(camPos, 2.5f); // If this is clip camera - show it as red camera if (entityCamera == entity->GetScene()->GetClipCamera()) camColor = Color(1.0f, 0.0f, 0.0f, 1.0f); RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR); RenderManager::Instance()->SetState(RenderState::STATE_COLORMASK_ALL | RenderState::STATE_DEPTH_WRITE); RenderManager::Instance()->SetColor(camColor); RenderHelper::Instance()->DrawBox(camBox, 2.5f); RenderManager::Instance()->SetState(RenderState::DEFAULT_3D_STATE); RenderManager::Instance()->ResetColor(); debugBoundigBox = camBox; } } } // UserNode debug draw if(debugFlags & DebugRenderComponent::DEBUG_DRAW_USERNODE) { if(NULL != entity->GetComponent(Component::USER_COMPONENT)) { Color dcColor(0.0f, 0.0f, 1.0f, 1.0f); AABBox3 dcBox(Vector3(), 1.0f); Matrix4 prevMatrix = RenderManager::Instance()->GetMatrix(RenderManager::MATRIX_MODELVIEW); Matrix4 finalMatrix = transformComponent->GetWorldTransform() * prevMatrix; RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_MODELVIEW, finalMatrix); RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR); RenderManager::Instance()->SetState(RenderState::STATE_COLORMASK_ALL | RenderState::STATE_DEPTH_WRITE | RenderState::STATE_DEPTH_TEST); RenderManager::Instance()->SetColor(1.f, 1.f, 0, 1.0f); RenderHelper::Instance()->DrawLine(Vector3(0, 0, 0), Vector3(1.f, 0, 0)); RenderManager::Instance()->SetColor(1.f, 0, 1.f, 1.0f); RenderHelper::Instance()->DrawLine(Vector3(0, 0, 0), Vector3(0, 1.f, 0)); RenderManager::Instance()->SetColor(0, 1.f, 1.f, 1.0f); RenderHelper::Instance()->DrawLine(Vector3(0, 0, 0), Vector3(0, 0, 1.f)); RenderManager::Instance()->SetColor(dcColor); RenderHelper::Instance()->DrawBox(dcBox); RenderManager::Instance()->SetState(RenderState::DEFAULT_3D_STATE); RenderManager::Instance()->ResetColor(); RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_MODELVIEW, prevMatrix); dcBox.GetTransformedBox(transformComponent->GetWorldTransform(), debugBoundigBox); } } // LightNode debug draw if (debugFlags & DebugRenderComponent::DEBUG_DRAW_LIGHT_NODE) { LightComponent *lightComp = (LightComponent *) entity->GetComponent(Component::LIGHT_COMPONENT); if(NULL != lightComp) { Light* light = lightComp->GetLightObject(); if(NULL != light) { Vector3 lPosition = light->GetPosition(); RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR); RenderManager::Instance()->SetState(RenderState::STATE_COLORMASK_ALL | RenderState::STATE_DEPTH_WRITE); RenderManager::Instance()->SetColor(1.0f, 1.0f, 0.0f, 1.0f); switch (light->GetType()) { case Light::TYPE_DIRECTIONAL: { Vector3 lDirection = light->GetDirection(); RenderHelper::Instance()->DrawArrow(lPosition, lPosition + lDirection * 10, 2.5f); RenderHelper::Instance()->DrawBox(AABBox3(lPosition, 0.5f), 1.5f); debugBoundigBox = AABBox3(lPosition, 2.5f); } break; default: { AABBox3 lightBox(lPosition, 2.5f); RenderHelper::Instance()->DrawBox(lightBox, 2.5f); debugBoundigBox = lightBox; } break; } RenderManager::Instance()->SetState(RenderState::DEFAULT_3D_STATE); RenderManager::Instance()->ResetColor(); } } } if ((debugFlags & DebugRenderComponent::DEBUG_DRAW_AABOX_CORNERS)) { RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR); RenderManager::Instance()->SetState(RenderState::STATE_COLORMASK_ALL | RenderState::STATE_DEPTH_WRITE | RenderState::STATE_DEPTH_TEST); RenderManager::Instance()->SetColor(1.0f, 1.0f, 1.0f, 1.0f); RenderHelper::Instance()->DrawCornerBox(debugBoundigBox, 1.5f); RenderManager::Instance()->SetState(RenderState::DEFAULT_3D_STATE); RenderManager::Instance()->SetColor(1.0f, 1.0f, 1.0f, 1.0f); // RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_MODELVIEW, prevMatrix); } if (debugFlags & DebugRenderComponent::DEBUG_DRAW_RED_AABBOX) { RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR); RenderManager::Instance()->SetState(RenderState::STATE_COLORMASK_ALL | RenderState::STATE_DEPTH_WRITE); RenderManager::Instance()->SetColor(1.0f, 0.0f, 0.0f, 1.0f); RenderHelper::Instance()->DrawBox(debugBoundigBox, 1.5f); RenderManager::Instance()->SetState(RenderState::DEFAULT_3D_STATE); RenderManager::Instance()->SetColor(1.0f, 1.0f, 1.0f, 1.0f); } // UserNode Draw #if 0 if (debugFlags & DEBUG_DRAW_USERNODE) { Matrix4 prevMatrix = RenderManager::Instance()->GetMatrix(RenderManager::MATRIX_MODELVIEW); Matrix4 finalMatrix = worldTransform * prevMatrix; RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_MODELVIEW, finalMatrix); RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR); RenderManager::Instance()->SetState(RenderStateBlock::STATE_COLORMASK_ALL | RenderStateBlock::STATE_DEPTH_WRITE | RenderStateBlock::STATE_DEPTH_TEST); RenderManager::Instance()->SetColor(0, 0, 1.0f, 1.0f); RenderHelper::Instance()->DrawBox(drawBox); RenderManager::Instance()->SetColor(1.f, 1.f, 0, 1.0f); RenderHelper::Instance()->DrawLine(Vector3(0, 0, 0), Vector3(1.f, 0, 0)); RenderManager::Instance()->SetColor(1.f, 0, 1.f, 1.0f); RenderHelper::Instance()->DrawLine(Vector3(0, 0, 0), Vector3(0, 1.f, 0)); RenderManager::Instance()->SetColor(0, 1.f, 1.f, 1.0f); RenderHelper::Instance()->DrawLine(Vector3(0, 0, 0), Vector3(0, 0, 1.f)); RenderManager::Instance()->SetState(RenderStateBlock::DEFAULT_3D_STATE); RenderManager::Instance()->SetColor(1.0f, 1.0f, 1.0f, 1.0f); RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_MODELVIEW, prevMatrix); } #endif #if 0 // ParticleEffectNode if (debugFlags != DEBUG_DRAW_NONE) { if (!(flags & SceneNode::NODE_VISIBLE))return; RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR); RenderManager::Instance()->SetState(RenderStateBlock::STATE_COLORMASK_ALL | RenderStateBlock::STATE_DEPTH_WRITE); Vector3 position = Vector3(0.0f, 0.0f, 0.0f) * GetWorldTransform(); Matrix3 rotationPart(GetWorldTransform()); Vector3 direction = Vector3(0.0f, 0.0f, 1.0f) * rotationPart; direction.Normalize(); RenderManager::Instance()->SetColor(0.0f, 0.0f, 1.0f, 1.0f); RenderHelper::Instance()->DrawLine(position, position + direction * 10, 2.f); RenderManager::Instance()->SetState(RenderStateBlock::DEFAULT_3D_STATE); RenderManager::Instance()->SetColor(1.0f, 1.0f, 1.0f, 1.0f); } #endif } }