/** * Displays a message on-screen until either a mouse or keypress */ bool GfxSurface::displayText(const Common::String &msg, const Common::Point &pt) { // Set up a new graphics manager GfxManager gfxManager; gfxManager.activate(); gfxManager._font._colors.background = 0; gfxManager._font._colors.foreground = 7; gfxManager._font.setFontNumber(2); // Get the area for text display Rect textRect; gfxManager.getStringBounds(msg.c_str(), textRect, 200); textRect.center(pt.x, pt.y); // Make a backup copy of the area the text will occupy Rect saveRect = textRect; saveRect.collapse(-20, -8); GfxSurface *savedArea = Surface_getArea(gfxManager.getSurface(), saveRect); // Display the text gfxManager._font.writeLines(msg.c_str(), textRect, ALIGN_LEFT); // Write for a mouse or keypress Event event; while (!_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !_vm->shouldQuit()) ; // Restore the display area gfxManager.copyFrom(*savedArea, saveRect.left, saveRect.top); delete savedArea; gfxManager.deactivate(); return (event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_RETURN); }
void GfxDialog::draw() { Rect tempRect(_bounds); // Make a backup copy of the area the dialog will occupy _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds); // Set the palette for use in the dialog setPalette(); _gfxManager.activate(); // Fill in the contents of the entire dialog _gfxManager._bounds = Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); drawFrame(); // Reset the dialog's graphics manager to only draw within the dialog boundaries tempRect.translate(_globals->_gfxEdgeAdjust * 2, _globals->_gfxEdgeAdjust * 2); _gfxManager._bounds = tempRect; // Draw each element in the dialog in order GfxElementList::iterator i; for (i = _elements.begin(); i != _elements.end(); ++i) { (*i)->draw(); } // If there's a default button, then draw it if (_defaultButton) { _defaultButton->_flags |= GFXFLAG_THICK_FRAME; _defaultButton->draw(); } _gfxManager.deactivate(); }
void RightClickDialog::draw() { // Save the covered background area _savedArea = Surface_getArea(g_globals->_gfxManagerInstance.getSurface(), _bounds); // Draw the dialog image g_globals->gfxManager().copyFrom(_surface, _bounds.left, _bounds.top); }
void SceneArea::display() { _bounds.left = _pt.x - (_surface.getBounds().width() / 2); _bounds.top = _pt.y + 1 - _surface.getBounds().height(); _bounds.setWidth(_surface.getBounds().width()); _bounds.setHeight(_surface.getBounds().height()); _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds); draw2(); }
void RightClickButton::highlight() { if (_savedButton) { // Button was previously highlighted, so de-highlight by restoring saved area g_globals->gfxManager().copyFrom(*_savedButton, _bounds.left, _bounds.top); delete _savedButton; _savedButton = NULL; } else { // Highlight button by getting the needed highlighted image resource _savedButton = Surface_getArea(g_globals->gfxManager().getSurface(), _bounds); uint size; byte *imgData = g_resourceManager->getSubResource(7, 2, _buttonIndex, &size); GfxSurface btnSelected = surfaceFromRes(imgData); g_globals->gfxManager().copyFrom(btnSelected, _bounds.left, _bounds.top); DEALLOCATE(imgData); } }
void UIQuestion::showItem(int resNum, int rlbNum, int frameNum) { GfxDialog::setPalette(); // Get the item to display GfxSurface objImage = surfaceFromRes(resNum, rlbNum, frameNum); Rect imgRect; imgRect.resize(objImage, 0, 0, 100); imgRect.center(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2); // Save the area behind where the image will be displayed GfxSurface *savedArea = Surface_getArea(BF_GLOBALS.gfxManager().getSurface(), imgRect); // Draw the image BF_GLOBALS.gfxManager().copyFrom(objImage, imgRect); // Wait for a press BF_GLOBALS._events.waitForPress(); // Restore the old area BF_GLOBALS.gfxManager().copyFrom(*savedArea, imgRect); delete savedArea; }
void ModalDialog::draw() { // Set the palette for use in the dialog setPalette(); // Make a backup copy of the area the dialog will occupy Rect tempRect = _bounds; tempRect.collapse(-10, -10); _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), tempRect); _gfxManager.activate(); // Fill in the contents of the entire dialog _gfxManager._bounds = Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); drawFrame(); // Draw each element in the dialog in order GfxElementList::iterator i; for (i = _elements.begin(); i != _elements.end(); ++i) { (*i)->draw(); } _gfxManager.deactivate(); }