Skip to content

Commit

Permalink
Land the new "NSView-less" buttons. With this landing both
Browse files Browse the repository at this point in the history
	<input type=button> and <button> will now look like OS X-style
	widgets.  Customization of background and border is not yet
	enabled, but this is still a big improvement over the old
	AppKit widgets.

        Reviewed by mjs

        * ForwardingHeaders/qpushbutton.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * khtml/css/cssstyleselector.cpp:
        (khtml::CSSStyleSelector::adjustRenderStyle):
        * khtml/css/cssstyleselector.h:
        (khtml::CSSStyleSelector::paintMetrics):
        * khtml/css/cssvalues.in:
        * khtml/css/html4.css:
        * khtml/html/html_formimpl.cpp:
        (DOM::HTMLButtonElementImpl::createRenderer):
        (DOM::HTMLInputElementImpl::click):
        (DOM::HTMLInputElementImpl::createRenderer):
        * khtml/html/html_formimpl.h:
        (DOM::HTMLInputElementImpl::isTextButton):
        * khtml/rendering/render_button.cpp: Added.
        (khtml::m_inner):
        (khtml::RenderButton::~RenderButton):
        (khtml::RenderButton::addChild):
        (khtml::RenderButton::removeChild):
        (khtml::RenderButton::setStyle):
        (khtml::RenderButton::updateFromElement):
        * khtml/rendering/render_button.h: Added.
        (khtml::RenderButton::removeLeftoverAnonymousBoxes):
        (khtml::RenderButton::renderName):
        * khtml/rendering/render_form.cpp:
        * khtml/rendering/render_form.h:
        (khtml::RenderFileButton::calcReplacedHeight):
        (khtml::RenderFileButton::isEditable):
        * khtml/rendering/render_style.h:
        (khtml::):
        * khtml/rendering/render_theme.cpp:
        (khtml::RenderTheme::adjustStyle):
        (khtml::RenderTheme::paint):
        (khtml::RenderTheme::adjustCheckboxStyle):
        (khtml::RenderTheme::adjustRadioStyle):
        (khtml::RenderTheme::adjustButtonStyle):
        * khtml/rendering/render_theme.h:
        (khtml::RenderTheme::setButtonSize):
        * khtml/rendering/render_theme_mac.h:
        * khtml/rendering/render_theme_mac.mm:
        (khtml::RenderThemeMac::setSizeFromFont):
        (khtml::RenderThemeMac::setFontFromControlSize):
        (khtml::RenderThemeMac::addIntrinsicMargins):
        (khtml::RenderThemeMac::setButtonPaddingFromControlSize):
        (khtml::RenderThemeMac::adjustButtonStyle):
        (khtml::RenderThemeMac::buttonSizes):
        (khtml::RenderThemeMac::buttonMargins):
        (khtml::RenderThemeMac::setButtonSize):
        (khtml::RenderThemeMac::setButtonCellState):
        (khtml::RenderThemeMac::paintButton):
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject actionElement]):
        (-[KWQAccObject role]):
        (-[KWQAccObject title]):
        * kwq/KWQButton.h: Removed.
        * kwq/KWQButton.mm: Removed.
        * kwq/KWQComboBox.mm:
        * kwq/KWQLineEdit.h:
        * kwq/KWQLineEdit.mm:
        * kwq/KWQPushButton.h: Removed.
        * kwq/KWQPushButton.mm: Removed.


Canonical link: https://commits.webkit.org/9220@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@10888 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
David Hyatt committed Oct 21, 2005
1 parent 2119fe1 commit 100909d
Show file tree
Hide file tree
Showing 26 changed files with 547 additions and 868 deletions.
72 changes: 72 additions & 0 deletions WebCore/ChangeLog-2005-12-19
@@ -1,3 +1,75 @@
2005-10-21 David Hyatt <hyatt@apple.com>

Land the new "NSView-less" buttons. With this landing both
<input type=button> and <button> will now look like OS X-style
widgets. Customization of background and border is not yet
enabled, but this is still a big improvement over the old
AppKit widgets.

