Abiword页面布局
- AP_Win32FrameImpl::_DocumentWndProc 文档窗口过程函数
在WM_SIZE消息中设置FV_View对象的整体尺寸,跟窗体的:设备单位 转换成:布局单位。m_iWindowWidth = 19695,m_iWindowHeight= 8520
设备单位和布局单位的比例是:1:15。
在设置尺寸是会根据文档窗体的实际尺寸利用下面的公式转换:
m_iWindowWidth = 实际窗体尺寸*1440*100/96*100
1440 是:#define UT_LAYOUT_RESOLUTION 1440,是版面设计的分辨率,在ut_units.cpp的单位转换函数中用到。
100 是固定的值;
96 是:利用GetDeviceCaps函数得到 LOGPIXELSX:沿屏幕宽度每逻辑英寸的像素数;
100是:视图的显示比例
在WM_PAINT中绘制FV_View,FV_View::_draw
#define fl_PAGEVIEW_PAGE_SEP m_pG->tlu(20) // must be <= MARGIN_Y 页面之间的边距
#define fl_PAGEVIEW_MARGIN_X m_pG->tlu(100) //左外边距 1500
#define fl_PAGEVIEW_MARGIN_Y m_pG->tlu(25) //上外边距 375
右外边距(6290) = m_iWindowWidth - fp_Page.Width
- 对于fp_Page类利用fp_PageSize类设置页面的尺寸。默认是A4纸(210,297),转换后的尺寸是(11905,16837)
对每个Page调用fp_Page::draw绘制各个页。在fp_Page::_reformatColumns函数中计算每页的列宽。每个页得左右内边距是:1440 ,上下内边距是:1440,
列宽是:9025
页边距在fl_DocSectionLayout::_lookupProperties函数中设置。默认边距是:2.54cm。
1 Inch = 2.54 Centimeters ,1 cm = 0.4 in
fp_Line::setContainer设置每一行的宽等属性
- fp_Line,fp_Line::recalcHeight函数计算每一行的高度
iNewHeight = static_cast<UT_sint32>(iNewHeight * dLineSpace +50);// wfw edit 0.5 改为 50
dLineSpace 段落设置的中的行距,系统默认是单倍行距,现在改为1.5倍行距
- fp_TextRun::_draw
UT_sint32 yTopOfRun = pDA->yoff - getAscent() + (getDescent()/2);// wfw edit,加上 getDescent()/2
- fb_LineBreaker类
fb_LineBreaker encapsulates knowledge of how to break runs across lines.
It also breaks them between words, to help with later justification.
其中针对行尾是空格的情况做了改动,原来的程序存在bug会将空格一直输出到超过每个行最大行宽的位置