📄 kwqfont.cpp
字号:
/*
* Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
* Portions Copyright (c) 2005 Nokia Corporation, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <gdi.h>
#include "KWQFont.h"
#include "KWQExceptions.h"
#include "KWQString.h"
#include "WebCoreTextRendererFactory.h"
#include "WebCoreTextRenderer.h"
QFont::QFont()
: _trait(0)
, _size(12.0)
, _isPrinterFont(false)
, _renderer(0)
{
}
QFont::~QFont()
{
ReleaseRenderer();
}
QFont::QFont( const QFont& font )
: _trait( font._trait )
, _size( font._size )
, _isPrinterFont( font._isPrinterFont )
, _family( font._family )
{
if( font._renderer ){
font._renderer->Ref();
}
_renderer = font._renderer;
}
QFont& QFont::operator= ( const QFont& font )
{
_trait = font._trait;
_size = font._size;
_isPrinterFont = font._isPrinterFont;
_family = font._family;
if( font._renderer ){
font._renderer->Ref();
}
ReleaseRenderer();
_renderer = font._renderer;
return *this;
}
QString QFont::family() const
{
return _family.family().string();
}
void QFont::setFirstFamily(const KWQFontFamily& family)
{
_family = family;
}
void QFont::setFamily(const QString& qfamilyName)
{
_family.setFamily(qfamilyName);
ReleaseRenderer();
}
void QFont::setPixelSize(float s)
{
if (_size != s) {
ReleaseRenderer();
}
_size = s;
}
void QFont::setWeight(int weight)
{
if (weight == Bold) {
if (!(_trait & EWebCoreBoldFontMask)){
ReleaseRenderer();
}
_trait |= EWebCoreBoldFontMask;
} else if (weight == Normal) {
if ((_trait & EWebCoreBoldFontMask)){
ReleaseRenderer();
}
_trait &= ~EWebCoreBoldFontMask;
}
}
void QFont::setPrinterFont(bool isPrinterFont)
{
_isPrinterFont = isPrinterFont;
}
int QFont::weight() const
{
return bold() ? Bold : Normal;
}
void QFont::setItalic(bool flag)
{
if (flag) {
if (!(_trait & EWebCoreItalicFontMask)){
ReleaseRenderer();
}
_trait |= EWebCoreItalicFontMask;
} else {
if ((_trait & EWebCoreItalicFontMask)){
ReleaseRenderer();
}
_trait &= ~EWebCoreItalicFontMask;
}
}
bool QFont::italic() const
{
return _trait & EWebCoreItalicFontMask;
}
bool QFont::bold() const
{
return _trait & EWebCoreBoldFontMask;
}
bool QFont::isFixedPitch()
{
return Renderer()->IsFontFixedPitch();
}
bool QFont::operator == ( const QFont& font ) const
{
return _trait == font._trait &&
_size == font._size &&
_isPrinterFont == font._isPrinterFont &&
_family == font._family &&
_renderer == font._renderer;
}
const CFont *QFont::Font()
{
return Renderer()?Renderer()->Font():0;
}
MWebCoreTextRenderer *QFont::Renderer()
{
if (!_renderer) {
CREATE_FAMILY_ARRAY(*this, families);
_renderer = TWebCoreTextRendererFactory::Factory()->RendererWithFamilies(families, getTraits(), getSize());
if (_renderer)
_renderer->Ref();
}
return _renderer;
}
void QFont::ReleaseRenderer()
{
if( _renderer ){
_renderer->Deref();
_renderer = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -