//add icons according to the icon list mode void addIconsByListMode(const ICONLIST_MODE iListMode) { addIcon( iconID_pen );//normal //to keep the icons order. if( ICONLIST_UNFLDSIZE==iListMode ) { addIcons(s_PenList[LIST_INDEX_ICONLOW], ARRAYSIZE(s_PenList[LIST_INDEX_ICONLOW])); } else { addIcon( getIconfromPenSize(getPenSize(), LIST_INDEX_ICON) ); } if( ICONLIST_UNFLDCOLOR==iListMode ) { addIcons(s_ColorList[LIST_INDEX_ICONLOW], ARRAYSIZE(s_ColorList[LIST_INDEX_ICONLOW])); } else { addIcon( getIconfromPenColor(getPenColor(), LIST_INDEX_ICON) ); } addIcons(s_InitIcons,ARRAYSIZE(s_InitIcons)); //always disable keyboard and tagging currently disableIcon(iconID_keyboard); disableIcon(iconID_tagging); }
void SelectionRectGraphicsWidget::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget /*= 0 */ ) { QColor basecolor(getBaseColor()); QPen pen(getPenColor()); pen.setWidth(0); painter->setPen(pen); basecolor.setAlphaF(0.2); painter->setBrush(basecolor); painter->drawRect(mapRectFromParent(geometry())); }
//draw icons and set status by current mode. void drawIconsByMode(int iTotalPage) { // freeze toolbar tbDisableUpdate(toolbarChannel, ER_SCRIBBLE_UA_ID); // clear the toolbar tbClearIconSet(toolbarChannel, ER_SCRIBBLE_UA_ID); switch ( getOperationMode() ) { case MODE_INVALID: addIconsByListMode(ICONS_FLDALL); break; case MODE_DRAW: addIconsByListMode(ICONS_FLDALL); activeIcon( iconID_pen ); break; case MODE_SELSIZE: addIconsByListMode(ICONLIST_UNFLDSIZE); activeIcon( getIconfromPenSize(getPenSize(), LIST_INDEX_ICONLOW) ); activeIcon( iconID_pen ); break; case MODE_SELCOLOR: addIconsByListMode(ICONLIST_UNFLDCOLOR); activeIcon( getIconfromPenColor(getPenColor(), LIST_INDEX_ICONLOW) ); activeIcon( iconID_pen ); break; case MODE_ERASE: addIconsByListMode(ICONS_FLDALL); activeIcon( iconID_eraseline ); break; case MODE_DELPAGE: addIconsByListMode(ICONS_FLDALL); activeIcon( iconID_trashcan ); break; default: SB_ERRORPRINTF("Error Mode[%d]\n", getOperationMode()); return; } if( iTotalPage<=1 ) { disableIcon(iconID_trashcan); } // redraw toolbar now tbEnableUpdate(toolbarChannel, ER_SCRIBBLE_UA_ID); }
/* make_html_label: * Return non-zero if problem parsing HTML. In this case, use object name. */ int make_html_label(graph_t *g, textlabel_t * lp, void *obj) { int rv; int wd2, ht2; box box; htmllabel_t *lbl; htmlenv_t env; env.obj = obj; switch (agobjkind(obj)) { case AGGRAPH: env.g = ((Agraph_t *) obj)->root; break; case AGNODE: env.g = ((Agnode_t *) obj)->graph; break; case AGEDGE: env.g = ((Agedge_t *) obj)->head->graph; break; } env.finfo.size = lp->fontsize; env.finfo.name = lp->fontname; env.finfo.color = lp->fontcolor; lbl = parseHTML(lp->text, &rv, GD_charset(env.g)); if (!lbl) { /* Parse of label failed; revert to simple text label */ agxbuf xb; unsigned char buf[SMALLBUF]; agxbinit(&xb, SMALLBUF, buf); lp->html = FALSE; lp->text = strdup(nameOf(obj, &xb)); size_label(env.g, lp); agxbfree(&xb); return rv; } if (lbl->kind == HTML_TBL) { lbl->u.tbl->data.pencolor = getPenColor(obj); rv |= size_html_tbl(g, lbl->u.tbl, NULL, &env); wd2 = (lbl->u.tbl->data.box.UR.x + 1) / 2; ht2 = (lbl->u.tbl->data.box.UR.y + 1) / 2; box = boxof(-wd2, -ht2, wd2, ht2); pos_html_tbl(lbl->u.tbl, box, BOTTOM | RIGHT | TOP | LEFT); lp->dimen.x = box.UR.x - box.LL.x; lp->dimen.y = box.UR.y - box.LL.y; } else { rv |= size_html_txt(g, lbl->u.txt, &env); wd2 = (lbl->u.txt->box.UR.x + 1) / 2; ht2 = (lbl->u.txt->box.UR.y + 1) / 2; box = boxof(-wd2, -ht2, wd2, ht2); lbl->u.txt->box = box; lp->dimen.x = box.UR.x - box.LL.x; lp->dimen.y = box.UR.y - box.LL.y; } lp->u.html = lbl; /* If the label is a table, replace label text because this may * be used for the title and alt fields in image maps. */ if (lbl->kind == HTML_TBL) { free (lp->text); lp->text = strdup ("<TABLE>"); } return rv; }
/* make_html_label: * Return non-zero if problem parsing HTML. In this case, use object name. */ int make_html_label(void *obj, textlabel_t * lp) { int rv; double wd2, ht2; boxf box; graph_t *g; htmllabel_t *lbl; htmlenv_t env; char *s; env.obj = obj; switch (agobjkind(obj)) { #ifdef WITH_CGRAPH case AGRAPH: #else case AGGRAPH: #endif env.g = ((Agraph_t *) obj)->root; break; case AGNODE: env.g = agraphof(((Agnode_t *) obj)); break; case AGEDGE: env.g = agraphof(aghead (((Agedge_t *) obj))); break; } g = env.g->root; env.finfo.size = lp->fontsize; env.finfo.name = lp->fontname; env.finfo.color = lp->fontcolor; lbl = parseHTML(lp->text, &rv, GD_charset(env.g)); if (!lbl) { /* Parse of label failed; revert to simple text label */ agxbuf xb; unsigned char buf[SMALLBUF]; agxbinit(&xb, SMALLBUF, buf); lp->html = FALSE; lp->text = strdup(nameOf(obj, &xb)); switch (lp->charset) { case CHAR_LATIN1: s = latin1ToUTF8(lp->text); break; default: /* UTF8 */ s = htmlEntityUTF8(lp->text, env.g); break; } free(lp->text); lp->text = s; make_simple_label(g, lp); agxbfree(&xb); return rv; } if (lbl->kind == HTML_TBL) { if (! lbl->u.tbl->data.pencolor && getPenColor(obj)) lbl->u.tbl->data.pencolor = strdup(getPenColor(obj)); rv |= size_html_tbl(g, lbl->u.tbl, NULL, &env); wd2 = (lbl->u.tbl->data.box.UR.x + 1) / 2; ht2 = (lbl->u.tbl->data.box.UR.y + 1) / 2; box = boxfof(-wd2, -ht2, wd2, ht2); pos_html_tbl(lbl->u.tbl, box, BOTTOM | RIGHT | TOP | LEFT); lp->dimen.x = box.UR.x - box.LL.x; lp->dimen.y = box.UR.y - box.LL.y; } else { rv |= size_html_txt(g, lbl->u.txt, &env); wd2 = (lbl->u.txt->box.UR.x + 1) / 2; ht2 = (lbl->u.txt->box.UR.y + 1) / 2; box = boxfof(-wd2, -ht2, wd2, ht2); lbl->u.txt->box = box; lp->dimen.x = box.UR.x - box.LL.x; lp->dimen.y = box.UR.y - box.LL.y; } lp->u.html = lbl; /* If the label is a table, replace label text because this may * be used for the title and alt fields in image maps. */ if (lbl->kind == HTML_TBL) { free (lp->text); lp->text = strdup ("<TABLE>"); } return rv; }
void toolbar_key_selected(int iconID, int iconState,PScribbleUICtx pScribbleUICtx) { if( iconState_grey==iconState ) { return;//donothing. } SB_IPCPRINTF("\n====iconID=%d[mode=%d,pensize=%d,color=%d]\n", iconID,getOperationMode(),getPenSize(),getPenColor()); gboolean bNeedFlushWithFullQlt=FALSE; //need full update when return from erase mode. if( getOperationMode()== MODE_ERASE) { //every erase stroke ,we do it, so it's useless //core_redrawBgAndStrks(pScribbleUICtx); bNeedFlushWithFullQlt=TRUE; } //we should add deal to pageup/pagedown switch (iconID) { case iconID_pen: //we switch by whether or not user is drawing if( !toolbar_is_drawing() ) { setOperationMode(MODE_DRAW); } else { setOperationMode(MODE_INVALID); } break; case iconID_pen1pixel: case iconID_pen3pixel: case iconID_pen5pixel: case iconID_pen7pixel: //enter select mode setOperationMode(MODE_SELSIZE); break; case iconID_pen1pixelLow: case iconID_pen3pixelLow: case iconID_pen5pixelLow: case iconID_pen7pixelLow: //confirm the select setPenSize(getPenSizefromIcon(iconID)); setOperationMode(MODE_DRAW); break; case iconID_penwhite://WHITE case iconID_penlightgrey://LIGHT_GRAY case iconID_pendarkgrey://DARK_GRAY case iconID_penblack://BLACK //enter select mode setOperationMode(MODE_SELCOLOR); break; case iconID_penwhiteLow://WHITE case iconID_penlightgreyLow://LIGHT_GRAY case iconID_pendarkgreyLow://DARK_GRAY case iconID_penblackLow://BLACK //confirm the select setPenColor(getPenColorfromIcon(iconID)); setOperationMode(MODE_DRAW); break; case iconID_eraseline: if( MODE_ERASE==getOperationMode()) { setOperationMode(MODE_DRAW); } else { setOperationMode(MODE_ERASE); } break; case iconID_trashcan://delete page if(MODE_DELPAGE==getOperationMode()) { setOperationMode(MODE_DRAW); if(ispagedel_confirmed) { //delete page delOnepage(pScribbleUICtx); ispagedel_confirmed=FALSE; return;//tool bar will be updated when jumping } ispagedel_confirmed=FALSE; } else { SB_IPCPRINTF("enter MODE_DELPAGE\n"); setOperationMode(MODE_DELPAGE); ispagedel_confirmed=FALSE; } break; case iconID_npage: addOnepage(pScribbleUICtx); return;//tool bar will be updated when jumping default: SB_IPCPRINTF("Unknown iconID [%d]\n", iconID); return; } drawIconsByMode(getTotalPage(&pScribbleUICtx->fileManager)); //flush the pixmap to gdk_buffer,but now every stroke is flush,so it's useless. //flushPixMap(pScribbleUICtx); if(bNeedFlushWithFullQlt) { display_update_request_screen_refresh (MAIN_WINDOW_EXPOSE_LEVEL,(gpointer)dmQFull); } else { display_update_request_screen_refresh (MAIN_WINDOW_EXPOSE_LEVEL,(gpointer)dmQTyping); } SB_IPCPRINTF("\n===end===[mode=%d,pensize=%d,color=%d]\n", getOperationMode(),getPenSize(),getPenColor()); return; }