You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
4.9 KiB
170 lines
4.9 KiB
/*
|
|
* This file is part of the HTML widget for KDE.
|
|
*
|
|
* Copyright (C) 1999 Lars Knoll (knoll@kde.org)
|
|
*
|
|
* 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., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
*
|
|
*/
|
|
#ifndef render_replaced_h
|
|
#define render_replaced_h
|
|
|
|
#include "rendering/render_block.h"
|
|
#include <qobject.h>
|
|
#include <qscrollview.h>
|
|
|
|
class KHTMLView;
|
|
class QWidget;
|
|
|
|
namespace DOM
|
|
{
|
|
class MouseEventImpl;
|
|
}
|
|
|
|
namespace khtml {
|
|
|
|
class RenderReplaced : public RenderBox
|
|
{
|
|
public:
|
|
RenderReplaced(DOM::NodeImpl* node);
|
|
|
|
virtual const char *renderName() const { return "RenderReplaced"; }
|
|
virtual bool isRenderReplaced() const { return true; }
|
|
|
|
virtual bool childAllowed() const { return false; }
|
|
|
|
virtual void calcMinMaxWidth();
|
|
|
|
virtual short intrinsicWidth() const { return m_intrinsicWidth; }
|
|
virtual int intrinsicHeight() const { return m_intrinsicHeight; }
|
|
|
|
void setIntrinsicWidth(int w) { m_intrinsicWidth = w; }
|
|
void setIntrinsicHeight(int h) { m_intrinsicHeight = h; }
|
|
|
|
virtual void position(InlineBox*, int, int, bool);
|
|
|
|
// Return before, after (offset set to max), or inside the replaced element,
|
|
// at @p offset
|
|
virtual FindSelectionResult checkSelectionPoint( int _x, int _y, int _tx, int _ty,
|
|
DOM::NodeImpl*& node, int & offset,
|
|
SelPointState & );
|
|
|
|
/** returns the lowest possible value the caret offset may have to
|
|
* still point to a valid position.
|
|
*
|
|
* Returns 0.
|
|
*/
|
|
virtual long minOffset() const { return 0; }
|
|
/** returns the highest possible value the caret offset may have to
|
|
* still point to a valid position.
|
|
*
|
|
* Returns 0.
|
|
*/
|
|
virtual long maxOffset() const { return 0; }
|
|
|
|
protected:
|
|
short m_intrinsicWidth;
|
|
short m_intrinsicHeight;
|
|
};
|
|
|
|
|
|
class RenderWidget : public QObject, public RenderReplaced, public khtml::Shared<RenderWidget>
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
RenderWidget(DOM::NodeImpl* node);
|
|
virtual ~RenderWidget();
|
|
|
|
virtual void setStyle(RenderStyle *style);
|
|
virtual void paint( PaintInfo& i, int tx, int ty );
|
|
virtual bool isWidget() const { return true; };
|
|
|
|
virtual bool isFrame() const { return false; }
|
|
|
|
virtual void detach( );
|
|
virtual void layout( );
|
|
|
|
virtual void updateFromElement();
|
|
|
|
QWidget *widget() const { return m_widget; }
|
|
KHTMLView* view() const { return m_view; }
|
|
|
|
void deref();
|
|
|
|
void cancelPendingResize();
|
|
bool needsMask() const { return m_needsMask; }
|
|
|
|
static void paintWidget(PaintInfo& pI, QWidget *widget, int tx, int ty);
|
|
virtual bool handleEvent(const DOM::EventImpl& ev);
|
|
|
|
#ifdef ENABLE_DUMP
|
|
virtual void dump(QTextStream &stream, const QString &ind) const;
|
|
#endif
|
|
|
|
// for ECMA to flush all pending resizes
|
|
KDE_EXPORT static void flushWidgetResizes();
|
|
|
|
public slots:
|
|
void slotWidgetDestructed();
|
|
bool isKHTMLWidget() const { return m_isKHTMLWidget; }
|
|
|
|
protected:
|
|
virtual bool canHaveBorder() const { return false; }
|
|
|
|
virtual bool acceptsSyntheticEvents() const { return true; }
|
|
|
|
virtual void handleFocusOut() {}
|
|
bool event( QEvent *e );
|
|
|
|
bool eventFilter(QObject* /*o*/, QEvent* e);
|
|
void setQWidget(QWidget *widget);
|
|
void resizeWidget( int w, int h );
|
|
|
|
QWidget *m_widget;
|
|
KHTMLView* m_view;
|
|
|
|
//Because we mess with normal detach due to ref/deref,
|
|
//we need to keep track of the arena ourselves
|
|
//so it doesn't get yanked from us, etc.
|
|
SharedPtr<RenderArena> m_arena;
|
|
|
|
bool m_resizePending;
|
|
bool m_discardResizes;
|
|
bool m_isKHTMLWidget;
|
|
bool m_needsMask;
|
|
|
|
public:
|
|
virtual int borderTop() const { return canHaveBorder() ? RenderReplaced::borderTop() : 0; }
|
|
virtual int borderBottom() const { return canHaveBorder() ? RenderReplaced::borderBottom() : 0; }
|
|
virtual int borderLeft() const { return canHaveBorder() ? RenderReplaced::borderLeft() : 0; }
|
|
virtual int borderRight() const { return canHaveBorder() ? RenderReplaced::borderRight() : 0; }
|
|
|
|
class EventPropagator : public QWidget {
|
|
public:
|
|
void sendEvent(QEvent *e);
|
|
};
|
|
class ScrollViewEventPropagator : public QScrollView {
|
|
public:
|
|
void sendEvent(QEvent *e);
|
|
};
|
|
};
|
|
|
|
extern bool allowWidgetPaintEvents;
|
|
|
|
}
|
|
|
|
#endif
|