📄 gui_manager.cpp
字号:
// gui_manager.cpp#include "gui_manager.h"#include "KitSrc/ugk_memopr.h"#include "KitSrc/ugkglobal.h"GUI_Manager::GUI_Manager(){ m_NumLayer = 0; m_AllocLayer = 0; m_Layers = NULL; m_BoundLeft = 0; m_BoundRight = 0; m_BoundTop = 0; m_BoundBottom = 0; m_XCenter = m_YCenter = 0; m_Xview = m_Yview = 0;}GUI_Manager::~GUI_Manager(){ if(m_Layers) { for(int i=0;i<m_NumLayer;i++) { GUI_Layer *lyr=*(m_Layers+i); delete lyr; } delete m_Layers; }}void GUI_Manager::setCenter(double cx, double cy){ m_XCenter = cx; m_YCenter = cy;}void GUI_Manager::getCenter(double &cx, double &cy){ cx = m_XCenter; cy = m_YCenter;}void GUI_Manager::setView(double vx, double vy){ if(vx>(m_BoundRight-m_BoundLeft)) { vx = m_BoundRight-m_BoundLeft; } if(vy>(m_BoundBottom-m_BoundTop)) { vy = m_BoundBottom-m_BoundTop; } if(vx<0.05) vx = 0.05; if(vy<0.05) vy = 0.05; m_Xview = vx; m_Yview = vy;}void GUI_Manager::getView(double &vx,double &vy){ vx = m_Xview; vy = m_Yview;}void GUI_Manager::UpdateBound(double minX,double maxX,double minY,double maxY){ if(m_NumLayer==1) //第一个 { m_BoundLeft = minX; m_BoundRight = maxX; m_BoundTop = minY; m_BoundBottom = maxY; } else { if(minX<m_BoundLeft) m_BoundLeft = minX; if(maxX>m_BoundRight) m_BoundRight = maxX; if(minY<m_BoundTop) m_BoundTop = minY; if(maxY>m_BoundBottom) m_BoundBottom = maxY; } m_XCenter = (m_BoundLeft+m_BoundRight)/2; m_YCenter = (m_BoundTop+m_BoundBottom)/2; m_Xview = m_BoundRight-m_BoundLeft+5; m_Yview = m_BoundBottom-m_BoundTop+5; //printf("Xview = %f Yview = %f \n",m_Xview,m_Yview);}void GUI_Manager::ComputerDistperPixel(){ //printf("paintWidth = %d paintHeight = %d\n",m_paintWidth,m_paintHeight); //printf("m_Xview = %f m_Yview = %f \n",m_Xview, m_Yview); double xPerPixel = m_Xview/(m_paintWidth); //边沿需要留一点空间 double yPerPixel = m_Yview/(m_paintHeight); m_DistperPixel =(xPerPixel>yPerPixel)?xPerPixel:yPerPixel; m_Xview = m_DistperPixel *(m_paintWidth); m_Yview = m_DistperPixel*(m_paintHeight); //printf("Xview= %f Yview= %f\n",m_Xview,m_Yview);}GUI_Layer* GUI_Manager::GetLayerRef(int idx){ if( (idx<0) || (idx>=m_NumLayer) ) return NULL; return *(m_Layers+idx);}void GUI_Manager::AddLayer(GUI_Layer *lyrAdd){ //printf("GUI_Manager::AddLayer()\n"); if(lyrAdd==NULL) return; if(m_AllocLayer==m_NumLayer) { m_AllocLayer += 5; m_Layers = (GUI_Layer **)UGK_Realloc(m_Layers,m_AllocLayer*sizeof(GUI_Layer *) ); } *(m_Layers+m_NumLayer) = lyrAdd; m_NumLayer++; double left,right,top,bottom; lyrAdd->getLayerExtent(right,left,bottom,top); UpdateBound(left,right,top,bottom); }void GUI_Manager::RemoveLayer(int idx){ if((idx<0)||(idx>=m_NumLayer)) { return; } GUI_Layer *lyr=*(m_Layers+idx); int zPos = lyr->getZposition(); for(int i=idx;i<m_NumLayer-1;i++) { *(m_Layers+i) = *(m_Layers+i+1); } *(m_Layers+m_NumLayer-1) = NULL; m_NumLayer--; delete lyr; lyr = NULL; for(int j=0;j<m_NumLayer;j++) { lyr = *(m_Layers+j); int pos =lyr->getZposition(); if( pos>zPos) lyr->setZposition(pos-1); }}GUI_Layer* GUI_Manager::GetLayerRef(const char *lyrName){ if(lyrName==NULL) return NULL; GUI_Layer *lyr=NULL; for(int i=0;i<m_NumLayer;i++) { lyr = GetLayerRef(i); assert(lyr!=NULL); if( EQUAL(lyrName,lyr->getFileName()) ) return lyr; } return NULL;}GUI_Layer* GUI_Manager::GetLayerRefByZpos(int zPos){ GUI_Layer *lyr=NULL; for(int i=0;i<m_NumLayer;i++) { lyr = GetLayerRef(i); assert(lyr!=NULL); if(lyr->getZposition()==zPos) return lyr; } return NULL;}void GUI_Manager::setPaintRect(int top,int left, int pw,int ph){ m_paintTop = top; m_paintLeft = left; m_paintWidth = pw; m_paintHeight = ph; }void GUI_Manager::InitAllLayers(){ GUI_Layer *oneLyr=NULL; for(int i=0;i<m_NumLayer;i++) { oneLyr =GetLayerRef(i); if(!oneLyr->IsDataInited()) oneLyr->InitDataFromFile(); }}void GUI_Manager::Draw(QPaintDevice *pd){ printf("GUI_Manager::Draw()\n"); ComputerDistperPixel(); GUI_Layer *oneLyr=NULL; for(int i=m_NumLayer-1;i>=0;i--) { oneLyr = GetLayerRefByZpos(i); oneLyr->setLayerCenter(m_XCenter,m_YCenter); oneLyr->setLayerView(m_Xview,m_Yview); oneLyr->setDistperPixel(m_DistperPixel); oneLyr->setPaintRect(m_paintTop,m_paintLeft,m_paintWidth,m_paintHeight); oneLyr->Draw(pd); }}/* 调试用 */void GUI_Manager::PrintInfo(){ printf("Layer Manager :\n"); GUI_Layer *lyr=NULL; for(int i=0;i<m_NumLayer;i++) { lyr = GetLayerRef(i); printf("The Zposition %d\n",lyr->getZposition()); printf("The %d Layer:%s\n",i,lyr->getFileName()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -