Занимаюсь разработкой интерфейса для моих опенгл приложений. Сейчас сделал кнопки и окошки. С окошками встала такая проблема: Само окно я нарисовал, сделал подсветку, тени, выделение, а сейчас нужно перемещать это окно мышкой за верхнюю часть. Я беру координаты мышки, перевожу их в координаты сцены, определяю пересечение с нужной мне частью, а дальше засел. Нужно после всего это при нажатой и двигающийся левой кнопки мыши сдвигать окно туда, куда двигается мышка, то есть перетаскивать его. Раньше с мышкой я не работал поэтому жду помощи.
Использую глут чтобы контролить мышку. Вот код:
| Код | void MousePressed(int button,int state,int x,int y) { gui.setmouse(x,y); //cout<<gui.ctransx(x)<<" "<<gui.ctransy(y)<<endl; if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN) { win.setbutstate(true); glutPostRedisplay(); if(bb.collision()){cout<<"b1"<<endl;} if(bb2.collision()){cout<<"b2"<<endl;} if(win.tbcollision()){cout<<"tb"<<endl;}
} else{win.setbutstate(false);}
}
void MousePressedMove(int ax,int ay) { gui.setmouse(ax,ay); cout<<"move"<<endl;
if(win.tbcollision() && win.getbutstate()) { win.winmove(ax,ay); win.setwinmoveold(); glutPostRedisplay(); }
}
void MouseMove(int x,int y) { gui.setmouse(x,y); if(win.collision()){win.winfocus(true);} else{win.winfocus(false);} if(win.tbcollision()){win.tbfocus(true);} else{win.tbfocus(false);} if(bb.collision()){bb.focus(true);} else{bb.focus(false);} if(bb2.collision()){bb2.focus(true);} else{bb2.focus(false);} }
|
Этот код работает и окно двигается, но рывками. Надеюсь на помощь) |