Qt-4.8 WebKit + QtWebKit-2.3.x上CSS3 Web Fonts支持的一些记录

  Chrome 37 Firefox 32 IE 8
TTF(TrueType)
OTF(OpenType)
WOFF
SVG
local()
EOT
WOFF 2.0

TTF/OTF格式的字体文件属于Web Fonts默认支持的;

WOFF需要开启一个条件宏,也没什么问题

EOT是IE专用的

SVG需要启用ENABLE(SVG_FONTS),问题是最终链接时报错:

g++ -fuse-ld=gold -Wl,--gc-sections -Wl,--no-undefined -Wl,-O1 -Wl,-rpath,/home/cteng/qt48/WebKitBuild/Release/lib -Wl,-rpath,/opt/browser13/qt/lib -o ../../bin/QtTestBrowser obj/release/QtInitializeTestFonts.o obj/release/locationedit.o
obj/release/launcherwindow.o obj/release/main.o obj/release/mainwindow.o obj/release/urlloader.o obj/release/utils.o obj/release/webpage.o obj/release/webview.o obj/release/fpstimer.o obj/release/cookiejar.o obj/release/moc_locationedit.o obj/release/moc_launcherwindow.o
obj/release/moc_mainwindow.o obj/release/moc_urlloader.o obj/release/moc_webinspector.o obj/release/moc_webpage.o obj/release/moc_webview.o obj/release/moc_fpstimer.o obj/release/moc_cookiejar.o obj/release/qrc_QtTestBrowser.o -L/home/cteng/qt48/WebKitBuild/Release/lib
-L/opt/browser13/qt/plugins/platforms -L/opt/browser13/qt/plugins/generic -L/opt/browser13/qt/lib -L/usr/X11R6/lib -lQtWebKit -lgio-2.0 -lgstapp-0.10 -lgstpbutils-0.10 -lgstvideo-0.10 -lgstaudio-0.10 -lgstbase-0.10 -lgstinterfaces-0.10 -pthread -lgstfft-0.10
-lm -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lxml2 -lglib-2.0 -lQtSql -L/opt/browser13/qt/lib -lQtXmlPatterns -lQtOpenGL -L/usr/lib/i386-linux-gnu -lQtGui -lQtNetwork -lQtCore -lGLESv2 -lpthread

/home/cteng/qt48/WebKitBuild/Release/lib/libQtWebKit.so: undefined reference to `WebCore::GlyphPageTreeNode::getRoot(unsigned int)‘

/home/cteng/qt48/WebKitBuild/Release/lib/libQtWebKit.so: undefined reference to `WebCore::GlyphPageTreeNode::getChild(WebCore::FontData const*, unsigned int)‘

/home/cteng/qt48/WebKitBuild/Release/lib/libQtWebKit.so: undefined reference to `WebCore::WidthIterator::WidthIterator(WebCore::Font const*, WebCore::TextRun const&, WTF::HashSet<WebCore::SimpleFontData const*, WTF::PtrHash<WebCore::SimpleFontData const*>,
WTF::HashTraits<WebCore::SimpleFontData const*> >*, bool, bool)‘

/home/cteng/qt48/WebKitBuild/Release/lib/libQtWebKit.so: undefined reference to `WebCore::Font::glyphDataForCharacter(unsigned int, bool, WebCore::FontDataVariant) const‘

/home/cteng/qt48/WebKitBuild/Release/lib/libQtWebKit.so: undefined reference to `WebCore::SurrogatePairAwareTextIterator::SurrogatePairAwareTextIterator(unsigned short const*, int, int, int)‘

/home/cteng/qt48/WebKitBuild/Release/lib/libQtWebKit.so: undefined reference to `WebCore::WidthIterator::advance(int, WebCore::GlyphBuffer*)‘

/home/cteng/qt48/WebKitBuild/Release/lib/libQtWebKit.so: undefined reference to `WebCore::SimpleFontData::widthForGlyph(unsigned short) const‘

/home/cteng/qt48/WebKitBuild/Release/lib/libQtWebKit.so: undefined reference to `WebCore::Font::glyphDataAndPageForCharacter(unsigned int, bool, WebCore::FontDataVariant) const‘

/home/cteng/qt48/WebKitBuild/Release/lib/libQtWebKit.so: undefined reference to `WebCore::SurrogatePairAwareTextIterator::advance(unsigned int)‘

/home/cteng/qt48/WebKitBuild/Release/lib/libQtWebKit.so: undefined reference to `WebCore::SurrogatePairAwareTextIterator::consume(unsigned int&, unsigned int&)‘

进一步调查发现,函数依赖于QRawFont特性,而这个特性在qt-4.8上不支持:

#if !(PLATFORM(QT) && !HAVE(QRAWFONT))

ALWAYS_INLINE FloatRect SimpleFontData::boundsForGlyph(Glyph glyph) const

{

if (isZeroWidthSpaceGlyph(glyph))

return FloatRect();

FloatRect bounds;

if (m_glyphToBoundsMap) {

bounds = m_glyphToBoundsMap->metricsForGlyph(glyph);

if (bounds.width() != cGlyphSizeUnknown)

return bounds;

}

bounds = platformBoundsForGlyph(glyph);

if (!m_glyphToBoundsMap)

m_glyphToBoundsMap = adoptPtr(new GlyphMetricsMap<FloatRect>);

m_glyphToBoundsMap->setMetricsForGlyph(glyph, bounds);

return bounds;

}