Reviewed by mjs

* ForwardingHeaders/qpushbutton.h: Removed.
* WebCore.xcodeproj/project.pbxproj:
* khtml/css/cssstyleselector.cpp:
(khtml::CSSStyleSelector::adjustRenderStyle):
* khtml/css/cssstyleselector.h:
(khtml::CSSStyleSelector::paintMetrics):
* khtml/css/cssvalues.in:
* khtml/css/html4.css:
* khtml/html/html_formimpl.cpp:
(DOM::HTMLButtonElementImpl::createRenderer):
(DOM::HTMLInputElementImpl::click):
(DOM::HTMLInputElementImpl::createRenderer):
* khtml/html/html_formimpl.h:
(DOM::HTMLInputElementImpl::isTextButton):
* khtml/rendering/render_button.cpp: Added.
(khtml::m_inner):
(khtml::RenderButton::~RenderButton):
(khtml::RenderButton::addChild):
(khtml::RenderButton::removeChild):
(khtml::RenderButton::setStyle):
(khtml::RenderButton::updateFromElement):
* khtml/rendering/render_button.h: Added.
(khtml::RenderButton::removeLeftoverAnonymousBoxes):
(khtml::RenderButton::renderName):
* khtml/rendering/render_form.cpp:
* khtml/rendering/render_form.h:
(khtml::RenderFileButton::calcReplacedHeight):
(khtml::RenderFileButton::isEditable):
* khtml/rendering/render_style.h:
(khtml::):
* khtml/rendering/render_theme.cpp:
(khtml::RenderTheme::adjustStyle):
(khtml::RenderTheme::paint):
(khtml::RenderTheme::adjustCheckboxStyle):
(khtml::RenderTheme::adjustRadioStyle):
(khtml::RenderTheme::adjustButtonStyle):
* khtml/rendering/render_theme.h:
(khtml::RenderTheme::setButtonSize):
* khtml/rendering/render_theme_mac.h:
* khtml/rendering/render_theme_mac.mm:
(khtml::RenderThemeMac::setSizeFromFont):
(khtml::RenderThemeMac::setFontFromControlSize):
(khtml::RenderThemeMac::addIntrinsicMargins):
(khtml::RenderThemeMac::setButtonPaddingFromControlSize):
(khtml::RenderThemeMac::adjustButtonStyle):
(khtml::RenderThemeMac::buttonSizes):
(khtml::RenderThemeMac::buttonMargins):
(khtml::RenderThemeMac::setButtonSize):
(khtml::RenderThemeMac::setButtonCellState):
(khtml::RenderThemeMac::paintButton):
* kwq/KWQAccObject.mm:
(-[KWQAccObject actionElement]):
(-[KWQAccObject role]):
(-[KWQAccObject title]):
* kwq/KWQButton.h: Removed.
* kwq/KWQButton.mm: Removed.
* kwq/KWQComboBox.mm:
* kwq/KWQLineEdit.h:
* kwq/KWQLineEdit.mm:
* kwq/KWQPushButton.h: Removed.
* kwq/KWQPushButton.mm: Removed.

2005-10-19 Darin Adler <darin@apple.com>

Reviewed by Maciej.
Expand Down
1 change: 0 additions & 1 deletion WebCore/ForwardingHeaders/qpushbutton.h

This file was deleted.

32 changes: 8 additions & 24 deletions WebCore/WebCore.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion WebCore/khtml/css/cssstyleselector.cpp
Expand Up @@ -995,7 +995,7 @@ void CSSStyleSelector::adjustRenderStyle(RenderStyle* style, ElementImpl *e)

// Let the theme get a crack at changing the style if an appearance has been set.
if (style->hasAppearance())
theme()->adjustStyle(style);
theme()->adjustStyle(this, style, e);

// Only use slow repaints if we actually have a background image.
// FIXME: We only need to invalidate the fixed regions when scrolling. It's total overkill to
Expand Down
2 changes: 2 additions & 0 deletions WebCore/khtml/css/cssstyleselector.h
Expand Up @@ -139,6 +139,8 @@ namespace khtml

