void CqFramebuffer::resize() { Fl::lock(); std::stringstream title; title << m_bookName; int fw = defaultWidth; int fh = defaultHeight; if(m_associatedImage) { if(m_associatedImage->frameWidth() > 0 && m_associatedImage->frameHeight() > 0) { fw = m_associatedImage->frameWidth(); fh = m_associatedImage->frameHeight(); } title << ": " << m_associatedImage->name(); } m_uiImageWidget->size(fw, fh); // Resize the window if it's too small, leave it if it's big enough or bigger. if( w() < fw || h() < fh ) resize(x(), y(), min(fw, static_cast<int>(Fl::w()*0.9)), min(fh, static_cast<int>(Fl::h()*0.9))); centerImageWidget(); redraw(); m_title = title.str(); label(m_title.c_str()); m_doResize = false; Fl::unlock(); }
void CqFramebuffer::resize(int X, int Y, int W, int H) { // is the window actually getting resized? (might just be moved) bool isResizing = W != w() || H != h(); // call parent's resize() Fl_Double_Window::resize(X, Y, W, H); if(isResizing) centerImageWidget(); }
int CqCenterScroll::handle(int event) { switch(event) { case FL_PUSH: if(Fl::event_button() == FL_MIDDLE_MOUSE) { m_prevDragX = Fl::event_x(); m_prevDragY = Fl::event_y(); return 1; } break; case FL_RELEASE: if(Fl::event_button() == FL_MIDDLE_MOUSE) return 1; break; case FL_DRAG: if(Fl::event_button() == FL_MIDDLE_MOUSE) { position(xposition() - (Fl::event_x() - m_prevDragX), yposition() - (Fl::event_y() - m_prevDragY)); m_prevDragX = Fl::event_x(); m_prevDragY = Fl::event_y(); return 1; } break; case FL_KEYDOWN: case FL_SHORTCUT: int key = Fl::event_key(); switch(key) { case 'h': if(Fl::event_alt()) return 0; // passthrough case FL_Home: centerImageWidget(); return 1; break; // Ignore cursors, so that the browser gets them. case FL_Up: case FL_Down: case FL_Left: case FL_Right: return 0; } break; } if(m_imageWidget.handle(event)) return(1); else return Fl_Scroll::handle(event); }
// Event handler for the framebuffer int CqFramebuffer::handle(int event) { switch(event) { case FL_FOCUS: return 1; case FL_UNFOCUS: return 1; case FL_KEYDOWN: { boost::shared_ptr<Aqsis::CqImage>& image = m_uiImageWidget->image(); int key = Fl::event_key(); if(Fl::event_ctrl()) { switch(key) { case FL_KP + '+': incSubImage(true); return 1; case FL_KP + '-': incSubImage(false); return 1; } } else if(Fl::event_shift()) { switch(key) { case 'r': if(image) image->reloadFromFile(); return 1; } } else { switch(key) { case 'h': // 'Home' widget back to center centerImageWidget(); m_scroll->redraw(); return 1; case FL_KP + '+': incZoom(1); return 1; case FL_KP + '-': incZoom(-1); return 1; } } } break; case FL_KEYUP: break; case FL_PUSH: switch (Fl::event_button()) { case FL_MIDDLE_MOUSE: // pan m_lastPos[0] = Fl::event_x(); m_lastPos[1] = Fl::event_y(); return 1; } break; case FL_RELEASE: switch (Fl::event_button()) { case FL_MIDDLE_MOUSE: fl_cursor(FL_CURSOR_DEFAULT, FL_FOREGROUND_COLOR, FL_BACKGROUND_COLOR); return 1; } break; case FL_DRAG: switch (Fl::event_button()) { case FL_MIDDLE_MOUSE: fl_cursor(FL_CURSOR_MOVE, FL_FOREGROUND_COLOR, FL_BACKGROUND_COLOR); int dx = Fl::event_x() - m_lastPos[0]; int dy = Fl::event_y() - m_lastPos[1]; m_uiImageWidget->position(m_uiImageWidget->x() + dx, m_uiImageWidget->y()+dy); m_scroll->redraw(); m_lastPos[0] = Fl::event_x(); m_lastPos[1] = Fl::event_y(); return 1; } break; case FL_MOUSEWHEEL: { if(Fl::event_ctrl()) incSubImage(Fl::event_dy() < 0); else incZoom(-Fl::event_dy()); return 1; } break; } return Fl_Window::handle(event); }