n mSize property in fontproxy: like em for css

This commit is contained in:
Marco Martin 2011-11-02 21:38:44 +01:00
parent 41bd519f43
commit 3accb9baf5
3 changed files with 98 additions and 0 deletions

View File

@ -64,6 +64,8 @@ FontProxy::FontProxy(Plasma::Theme::FontRole role, QObject *parent)
this, SIGNAL(weightChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(wordSpacingChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(mSizeChanged()));
}
FontProxy::~FontProxy()
@ -140,6 +142,10 @@ qreal FontProxy::wordSpacing() const
return Plasma::Theme::defaultTheme()->font(m_fontRole).wordSpacing();
}
QSize FontProxy::mSize() const
{
return QFontMetrics(Plasma::Theme::defaultTheme()->font(m_fontRole)).boundingRect("M").size();
}
//********** Theme *************

View File

@ -41,6 +41,7 @@ class FontProxy : public QObject
Q_PROPERTY(bool underline READ underline NOTIFY underlineChanged )
Q_PROPERTY(Weight weight READ weight NOTIFY weightChanged )
Q_PROPERTY(qreal wordSpacing READ wordSpacing NOTIFY wordSpacingChanged )
Q_PROPERTY(QSize mSize READ mSize NOTIFY mSizeChanged )
Q_ENUMS(Capitalization)
Q_ENUMS(Weight)
@ -80,6 +81,11 @@ public:
Weight weight() const;
qreal wordSpacing() const;
/**
* @return The size of an uppercase M in this font
*/
QSize mSize() const;
Q_SIGNALS:
void boldChanged();
void capitalizationChanged();
@ -92,6 +98,7 @@ Q_SIGNALS:
void underlineChanged();
void weightChanged();
void wordSpacingChanged();
void mSizeChanged();
private:
Plasma::Theme::FontRole m_fontRole;

View File

@ -0,0 +1,85 @@
/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the Qt Components project.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * 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.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "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 THE COPYRIGHT
** OWNER 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."
** $QT_END_LICENSE$
**
****************************************************************************/
function rootObject() {
var next = parent
while (next && next.parent)
next = next.parent
return next
}
function findParent(child, propertyName) {
if (!child)
return null
var next = child.parent
while (next && !next.hasOwnProperty(propertyName))
next = next.parent
return next
}
function sceneX(item) {
// Binding may cause that this function is evaluated even when item is undefined,
// but in that case the Binding isn't active however so we can safely return 0
var x = 0
if (item) {
x = item.x
var p = item.parent
while (p) {
x += p.x
p = p.parent
}
}
return x
}
function sceneY(item) {
// Binding may cause that this function is evaluated even when item is undefined,
// but in that case the Binding isn't active however so we can safely return 0
var y = 0
if (item) {
y = item.y
var p = item.parent
while (p) {
y += p.y
p = p.parent
}
}
return y
}