Abiword页面布局
2011-04-26 14:50 netwy 阅读(574) 评论(0) 编辑 收藏 举报
- 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会将空格一直输出到超过每个行最大行宽的位置
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步