QColor getColorFromPrimitiveValue(DOM::CSSPrimitiveValueImpl* primitiveValue);

QPaintDeviceMetrics* paintMetrics() const { return paintDeviceMetrics; }

protected:

/* checks if a compound selector (which can consist of multiple simple selectors)
Expand Down
3 changes: 2 additions & 1 deletion WebCore/khtml/css/cssvalues.in
Expand Up @@ -440,8 +440,9 @@ after-white-space
#
checkbox
radio
push-button
square-button
button
button-bevel
listbox
listitem
menulist
Expand Down
23 changes: 13 additions & 10 deletions WebCore/khtml/css/html4.css
Expand Up @@ -278,15 +278,8 @@ fieldset {
}

button {
border: 2px outset ButtonFace;
background-color: ButtonFace;
color: ButtonText;
padding: 2px 2px 2px 2px;
cursor: default
}

button:active {
border-style: inset
cursor: default;
-khtml-appearance: button
}

input, textarea {
Expand All @@ -299,7 +292,7 @@ input, textarea, select, button {
font: 11px 'Lucida Grande';
color: initial;
display: inline-block;
-khtml-box-sizing: border-box
box-sizing: border-box
}

input[type="hidden"] {
Expand All @@ -311,6 +304,16 @@ input[type="radio"], input[type="checkbox"] {
-khtml-user-select: ignore
}

input[type="button"], input[type="submit"], input[type="reset"]
{
-khtml-appearance: push-button
}

input[type="button"], input[type="submit"], input[type="reset"], button {
-khtml-box-align: center;
text-align:center;
}

select, button, input[type="button"], input[type="image"], input[type="submit"], input[type="reset"], img {
-khtml-user-select: ignore
}
Expand Down
27 changes: 12 additions & 15 deletions WebCore/khtml/html/html_formimpl.cpp
Expand Up @@ -46,6 +46,7 @@
#include "khtml_ext.h"

#include "rendering/render_form.h"
#include "render_button.h"
#include "render_theme.h"

#include <kcharsets.h>
Expand Down Expand Up @@ -1200,6 +1201,11 @@ HTMLButtonElementImpl::~HTMLButtonElementImpl()
{
}

RenderObject* HTMLButtonElementImpl::createRenderer(RenderArena* arena, RenderStyle* style)
{
return new (arena) RenderButton(this);
}

DOMString HTMLButtonElementImpl::type() const
{
return getAttribute(typeAttr);
Expand Down Expand Up @@ -1699,17 +1705,7 @@ void HTMLInputElementImpl::click(bool sendMouseEvents, bool showPressedLook)
break;
case SUBMIT:
case RESET:
case BUTTON:
#if APPLE_CHANGES
{
QWidget *widget;
if (showPressedLook && renderer() && (widget = static_cast<RenderWidget *>(renderer())->widget())) {
// using this method gives us nice Cocoa user interface feedback
static_cast<QButton *>(widget)->click(sendMouseEvents);
break;
}
}
#endif
case BUTTON:
HTMLGenericFormElementImpl::click(sendMouseEvents, showPressedLook);
break;
case FILE:
Expand Down Expand Up @@ -1919,12 +1915,13 @@ RenderObject *HTMLInputElementImpl::createRenderer(RenderArena *arena, RenderSty
case CHECKBOX:
case RADIO:
return RenderObject::createObject(this, style);
case SUBMIT: return new (arena) RenderSubmitButton(this);
case SUBMIT:
case RESET:
case BUTTON:
return new (arena) RenderButton(this);
case IMAGE: return new (arena) RenderImageButton(this);
case RESET: return new (arena) RenderResetButton(this);
case FILE: return new (arena) RenderFileButton(this);
case BUTTON: return new (arena) RenderPushButton(this);
#if APPLE_CHANGES
#if APPLE_CHANGES
case RANGE: return new (arena) RenderSlider(this);
#endif
case HIDDEN: break;
Expand Down
4 changes: 4 additions & 0 deletions WebCore/khtml/html/html_formimpl.h
Expand Up @@ -251,6 +251,8 @@ class HTMLButtonElementImpl : public HTMLGenericFormElementImpl
};

DOMString type() const;

virtual khtml::RenderObject *createRenderer(RenderArena*, khtml::RenderStyle*);

virtual void parseMappedAttribute(MappedAttributeImpl *attr);
virtual void defaultEventHandler(EventImpl *evt);
Expand Down Expand Up @@ -346,6 +348,8 @@ class HTMLInputElementImpl : public HTMLGenericFormElementImpl

virtual bool isChecked() const { return checked(); }

bool isTextButton() const { return m_type == SUBMIT || m_type == RESET || m_type == BUTTON; }

bool checked() const { return m_checked; }
void setChecked(bool);
int maxLength() const { return m_maxLen; }
Expand Down
96 changes: 96 additions & 0 deletions WebCore/khtml/rendering/render_button.cpp
@@ -0,0 +1,96 @@
/**
* This file is part of the html renderer for KDE.
*
* Copyright (C) 2005 Apple Computer, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
*/

