blob: 9eacc0cf0191618a5f6ec1d458def9a79a3ced96 [file] [log] [blame]
/*
* Copyright (C) 2003 Apple Computer, 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 "config.h"
#import "KWQFont.h"
#import "KWQExceptions.h"
#import "QString.h"
#import "KWQFoundationExtras.h"
#import "WebCoreTextRendererFactory.h"
QFont::QFont()
: _trait(0)
, _size(12.0)
, _isPrinterFont(false)
, _pitch(Unknown)
{
m_webCoreFont.font = nil;
}
QFont::~QFont()
{
KWQRelease(m_webCoreFont.font);
}
QFont::QFont(const QFont &other)
: _family(other._family)
, _trait(other._trait)
, _size(other._size)
, _isPrinterFont(other._isPrinterFont)
, _pitch(other._pitch)
, m_webCoreFont(other.m_webCoreFont)
{
KWQRetain(m_webCoreFont.font);
}
QFont &QFont::operator=(const QFont &other)
{
_family = other._family;
_trait = other._trait;
_size = other._size;
_isPrinterFont = other._isPrinterFont;
_pitch = other._pitch;
KWQRetain(other.m_webCoreFont.font);
KWQRelease(m_webCoreFont.font);
m_webCoreFont = other.m_webCoreFont;
return *this;
}
QString QFont::family() const
{
return _family.family().qstring();
}
void QFont::setFamily(const QString &qfamilyName)
{
_family.setFamily(qfamilyName);
KWQRelease(m_webCoreFont.font);
m_webCoreFont.font = nil;
_pitch = Unknown;
}
void QFont::setFirstFamily(const FontFamily& family)
{
_family = family;
KWQRelease(m_webCoreFont.font);
m_webCoreFont.font = nil;
_pitch = Unknown;
}
void QFont::setPixelSize(float s)
{
if (_size != s) {
KWQRelease(m_webCoreFont.font);
m_webCoreFont.font = nil;
_pitch = Unknown;
}
_size = s;
}
void QFont::setWeight(int weight)
{
if (weight == Bold) {
if (!(_trait & NSBoldFontMask)) {
KWQRelease(m_webCoreFont.font);
m_webCoreFont.font = nil;
_pitch = Unknown;
}
_trait |= NSBoldFontMask;
} else if (weight == Normal) {
if ((_trait & NSBoldFontMask)){
KWQRelease(m_webCoreFont.font);
m_webCoreFont.font = nil;
_pitch = Unknown;
}
_trait &= ~NSBoldFontMask;
}
}
void QFont::setPrinterFont(bool isPrinterFont)
{
_isPrinterFont = isPrinterFont;
}
int QFont::weight() const
{
return bold() ? Bold : Normal;
}
void QFont::setItalic(bool flag)
{
if (flag) {
if (!(_trait & NSItalicFontMask)){
KWQRelease(m_webCoreFont.font);
m_webCoreFont.font = nil;
_pitch = Unknown;
}
_trait |= NSItalicFontMask;
} else {
if ((_trait & NSItalicFontMask)){
KWQRelease(m_webCoreFont.font);
m_webCoreFont.font = nil;
_pitch = Unknown;
}
_trait &= ~NSItalicFontMask;
}
}
bool QFont::italic() const
{
return _trait & NSItalicFontMask;
}
bool QFont::bold() const
{
return _trait & NSBoldFontMask;
}
void QFont::determinePitch() const
{
KWQ_BLOCK_EXCEPTIONS;
if ([[WebCoreTextRendererFactory sharedFactory] isFontFixedPitch:getWebCoreFont()])
_pitch = Fixed;
else
_pitch = Variable;
KWQ_UNBLOCK_EXCEPTIONS;
}
bool QFont::operator==(const QFont &compareFont) const
{
return _family == compareFont._family
&& _trait == compareFont._trait
&& _size == compareFont._size
&& _isPrinterFont == compareFont._isPrinterFont
&& _pitch == compareFont._pitch;
}
const WebCoreFont &QFont::getWebCoreFont() const
{
if (!m_webCoreFont.font) {
CREATE_FAMILY_ARRAY(*this, families);
KWQ_BLOCK_EXCEPTIONS;
m_webCoreFont = [[WebCoreTextRendererFactory sharedFactory]
fontWithFamilies:families traits:getNSTraits() size:getNSSize()];
KWQRetain(m_webCoreFont.font);
m_webCoreFont.forPrinter = _isPrinterFont;
KWQ_UNBLOCK_EXCEPTIONS;
}
return m_webCoreFont;
}