UT_Error IE_Exp_EPUB::doOptions() { XAP_Frame * pFrame = XAP_App::getApp()->getLastFocussedFrame(); if (!pFrame || isCopying()) return UT_OK; if (pFrame) { AV_View * pView = pFrame->getCurrentView(); if (pView) { GR_Graphics * pG = pView->getGraphics(); if (pG && pG->queryProperties(GR_Graphics::DGP_PAPER)) { return UT_OK; } } } //FIXME:FIDENCIO: Remove this clause when Cocoa's dialog is implemented #ifdef TOOLKIT_COCOA return UT_OK; #else /* run the dialog */ XAP_Dialog_Id id = m_iDialogExport; XAP_DialogFactory * pDialogFactory = static_cast<XAP_DialogFactory *> (XAP_App::getApp()->getDialogFactory()); AP_Dialog_EpubExportOptions* pDialog = static_cast<AP_Dialog_EpubExportOptions*> (pDialogFactory->requestDialog(id)); if (pDialog == NULL) { return UT_OK; } pDialog->setEpubExportOptions(&m_exp_opt, XAP_App::getApp()); pDialog->runModal(pFrame); /* extract what they did */ bool bSave = pDialog->shouldSave(); pDialogFactory->releaseDialog(pDialog); if (!bSave) { return UT_SAVE_CANCELLED; } return UT_OK; #endif }
/*! * Draw the frame handles */ void fp_FrameContainer::drawHandles(dg_DrawArgs * pDA) { if(getView() == NULL) { getSectionLayout()->format(); getSectionLayout()->setNeedsReformat(getSectionLayout()); } if(getView() == NULL) { return; } if(!getPage()) { return; } // // Only fill to the bottom of the viewed page. // GR_Graphics * pG = pDA->pG; UT_sint32 iFullHeight = getFullHeight(); fl_DocSectionLayout * pDSL = getDocSectionLayout(); UT_sint32 iMaxHeight = 0; if(!pG->queryProperties(GR_Graphics::DGP_PAPER) && (getView()->getViewMode() != VIEW_PRINT)) { iMaxHeight = pDSL->getActualColumnHeight(); } else { iMaxHeight = getPage()->getHeight(); } UT_sint32 iBot = getFullY()+iFullHeight; if(iBot > iMaxHeight) { iFullHeight = iFullHeight - (iBot-iMaxHeight); } UT_sint32 iXlow = pDA->xoff - m_iXpad; UT_sint32 iYlow = pDA->yoff - m_iYpad; UT_Rect box(iXlow + pDA->pG->tlu(2), iYlow + pDA->pG->tlu(2), getFullWidth() - pDA->pG->tlu(4), iFullHeight - pDA->pG->tlu(4)); getPage()->expandDamageRect(box.left,box.top,box.width,box.height); getView()->drawSelectionBox(box, true); }
/*! * Draw the frame boundaries */ void fp_FrameContainer::drawBoundaries(dg_DrawArgs * pDA) { UT_sint32 iXlow = pDA->xoff - m_iXpad; UT_sint32 iXhigh = iXlow + getFullWidth() ; UT_sint32 iYlow = pDA->yoff - m_iYpad; UT_sint32 iYhigh = iYlow + getFullHeight(); GR_Graphics * pG = pDA->pG; if(getPage()) { getPage()->expandDamageRect(iXlow,iYlow,getFullWidth(),getFullHeight()); // // Only fill to the bottom of the viewed page. // UT_sint32 iFullHeight = getFullHeight(); fl_DocSectionLayout * pDSL = getDocSectionLayout(); UT_sint32 iMaxHeight = 0; if(!pG->queryProperties(GR_Graphics::DGP_PAPER) && (getView()->getViewMode() != VIEW_PRINT)) { iMaxHeight = pDSL->getActualColumnHeight(); } else { iMaxHeight = getPage()->getHeight(); } UT_sint32 iBot = getFullY()+iFullHeight; if(iBot > iMaxHeight) { iFullHeight = iFullHeight - (iBot-iMaxHeight); iYhigh = iFullHeight; } } _drawLine(m_lineTop,iXlow,iYlow,iXhigh,iYlow,pDA->pG); // top _drawLine(m_lineRight,iXhigh,iYlow,iXhigh,iYhigh,pDA->pG); // right _drawLine(m_lineBottom,iXlow,iYhigh,iXhigh,iYhigh,pDA->pG); // bottom _drawLine(m_lineLeft,iXlow,iYlow,iXlow,iYhigh,pDA->pG); // left }
/*! Draw container content \param pDA Draw arguments */ void fp_FrameContainer::draw(dg_DrawArgs* pDA) { FV_View * pView = getView(); UT_return_if_fail( pView); xxx_UT_DEBUGMSG(("FrameContainer %x called, page %x \n",this,getPage())); if(getPage() == NULL) { getSectionLayout()->format(); getSectionLayout()->setNeedsReformat(getSectionLayout()); if(getPage() == NULL) { return; } } if(pView) { if(pView->getFrameEdit()->getFrameEditMode() == FV_FrameEdit_DRAG_EXISTING) { if((pView->getFrameEdit()->getFrameContainer() == this)) { return; } } } // // Only draw the lines in the clipping region. // /* [Somewhere down here is where the logic to only draw the region of the frame which is within the complement of the union of all higher frames needs to be. We need to draw the applicable region of the rectangle we're on, then unify it with (if applicable) the higher union.] <-- Possibly obsolete comment, not sure. I think I might have landed on an alternative solution involving more rearranging of the storage of the FrameContainers, based on their z-index. Not sure how far I got with that or if it worked either. See also abi bug 7664 and the original discussions about defining the undefinedness of layered frame behaviour. */ if(m_bOverWrote) { pDA->bDirtyRunsOnly = false; } dg_DrawArgs da = *pDA; GR_Graphics * pG = da.pG; UT_return_if_fail( pG); UT_sint32 x = pDA->xoff - m_iXpad; UT_sint32 y = pDA->yoff - m_iYpad; getPage()->expandDamageRect(x,y,getFullWidth(),getFullHeight()); if(!pDA->bDirtyRunsOnly || m_bNeverDrawn) { if(m_bNeverDrawn) { pDA->bDirtyRunsOnly= false; } UT_sint32 srcX,srcY; getSectionLayout()->checkGraphicTick(pG); srcX = -m_iXpad; srcY = -m_iYpad; // // Only fill to the bottom of the viewed page. // UT_sint32 iFullHeight = getFullHeight(); fl_DocSectionLayout * pDSL = getDocSectionLayout(); UT_sint32 iMaxHeight = 0; if(!pG->queryProperties(GR_Graphics::DGP_PAPER) && (pView->getViewMode() != VIEW_PRINT)) { iMaxHeight = pDSL->getActualColumnHeight(); } else { iMaxHeight = getPage()->getHeight(); } UT_sint32 iBot = getFullY()+iFullHeight; if(iBot > iMaxHeight) { iFullHeight = iFullHeight - (iBot-iMaxHeight); } getFillType()->Fill(pG,srcX,srcY,x,y,getFullWidth(),iFullHeight); m_bNeverDrawn = false; } UT_uint32 count = countCons(); UT_DEBUGMSG(("Number of containers in frame %d \n",count)); const UT_Rect * pPrevRect = pDA->pG->getClipRect(); UT_Rect * pRect = getScreenRect(); UT_Rect newRect; bool bRemoveRectAfter = false; bool bSetOrigClip = false; bool bSkip = false; if((pPrevRect == NULL) && pG->queryProperties(GR_Graphics::DGP_SCREEN)) { pDA->pG->setClipRect(pRect); UT_DEBUGMSG(("Clip bottom is %d \n",pRect->top + pRect->height)); bRemoveRectAfter = true; } else if(pPrevRect && !pRect->intersectsRect(pPrevRect)) { bSkip = true; xxx_UT_DEBUGMSG(("External Clip bottom is %d \n",pRect->top + pRect->height)); } else if(pPrevRect) { newRect.top = UT_MAX(pPrevRect->top,pRect->top); UT_sint32 iBotPrev = pPrevRect->height + pPrevRect->top; UT_sint32 iBot = pRect->height + pRect->top; newRect.height = UT_MIN(iBotPrev,iBot) - newRect.top; newRect.width = pPrevRect->width; newRect.left = pPrevRect->left; if((newRect.height > 0) && pDA->pG->queryProperties(GR_Graphics::DGP_SCREEN)) { pDA->pG->setClipRect(&newRect); bSetOrigClip = true; } else { bSkip = true; } } if(!bSkip) { for (UT_uint32 i = 0; i<count; i++) { fp_ContainerObject* pContainer = static_cast<fp_ContainerObject*>(getNthCon(i)); da.xoff = pDA->xoff + pContainer->getX(); da.yoff = pDA->yoff + pContainer->getY(); pContainer->draw(&da); } } m_bNeverDrawn = false; m_bOverWrote = false; if(bRemoveRectAfter) { pDA->pG->setClipRect(NULL); } if(bSetOrigClip) { pDA->pG->setClipRect(pPrevRect); } delete pRect; drawBoundaries(pDA); }
void fp_EmbedRun::_draw(dg_DrawArgs* pDA) { GR_Graphics *pG = pDA->pG; #if 0 UT_DEBUGMSG(("Draw with class %x \n",pG)); UT_DEBUGMSG(("Contents of fp EmbedRun \n %s \n",m_sEmbedML.utf8_str())); #endif FV_View* pView = _getView(); UT_return_if_fail(pView); // need to draw to the full height of line to join with line above. UT_sint32 xoff= 0, yoff=0, DA_xoff = pDA->xoff; getLine()->getScreenOffsets(this, xoff, yoff); // need to clear full height of line, in case we had a selection UT_sint32 iFillHeight = getLine()->getHeight(); UT_sint32 iFillTop = pDA->yoff - getLine()->getAscent(); UT_uint32 iSelAnchor = pView->getSelectionAnchor(); UT_uint32 iPoint = pView->getPoint(); UT_uint32 iSel1 = UT_MIN(iSelAnchor, iPoint); UT_uint32 iSel2 = UT_MAX(iSelAnchor, iPoint); UT_ASSERT(iSel1 <= iSel2); UT_uint32 iRunBase = getBlock()->getPosition() + getOffsetFirstVis(); // Fill with background, then redraw. UT_sint32 iLineHeight = getLine()->getHeight(); bool bIsSelected = false; if ( !pG->queryProperties(GR_Graphics::DGP_PAPER) && (isInSelectedTOC() || (iSel1 <= iRunBase && iSel2 > iRunBase)) ) { // Need the painter lock to be released at the end of this block GR_Painter painter(pG); painter.fillRect(_getView()->getColorSelBackground(), /*pDA->xoff*/DA_xoff, iFillTop, getWidth(), iFillHeight); bIsSelected = true; getEmbedManager()->setColor(m_iEmbedUID,_getView()->getColorSelForeground()); } else { Fill(getGraphics(),pDA->xoff, pDA->yoff - getAscent(), getWidth()+getGraphics()->tlu(1), iLineHeight+getGraphics()->tlu(1)); getEmbedManager()->setColor(m_iEmbedUID,getFGColor()); } UT_Rect rec; rec.left = pDA->xoff; rec.top = pDA->yoff; rec.height = getHeight(); rec.width = getWidth(); if(getEmbedManager()->isDefault()) { rec.top -= _getLayoutPropFromObject("ascent"); } UT_DEBUGMSG(("Draw Embed object top %d \n",rec.top)); getEmbedManager()->render(m_iEmbedUID,rec); if(m_bNeedsSnapshot && !getEmbedManager()->isDefault() && getGraphics()->queryProperties(GR_Graphics::DGP_SCREEN) ) { UT_Rect myrec = rec; myrec.top -= getAscent(); if(!bIsSelected) { getEmbedManager()->makeSnapShot(m_iEmbedUID,myrec); m_bNeedsSnapshot = false; } } if(bIsSelected) { UT_Rect myrec = rec; if(!getEmbedManager()->isDefault()) { myrec.top -= getAscent(); } _drawResizeBox(myrec); } }
void fl_FrameLayout::_lookupMarginProperties(const PP_AttrProp* pSectionAP) { UT_return_if_fail(pSectionAP); FV_View * pView = getDocLayout()->getView(); GR_Graphics * pG = getDocLayout()->getGraphics(); UT_return_if_fail( pView && pG ); UT_sint32 iFramePositionTo = m_iFramePositionTo; FL_FrameWrapMode iFrameWrapMode = m_iFrameWrapMode; bool bIsTightWrap = m_bIsTightWrap; UT_sint32 iXpos = m_iXpos; UT_sint32 iYpos = m_iYpos; UT_sint32 iXColumn = m_iXColumn; UT_sint32 iYColumn = m_iYColumn; UT_sint32 iXPage = m_iXPage; UT_sint32 iYPage = m_iYPage; if(pView->getViewMode() == VIEW_NORMAL && !pG->queryProperties(GR_Graphics::DGP_PAPER)) { m_iFramePositionTo = FL_FRAME_POSITIONED_TO_BLOCK; m_iFrameWrapMode = FL_FRAME_WRAPPED_TO_RIGHT; m_bIsTightWrap = false; m_iXpos = 0; m_iYpos = 0; m_iXColumn = 0; m_iYColumn = 0; m_iXPage = 0; m_iYPage = 0; } else { const gchar *pszPositionTo = NULL; const gchar *pszWrapMode = NULL; const gchar *pszXpos = NULL; const gchar *pszYpos = NULL; const gchar *pszColXpos = NULL; const gchar *pszColYpos = NULL; const gchar *pszPageXpos = NULL; const gchar *pszPageYpos = NULL; const gchar * pszTightWrapped = NULL; // Position-to if(!pSectionAP || !pSectionAP->getProperty("position-to",pszPositionTo)) { m_iFramePositionTo = FL_FRAME_POSITIONED_TO_BLOCK; } else if(strcmp(pszPositionTo,"block-above-text") == 0) { m_iFramePositionTo = FL_FRAME_POSITIONED_TO_BLOCK; } else if(strcmp(pszPositionTo,"column-above-text") == 0) { m_iFramePositionTo = FL_FRAME_POSITIONED_TO_COLUMN; } else if(strcmp(pszPositionTo,"page-above-text") == 0) { m_iFramePositionTo = FL_FRAME_POSITIONED_TO_PAGE; } else { UT_DEBUGMSG(("Unknown Position to %s \n",pszPositionTo)); UT_ASSERT(UT_SHOULD_NOT_HAPPEN); m_iFramePositionTo = FL_FRAME_POSITIONED_TO_BLOCK; } // wrap-mode if(!pSectionAP || !pSectionAP->getProperty("wrap-mode",pszWrapMode)) { m_iFrameWrapMode = FL_FRAME_ABOVE_TEXT; } else if(strcmp(pszWrapMode,"above-text") == 0) { m_iFrameWrapMode = FL_FRAME_ABOVE_TEXT; } else if(strcmp(pszWrapMode,"below-text") == 0) { m_iFrameWrapMode = FL_FRAME_BELOW_TEXT; } else if(strcmp(pszWrapMode,"wrapped-to-right") == 0) { m_iFrameWrapMode = FL_FRAME_WRAPPED_TO_RIGHT; } else if(strcmp(pszWrapMode,"wrapped-to-left") == 0) { m_iFrameWrapMode = FL_FRAME_WRAPPED_TO_LEFT; } else if(strcmp(pszWrapMode,"wrapped-both") == 0) { m_iFrameWrapMode = FL_FRAME_WRAPPED_BOTH_SIDES; } else if(strcmp(pszWrapMode,"wrapped-topbot") == 0) { m_iFrameWrapMode = FL_FRAME_WRAPPED_TOPBOT; } else { UT_DEBUGMSG(("Unknown wrap-mode %s \n",pszWrapMode)); UT_ASSERT(UT_SHOULD_NOT_HAPPEN); m_iFrameWrapMode = FL_FRAME_ABOVE_TEXT; } // // Wrap type // if(!pSectionAP || !pSectionAP->getProperty("tight-wrap",pszTightWrapped)) { m_bIsTightWrap = false; } else if(strcmp(pszTightWrapped,"1") == 0) { m_bIsTightWrap = true; } else { m_bIsTightWrap = false; } // Xpos if(!pSectionAP || !pSectionAP->getProperty("xpos",pszXpos)) { m_iXpos = 0; } else { m_iXpos = UT_convertToLogicalUnits(pszXpos); } UT_DEBUGMSG(("xpos for frame is %s \n",pszXpos)); // Ypos if(!pSectionAP || !pSectionAP->getProperty("ypos",pszYpos)) { m_iYpos = 0; } else { m_iYpos = UT_convertToLogicalUnits(pszYpos); } UT_DEBUGMSG(("ypos for frame is %s \n",pszYpos)); // ColXpos if(!pSectionAP || !pSectionAP->getProperty("frame-col-xpos",pszColXpos)) { m_iXColumn = 0; } else { m_iXColumn = UT_convertToLogicalUnits(pszColXpos); } UT_DEBUGMSG(("ColXpos for frame is %s \n",pszColXpos)); // colYpos if(!pSectionAP || !pSectionAP->getProperty("frame-col-ypos",pszColYpos)) { m_iYColumn = 0; } else { m_iYColumn = UT_convertToLogicalUnits(pszColYpos); } UT_DEBUGMSG(("ColYpos for frame is %s units %d \n",pszColYpos,m_iYColumn)); // PageXpos if(!pSectionAP || !pSectionAP->getProperty("frame-page-xpos",pszPageXpos)) { m_iXPage = 0; } else { m_iXPage = UT_convertToLogicalUnits(pszPageXpos); } UT_DEBUGMSG(("PageXpos for frame is %s \n",pszPageXpos)); // PageYpos if(!pSectionAP || !pSectionAP->getProperty("frame-page-ypos",pszPageYpos)) { m_iYPage = 0; } else { m_iYPage = UT_convertToLogicalUnits(pszPageYpos); } UT_DEBUGMSG(("PageYpos for frame is %s units %d \n",pszColYpos,m_iYPage)); } fl_ContainerLayout* pCL = getFirstLayout(); while (pCL) { pCL->lookupMarginProperties(); pCL = pCL->getNext(); } if(iFramePositionTo != m_iFramePositionTo || iFrameWrapMode != m_iFrameWrapMode || bIsTightWrap != m_bIsTightWrap || iXpos != m_iXpos || iYpos != m_iYpos || iXColumn != m_iXColumn || iYColumn != m_iYColumn || iXPage != m_iXPage || iYPage != m_iYPage) { collapse(); } }