#include "config.h"
#include "render_button.h"
#include "render_text.h"
#include "htmlnames.h"
#include "html_formimpl.h"

using namespace DOM;
using namespace HTMLNames;

namespace khtml {

RenderButton::RenderButton(NodeImpl* node)
:RenderFlexibleBox(node), m_buttonText(0), m_inner(0)
{
}

RenderButton::~RenderButton()
{
}

void RenderButton::addChild(RenderObject *newChild, RenderObject *beforeChild)
{
if (!m_inner) {
// Create an anonymous block.
assert(!m_first);
m_inner = createAnonymousBlock();
m_inner->style()->setBoxFlex(1.0f);
RenderFlexibleBox::addChild(m_inner);
}

m_inner->addChild(newChild, beforeChild);
}

void RenderButton::removeChild(RenderObject *oldChild)
{
if (oldChild == m_inner || !m_inner) {
RenderFlexibleBox::removeChild(oldChild);
m_inner = 0;
}
else
m_inner->removeChild(oldChild);
}

void RenderButton::setStyle(RenderStyle* style)
{
RenderBlock::setStyle(style);
if (m_buttonText)
m_buttonText->setStyle(style);
}

void RenderButton::updateFromElement()
{
// If we're an input element, we may need to change our button text.
if (element()->hasTagName(inputTag)) {
HTMLInputElementImpl* input = static_cast<HTMLInputElementImpl*>(element());
DOMString value = input->value();
if (value.isEmpty()) {
if (m_buttonText) {
m_buttonText->destroy();
m_buttonText = 0;
}
} else {
if (m_buttonText)
m_buttonText->setText(value.impl());
else {
m_buttonText = new (renderArena()) RenderText(document(), value.impl());
m_buttonText->setStyle(style());
addChild(m_buttonText);
}
}
}
}

}
54 changes: 54 additions & 0 deletions WebCore/khtml/rendering/render_button.h
@@ -0,0 +1,54 @@
/*
* This file is part of the html renderer for KDE.
*
* Copyright (C) 2005 Apple Computer
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
*/
#ifndef render_button_h
#define render_button_h

#include "render_flexbox.h"

namespace khtml
{

// RenderButtons are just like normal flexboxes except that they will generate an anonymous block child.
// For inputs, they will also generate an anonymous RenderText and keep its style and content up
// to date as the button changes.
class RenderButton : public RenderFlexibleBox
{
public:
RenderButton(DOM::NodeImpl* node);
virtual ~RenderButton();

virtual void addChild(RenderObject *newChild, RenderObject *beforeChild = 0);
virtual void removeChild(RenderObject *oldChild);
virtual void removeLeftoverAnonymousBoxes() {};

virtual void setStyle(RenderStyle* style);
virtual void updateFromElement();

virtual const char *renderName() const { return "RenderButton"; }

protected:
RenderText* m_buttonText;
RenderBlock* m_inner;
};

};
#endif

0 comments on commit 100909d

Please sign in to comment.