zoomedit:

* Refactored some RenderArea methods
This commit is contained in:
neoraider 2008-04-16 19:56:02 +00:00
parent 82a2bdabc4
commit 1464f33677
2 changed files with 20 additions and 27 deletions

View file

@ -76,7 +76,24 @@ void RenderArea::onRealize() {
}
bool RenderArea::onConfigureEvent(GdkEventConfigure*) {
updateViewport();
if(!gdkGLBegin())
return false;
glViewport(0, 0, get_width(), get_height());
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(get_width() != 0 && get_height() != 0)
glScalef(2.0f/get_width(), -2.0f/get_height(), 1);
gdkGLEnd();
viewWidth = get_width()/scale;
viewHeight = get_height()/scale;
queue_draw();
return true;
}
@ -121,31 +138,10 @@ void RenderArea::zoom(int zoom, float x, float y) {
zoomLevel = std::max(std::min(zoomLevel + zoom, 50), -100);
scale = 100*std::pow(1.1f, zoomLevel);
updateScrolling(x, y);
}
void RenderArea::updateViewport() {
if(!gdkGLBegin())
return;
glViewport(0, 0, get_width(), get_height());
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(get_width() != 0 && get_height() != 0)
glScalef(2.0f/get_width(), -2.0f/get_height(), 1);
gdkGLEnd();
updateScrolling();
}
void RenderArea::updateScrolling(float x, float y) {
const float newWidth = get_width()/scale, newHeight = get_height()/scale;
xCenter += (x-0.5)*(viewWidth-newWidth);
yCenter += (y-0.5)*(viewHeight-newHeight);
xCenter += (x-0.5f)*(viewWidth-newWidth);
yCenter += (y-0.5f)*(viewHeight-newHeight);
viewWidth = newWidth;
viewHeight = newHeight;

View file

@ -74,9 +74,6 @@ class RenderArea : public Gtk::DrawingArea {
void zoom(int zoom, float x = 0.5f, float y = 0.5f);
void updateViewport();
void updateScrolling(float x = 0.5f, float y = 0.5f);
bool gdkGLBegin() {
GtkWidget *widget = GTK_WIDGET(gobj());