ME_Style *ME_ApplyStyle(ME_Style *sSrc, CHARFORMAT2W *style) { CHARFORMAT2W styledata; ME_Style *s = ME_MakeStyle(&sSrc->fmt); style = ME_ToCF2W(&styledata, style); COPY_STYLE_ITEM(CFM_ANIMATION, bAnimation); COPY_STYLE_ITEM(CFM_BACKCOLOR, crBackColor); COPY_STYLE_ITEM(CFM_CHARSET, bCharSet); COPY_STYLE_ITEM(CFM_COLOR, crTextColor); COPY_STYLE_ITEM_MEMCPY(CFM_FACE, szFaceName); COPY_STYLE_ITEM(CFM_KERNING, wKerning); COPY_STYLE_ITEM(CFM_LCID, lcid); COPY_STYLE_ITEM(CFM_OFFSET, yOffset); COPY_STYLE_ITEM(CFM_REVAUTHOR, bRevAuthor); COPY_STYLE_ITEM(CFM_SIZE, yHeight); COPY_STYLE_ITEM(CFM_SPACING, sSpacing); COPY_STYLE_ITEM(CFM_STYLE, sStyle); COPY_STYLE_ITEM(CFM_UNDERLINETYPE, bUnderlineType); COPY_STYLE_ITEM(CFM_WEIGHT, wWeight); s->fmt.dwEffects &= ~(style->dwMask); s->fmt.dwEffects |= style->dwEffects & style->dwMask; s->fmt.dwMask |= style->dwMask; if (style->dwMask & CFM_COLOR) { if (style->dwEffects & CFE_AUTOCOLOR) s->fmt.dwEffects |= CFE_AUTOCOLOR; else s->fmt.dwEffects &= ~CFE_AUTOCOLOR; } return s; }
void ME_MakeFirstParagraph(ME_TextEditor *editor) { ME_Context c; CHARFORMAT2W cf; LOGFONTW lf; HFONT hf; ME_TextBuffer *text = editor->pBuffer; ME_DisplayItem *para = make_para(editor); ME_DisplayItem *run; ME_Style *style; int eol_len; WCHAR cr_lf[] = {'\r','\n',0}; ME_InitContext(&c, editor, ITextHost_TxGetDC(editor->texthost)); hf = GetStockObject(SYSTEM_FONT); assert(hf); GetObjectW(hf, sizeof(LOGFONTW), &lf); ZeroMemory(&cf, sizeof(cf)); cf.cbSize = sizeof(cf); cf.dwMask = CFM_BACKCOLOR|CFM_COLOR|CFM_FACE|CFM_SIZE|CFM_CHARSET; cf.dwMask |= CFM_ALLCAPS|CFM_BOLD|CFM_DISABLED|CFM_EMBOSS|CFM_HIDDEN; cf.dwMask |= CFM_IMPRINT|CFM_ITALIC|CFM_LINK|CFM_OUTLINE|CFM_PROTECTED; cf.dwMask |= CFM_REVISED|CFM_SHADOW|CFM_SMALLCAPS|CFM_STRIKEOUT; cf.dwMask |= CFM_SUBSCRIPT|CFM_UNDERLINETYPE|CFM_WEIGHT; cf.dwEffects = CFE_AUTOCOLOR | CFE_AUTOBACKCOLOR; lstrcpyW(cf.szFaceName, lf.lfFaceName); /* Convert system font height from logical units to twips for cf.yHeight */ cf.yHeight = (lf.lfHeight * 72 * 1440) / (c.dpi.cy * c.dpi.cy); if (lf.lfWeight > FW_NORMAL) cf.dwEffects |= CFE_BOLD; cf.wWeight = lf.lfWeight; if (lf.lfItalic) cf.dwEffects |= CFE_ITALIC; cf.bUnderlineType = (lf.lfUnderline) ? CFU_CF1UNDERLINE : CFU_UNDERLINENONE; if (lf.lfStrikeOut) cf.dwEffects |= CFE_STRIKEOUT; cf.bPitchAndFamily = lf.lfPitchAndFamily; cf.bCharSet = lf.lfCharSet; style = ME_MakeStyle(&cf); text->pDefaultStyle = style; eol_len = editor->bEmulateVersion10 ? 2 : 1; para->member.para.text = ME_MakeStringN( cr_lf, eol_len ); run = ME_MakeRun(style, MERF_ENDPARA); run->member.run.nCharOfs = 0; run->member.run.len = eol_len; run->member.run.para = ¶->member.para; ME_InsertBefore(text->pLast, para); ME_InsertBefore(text->pLast, run); para->member.para.prev_para = text->pFirst; para->member.para.next_para = text->pLast; text->pFirst->member.para.next_para = para; text->pLast->member.para.prev_para = para; text->pLast->member.para.nCharOfs = editor->bEmulateVersion10 ? 2 : 1; ME_DestroyContext(&c); }
ME_Style *ME_ApplyStyle(ME_Style *sSrc, CHARFORMAT2W *style) { ME_Style *s = ME_MakeStyle(&sSrc->fmt); assert(style->cbSize == sizeof(CHARFORMAT2W)); COPY_STYLE_ITEM(CFM_ANIMATION, bAnimation); COPY_STYLE_ITEM(CFM_BACKCOLOR, crBackColor); COPY_STYLE_ITEM(CFM_CHARSET, bCharSet); COPY_STYLE_ITEM(CFM_COLOR, crTextColor); COPY_STYLE_ITEM_MEMCPY(CFM_FACE, szFaceName); COPY_STYLE_ITEM(CFM_KERNING, wKerning); COPY_STYLE_ITEM(CFM_LCID, lcid); COPY_STYLE_ITEM(CFM_OFFSET, yOffset); COPY_STYLE_ITEM(CFM_REVAUTHOR, bRevAuthor); if (style->dwMask & CFM_SIZE) { s->fmt.dwMask |= CFM_SIZE; s->fmt.yHeight = min(style->yHeight, yHeightCharPtsMost * 20); } COPY_STYLE_ITEM(CFM_SPACING, sSpacing); COPY_STYLE_ITEM(CFM_STYLE, sStyle); COPY_STYLE_ITEM(CFM_UNDERLINETYPE, bUnderlineType); COPY_STYLE_ITEM(CFM_WEIGHT, wWeight); /* FIXME: this is not documented this way, but that's the more logical */ COPY_STYLE_ITEM(CFM_FACE, bPitchAndFamily); s->fmt.dwEffects &= ~(style->dwMask); s->fmt.dwEffects |= style->dwEffects & style->dwMask; s->fmt.dwMask |= style->dwMask; if (style->dwMask & CFM_COLOR) { if (style->dwEffects & CFE_AUTOCOLOR) s->fmt.dwEffects |= CFE_AUTOCOLOR; else s->fmt.dwEffects &= ~CFE_AUTOCOLOR; } if (style->dwMask & CFM_UNDERLINE) { s->fmt.dwMask |= CFM_UNDERLINETYPE; s->fmt.bUnderlineType = (style->dwEffects & CFM_UNDERLINE) ? CFU_CF1UNDERLINE : CFU_UNDERLINENONE; } if (style->dwMask & CFM_BOLD && !(style->dwMask & CFM_WEIGHT)) { s->fmt.wWeight = (style->dwEffects & CFE_BOLD) ? FW_BOLD : FW_NORMAL; } else if (style->dwMask & CFM_WEIGHT && !(style->dwMask & CFM_BOLD)) { if (style->wWeight > FW_NORMAL) s->fmt.dwEffects |= CFE_BOLD; else s->fmt.dwEffects &= ~CFE_BOLD; } return s; }
ME_Style *ME_ApplyStyle(ME_Style *sSrc, CHARFORMAT2W *style) { CHARFORMAT2W styledata; ME_Style *s = ME_MakeStyle(&sSrc->fmt); style = ME_ToCF2W(&styledata, style); COPY_STYLE_ITEM(CFM_ANIMATION, bAnimation); COPY_STYLE_ITEM(CFM_BACKCOLOR, crBackColor); COPY_STYLE_ITEM(CFM_CHARSET, bCharSet); COPY_STYLE_ITEM(CFM_COLOR, crTextColor); COPY_STYLE_ITEM_MEMCPY(CFM_FACE, szFaceName); COPY_STYLE_ITEM(CFM_KERNING, wKerning); COPY_STYLE_ITEM(CFM_LCID, lcid); COPY_STYLE_ITEM(CFM_OFFSET, yOffset); COPY_STYLE_ITEM(CFM_REVAUTHOR, bRevAuthor); COPY_STYLE_ITEM(CFM_SIZE, yHeight); COPY_STYLE_ITEM(CFM_SPACING, sSpacing); COPY_STYLE_ITEM(CFM_STYLE, sStyle); COPY_STYLE_ITEM(CFM_UNDERLINETYPE, bUnderlineType); COPY_STYLE_ITEM(CFM_WEIGHT, wWeight); /* FIXME: this is not documented this way, but that's the more logical */ COPY_STYLE_ITEM(CFM_FACE, bPitchAndFamily); s->fmt.dwEffects &= ~(style->dwMask); s->fmt.dwEffects |= style->dwEffects & style->dwMask; s->fmt.dwMask |= style->dwMask; if (style->dwMask & CFM_COLOR) { if (style->dwEffects & CFE_AUTOCOLOR) s->fmt.dwEffects |= CFE_AUTOCOLOR; else s->fmt.dwEffects &= ~CFE_AUTOCOLOR; } if (style->dwMask & CFM_UNDERLINE) { s->fmt.dwMask |= CFM_UNDERLINETYPE; s->fmt.bUnderlineType = (style->dwEffects & CFM_UNDERLINE) ? CFU_CF1UNDERLINE : CFU_UNDERLINENONE; } return s; }