Clean up some QWidget dependencies in gui/image.
This commit is contained in:
parent
19822fa60c
commit
3f3a950d6e
src/gui
@ -69,7 +69,7 @@ typedef struct {
|
||||
} BITMAPINFO_MASK;
|
||||
|
||||
|
||||
QNativeImage::QNativeImage(int width, int height, QImage::Format format, bool isTextBuffer, QWidget *)
|
||||
QNativeImage::QNativeImage(int width, int height, QImage::Format format, bool isTextBuffer, QWindow *)
|
||||
{
|
||||
#ifndef Q_WS_WINCE
|
||||
Q_UNUSED(isTextBuffer);
|
||||
@ -146,102 +146,9 @@ QImage::Format QNativeImage::systemFormat()
|
||||
return QImage::Format_RGB32;
|
||||
}
|
||||
|
||||
|
||||
#elif defined(Q_WS_X11) && !defined(QT_NO_MITSHM)
|
||||
|
||||
QNativeImage::QNativeImage(int width, int height, QImage::Format format,bool /* isTextBuffer */, QWidget *widget)
|
||||
: xshmimg(0), xshmpm(0)
|
||||
{
|
||||
if (!X11->use_mitshm) {
|
||||
image = QImage(width, height, format);
|
||||
// follow good coding practice and set xshminfo attributes, though values not used in this case
|
||||
xshminfo.readOnly = true;
|
||||
xshminfo.shmaddr = 0;
|
||||
xshminfo.shmid = 0;
|
||||
xshminfo.shmseg = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
QX11Info info = widget->x11Info();
|
||||
|
||||
int dd = info.depth();
|
||||
Visual *vis = (Visual*) info.visual();
|
||||
|
||||
xshmimg = XShmCreateImage(X11->display, vis, dd, ZPixmap, 0, &xshminfo, width, height);
|
||||
if (!xshmimg) {
|
||||
qWarning("QNativeImage: Unable to create shared XImage.");
|
||||
return;
|
||||
}
|
||||
|
||||
bool ok;
|
||||
xshminfo.shmid = shmget(IPC_PRIVATE, xshmimg->bytes_per_line * xshmimg->height,
|
||||
IPC_CREAT | 0777);
|
||||
ok = xshminfo.shmid != -1;
|
||||
if (ok) {
|
||||
xshmimg->data = (char*)shmat(xshminfo.shmid, 0, 0);
|
||||
xshminfo.shmaddr = xshmimg->data;
|
||||
ok = (xshminfo.shmaddr != (char*)-1);
|
||||
if (ok)
|
||||
image = QImage((uchar *)xshmimg->data, width, height, format);
|
||||
}
|
||||
xshminfo.readOnly = false;
|
||||
if (ok) {
|
||||
ok = XShmAttach(X11->display, &xshminfo);
|
||||
XSync(X11->display, False);
|
||||
if (shmctl(xshminfo.shmid, IPC_RMID, 0) == -1)
|
||||
qWarning() << "Error while marking the shared memory segment to be destroyed";
|
||||
}
|
||||
if (!ok) {
|
||||
qWarning() << "QNativeImage: Unable to attach to shared memory segment.";
|
||||
if (xshmimg->data) {
|
||||
free(xshmimg->data);
|
||||
xshmimg->data = 0;
|
||||
}
|
||||
XDestroyImage(xshmimg);
|
||||
xshmimg = 0;
|
||||
if (xshminfo.shmaddr)
|
||||
shmdt(xshminfo.shmaddr);
|
||||
if (xshminfo.shmid != -1)
|
||||
shmctl(xshminfo.shmid, IPC_RMID, 0);
|
||||
return;
|
||||
}
|
||||
if (X11->use_mitshm_pixmaps) {
|
||||
xshmpm = XShmCreatePixmap(X11->display, DefaultRootWindow(X11->display), xshmimg->data,
|
||||
&xshminfo, width, height, dd);
|
||||
if (!xshmpm) {
|
||||
qWarning() << "QNativeImage: Unable to create shared Pixmap.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QNativeImage::~QNativeImage()
|
||||
{
|
||||
if (!xshmimg)
|
||||
return;
|
||||
|
||||
if (xshmpm) {
|
||||
XFreePixmap(X11->display, xshmpm);
|
||||
xshmpm = 0;
|
||||
}
|
||||
XShmDetach(X11->display, &xshminfo);
|
||||
xshmimg->data = 0;
|
||||
XDestroyImage(xshmimg);
|
||||
xshmimg = 0;
|
||||
shmdt(xshminfo.shmaddr);
|
||||
shmctl(xshminfo.shmid, IPC_RMID, 0);
|
||||
}
|
||||
|
||||
QImage::Format QNativeImage::systemFormat()
|
||||
{
|
||||
if (QX11Info::appDepth() == 16)
|
||||
return QImage::Format_RGB16;
|
||||
return QImage::Format_RGB32;
|
||||
}
|
||||
|
||||
#elif defined(Q_WS_MAC)
|
||||
|
||||
QNativeImage::QNativeImage(int width, int height, QImage::Format format, bool /* isTextBuffer */, QWidget *widget)
|
||||
QNativeImage::QNativeImage(int width, int height, QImage::Format format, bool /* isTextBuffer */, QWindow *)
|
||||
: image(width, height, format)
|
||||
{
|
||||
|
||||
@ -266,7 +173,7 @@ QNativeImage::QNativeImage(int width, int height, QImage::Format format, bool /*
|
||||
#endif
|
||||
|
||||
cg = CGBitmapContextCreate(image.bits(), width, height, 8, image.bytesPerLine(),
|
||||
QCoreGraphicsPaintEngine::macDisplayColorSpace(widget), cgflags);
|
||||
QCoreGraphicsPaintEngine::macDisplayColorSpace(0), cgflags);
|
||||
CGContextTranslateCTM(cg, 0, height);
|
||||
CGContextScaleCTM(cg, 1, -1);
|
||||
|
||||
|
@ -58,9 +58,6 @@
|
||||
#ifdef Q_WS_WIN
|
||||
#include "qt_windows.h"
|
||||
|
||||
#elif defined(Q_WS_X11)
|
||||
#include <private/qt_x11_p.h>
|
||||
|
||||
#elif defined(Q_WS_MAC)
|
||||
#include <private/qt_mac_p.h>
|
||||
|
||||
@ -73,7 +70,7 @@ class QWindow;
|
||||
class QNativeImage
|
||||
{
|
||||
public:
|
||||
QNativeImage(int width, int height, QImage::Format format, bool isTextBuffer = false, QWindow *widget = 0);
|
||||
QNativeImage(int width, int height, QImage::Format format, bool isTextBuffer = false, QWindow *window = 0);
|
||||
~QNativeImage();
|
||||
|
||||
inline int width() const;
|
||||
@ -88,11 +85,6 @@ public:
|
||||
HBITMAP bitmap;
|
||||
HBITMAP null_bitmap;
|
||||
|
||||
#elif defined(Q_WS_X11) && !defined(QT_NO_MITSHM)
|
||||
XImage *xshmimg;
|
||||
Pixmap xshmpm;
|
||||
XShmSegmentInfo xshminfo;
|
||||
|
||||
#elif defined(Q_WS_MAC)
|
||||
CGContextRef cg;
|
||||
#endif
|
||||
|
@ -910,21 +910,24 @@ bool QPixmap::doImageIO(QImageWriter *writer, int quality) const
|
||||
return writer->write(toImage());
|
||||
}
|
||||
|
||||
// #### Qt5: needs fixing
|
||||
// The implementation (and documentation) of
|
||||
// QPixmap::fill(const QWidget *, const QPoint &)
|
||||
// is in qwidget.cpp
|
||||
|
||||
/*!
|
||||
\fn void QPixmap::fill(const QWidget *widget, int x, int y)
|
||||
\fn void QPixmap::fill(const QPaintDevice *device, int x, int y)
|
||||
\overload
|
||||
|
||||
Fills the pixmap with the \a widget's background color or pixmap.
|
||||
\obsolete
|
||||
|
||||
Fills the pixmap with the \a device's background color or pixmap.
|
||||
The given point, (\a x, \a y), defines an offset in widget
|
||||
coordinates to which the pixmap's top-left pixel will be mapped
|
||||
to.
|
||||
*/
|
||||
|
||||
void QPixmap::fill(const QPaintDevice *, const QPoint &)
|
||||
{
|
||||
qWarning() << "QPixmap::fill(const QPaintDevice *device, const QPoint &offset) is deprecated, ignored";
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
Fills the pixmap with the given \a color.
|
||||
|
||||
@ -1012,7 +1015,7 @@ static void sendResizeEvents(QWidget *target)
|
||||
#endif
|
||||
|
||||
/*!
|
||||
\fn QPixmap QPixmap::grabWidget(QWidget * widget, const QRect &rectangle)
|
||||
\fn QPixmap QPixmap::grabWidget(QPaintDevice * widget, const QRect &rectangle)
|
||||
|
||||
Creates a pixmap and paints the given \a widget, restricted by the
|
||||
given \a rectangle, in it. If the \a widget has any children, then
|
||||
@ -1041,7 +1044,7 @@ static void sendResizeEvents(QWidget *target)
|
||||
\sa grabWindow()
|
||||
*/
|
||||
|
||||
QPixmap QPixmap::grabWidget(QWidget * widget, const QRect &rect)
|
||||
QPixmap QPixmap::grabWidget(QPaintDevice * widget, const QRect &rect)
|
||||
{
|
||||
// ### Qt5: should we keep or remove this method?
|
||||
// SC solution would be to install a callback form QtWidgets, but ugly.
|
||||
|
@ -103,8 +103,8 @@ public:
|
||||
static int defaultDepth();
|
||||
|
||||
void fill(const QColor &fillColor = Qt::white);
|
||||
void fill(const QWidget *widget, const QPoint &ofs);
|
||||
inline void fill(const QWidget *widget, int xofs, int yofs) { fill(widget, QPoint(xofs, yofs)); }
|
||||
void fill(const QPaintDevice *device, const QPoint &ofs);
|
||||
inline void fill(const QPaintDevice *device, int xofs, int yofs) { fill(device, QPoint(xofs, yofs)); }
|
||||
|
||||
QBitmap mask() const;
|
||||
void setMask(const QBitmap &);
|
||||
@ -122,8 +122,8 @@ public:
|
||||
QBitmap createMaskFromColor(const QColor &maskColor, Qt::MaskMode mode) const;
|
||||
|
||||
static QPixmap grabWindow(WId, int x=0, int y=0, int w=-1, int h=-1);
|
||||
static QPixmap grabWidget(QWidget *widget, const QRect &rect);
|
||||
static inline QPixmap grabWidget(QWidget *widget, int x=0, int y=0, int w=-1, int h=-1)
|
||||
static QPixmap grabWidget(QPaintDevice *widget, const QRect &rect);
|
||||
static inline QPixmap grabWidget(QPaintDevice *widget, int x=0, int y=0, int w=-1, int h=-1)
|
||||
{ return grabWidget(widget, QRect(x, y, w, h)); }
|
||||
|
||||
|
||||
|
@ -2316,26 +2316,6 @@ void QWidgetPrivate::updateIsTranslucent()
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn void QPixmap::fill(const QWidget *widget, const QPoint &offset)
|
||||
|
||||
Fills the pixmap with the \a widget's background color or pixmap
|
||||
according to the given offset.
|
||||
|
||||
The QPoint \a offset defines a point in widget coordinates to
|
||||
which the pixmap's top-left pixel will be mapped to. This is only
|
||||
significant if the widget has a background pixmap; otherwise the
|
||||
pixmap will simply be filled with the background color of the
|
||||
widget.
|
||||
*/
|
||||
|
||||
void QPixmap::fill( const QWidget *widget, const QPoint &off )
|
||||
{
|
||||
QPainter p(this);
|
||||
p.translate(-off);
|
||||
widget->d_func()->paintBackground(&p, QRect(off, size()));
|
||||
}
|
||||
|
||||
static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrush &brush)
|
||||
{
|
||||
Q_ASSERT(painter);
|
||||
|
Loading…
Reference in New Issue
Block a user