ALWAYS_INLINE float
SimpleFontData::widthForGlyph
(Glyph glyph) const

{

if (isZeroWidthSpaceGlyph(glyph))

return 0;

float width = m_glyphToWidthMap.metricsForGlyph(glyph);

if (width != cGlyphSizeUnknown)

return width;

if (m_fontData)

width = m_fontData->widthForSVGGlyph(glyph, m_platformData.size());

#if ENABLE(OPENTYPE_VERTICAL)

else if (m_verticalData)

#if USE(CG) || USE(CAIRO) || PLATFORM(WX) || USE(SKIA_ON_MAC_CHROMIUM)

width = m_verticalData->advanceHeight(this, glyph) + m_syntheticBoldOffset;

#else

width = m_verticalData->advanceHeight(this, glyph);

#endif

#endif

else

width = platformWidthForGlyph(glyph);

m_glyphToWidthMap.setMetricsForGlyph(glyph, width);

return width;

}

#endif // HAVE(QRAWFONT)

时间: 2024-08-02 09:54:00

Qt-4.8 WebKit + QtWebKit-2.3.x上CSS3 Web Fonts支持的一些记录的相关文章

4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(

 新建项目13IO 13IO.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets network CONFIG += C++11 MyWidget.h #ifndef MYWIDGET_H #define MYWIDGET_H   #include <QWidget>   class MyWidget : public QWidget {     Q_OBJECT public:     expli

Qt Creator远程调试嵌入式ARM开发板上的Linux程序

背景 gdb的使用对于嵌入式开发人员来说是一项不可少的技能,远程调试对于 asd https://blog.csdn.net/baidu_31381143/article/details/53868924 原文地址:https://www.cnblogs.com/schips/p/12103765.html

利用WebView API来做一个自己的浏览器

我们可以看到在Ubuntu SDK中有一个自己的WebView.它没有采用Qt标准的Webkit库.在Ubuntu上,我们对下面的引擎做了很多的优化(oxide引擎),这样使得我们的WebView性能更加优越. 下面我们通过一个例子来设计出一个简单的Browser. import QtQuick 2.0 import Ubuntu.Components 1.1 import Ubuntu.Web 0.2 import QtQuick.Layouts 1.1 /*! \brief MainView

移动端touch事件的使用

一.支持webkit的touch事件 pc上的web页面鼠标会产生 iphone.ipod  Touch.ipad上的web页面触屏时会产生ontouchstart.ontouchmove.ontouchend.ontouchcancel 事件,分别对应了触屏开始.拖拽及完成触屏事件和取消. 1.touchstart--当手指触碰屏幕时候发生.不管当前有多少只手指 2.touchmove--当手指在屏幕上滑动时连续触发.通常我们再滑屏页面,会调用event的preventDefault()可以阻

Qt webkit插件相关知识

1.在Qt中使用 WebKit 浏览器核心 使用 QtWebKit 需要在工程文件(*.pro)中加入:1.           QT +=webkit  2.           QT += network  2.QtWebKit的flash支持 QtWebKit 到固定的路径(NPAPI插件厂商的安装路径)下载入flash控件,如果需要flash支持,确保一下文件存在:1.           C:\WINDOWS\system32\Macromed\Flash\NPSWF32.dll  n

设置qt插件路径

1.在Qt中使用 WebKit 浏览器核心 使用 QtWebKit 需要在工程文件(*.pro)中加入: QT +=webkitQT += network 2.QtWebKit的flash支持 QtWebKit 到固定的路径(NPAPI插件厂商的安装路径)下载入flash控件,如果需要flash支持,确保一下文件存在: C:\WINDOWS\system32\Macromed\Flash\NPSWF32.dll npswf32.dll就是 QtWebKit 需要的flash插件,由 microm

Qt在各平台上的搭建qt-everywhere

Qt for windows7-64bit 在电脑上安装mingw(搜索mingw for windows),将C:\MinGW\bin添加进环境变量,打开命令行输入gcc --version和g++ --version和mingw32-make --version验证安装成功 解压qt-everywhere-opensource-src-4.8.1.tar.gz并进入目录 configure -debug-and-release -opensource -platform win32-g++

QT嵌入式平台配置

Qt5 on ARM platforms - IntroductionQt5 ARM 平台移植#################################################### Introduction: This short post covers the background of Qt5, architec tural details, configuring for eglfs with Graphics drivers, building, and known i

Qtwebkit初学例子(附代码)

WebKit 是一个开源的浏览器引擎,与之相应的引擎有Gecko(Mozilla Firefox 等使用的排版引擎)和Trident(也称为MSHTML,IE 使用的排版引擎).同时WebKit 也是苹果Mac OS X 系统引擎框架版本的名称,主要用于Safari,Dashboard,Mail 和其他一些Mac OS X 程序.WebKit 所包含的 WebCore 排版引擎和 JSCore 引擎来自于 KDE 的 KHTML 和 KJS,当年苹果比较了 Gecko 和 KHTML 后,仍然选