aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Noldor2011-04-28 16:21:09 +0000
committerGravatar Noldor2011-04-28 16:21:09 +0000
commit6ef086201df1e347590198f843c87ce320453176 (patch)
tree0846f136ec43f7ef5b91b3734e94462a60afa989 /src
parentAdded alpha component in color options (diff)
downloadKVIrc-6ef086201df1e347590198f843c87ce320453176.tar.gz
KVIrc-6ef086201df1e347590198f843c87ce320453176.tar.bz2
KVIrc-6ef086201df1e347590198f843c87ce320453176.zip
Code improvements in kvs classes
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5805 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src')
-rw-r--r--src/modules/objects/CMakeLists.txt2
-rw-r--r--src/modules/objects/KvsObject_checkBox.cpp1
-rw-r--r--src/modules/objects/KvsObject_colorDialog.cpp236
-rw-r--r--src/modules/objects/KvsObject_colorDialog.h52
-rw-r--r--src/modules/objects/KvsObject_dialog.cpp7
-rw-r--r--src/modules/objects/KvsObject_painter.cpp234
-rw-r--r--src/modules/objects/KvsObject_painter.h3
-rw-r--r--src/modules/objects/KvsObject_pixmap.cpp414
-rw-r--r--src/modules/objects/KvsObject_pixmap.h44
-rw-r--r--src/modules/objects/KvsObject_treeWidget.h2
-rw-r--r--src/modules/objects/KvsObject_treeWidgeteItem.cpp1
-rw-r--r--src/modules/objects/KvsObject_webView.cpp10
-rw-r--r--src/modules/objects/KvsObject_webView.h4
-rw-r--r--src/modules/objects/KvsObject_widget.cpp49
-rw-r--r--src/modules/objects/KvsObject_widget.h5
-rw-r--r--src/modules/objects/libkviobjects.cpp20
16 files changed, 990 insertions, 94 deletions
diff --git a/src/modules/objects/CMakeLists.txt b/src/modules/objects/CMakeLists.txt
index b7d9e5e09..28be4c984 100644
--- a/src/modules/objects/CMakeLists.txt
+++ b/src/modules/objects/CMakeLists.txt
@@ -11,6 +11,7 @@ SET(kviobjects_MOC_HDRS
KvsObject_button.h
KvsObject_checkBox.h
KvsObject_comboBox.h
+ KvsObject_colorDialog.h
KvsObject_dateTimeEdit.h
KvsObject_dockWindow.h
KvsObject_ftp.h
@@ -46,6 +47,7 @@ SET(kviobjects_SRCS
KvsObject_comboBox.cpp
KvsObject_dateTimeEdit.cpp
KvsObject_dialog.cpp
+ KvsObject_colorDialog.cpp
KvsObject_dockWindow.cpp
KvsObject_file.cpp
KvsObject_ftp.cpp
diff --git a/src/modules/objects/KvsObject_checkBox.cpp b/src/modules/objects/KvsObject_checkBox.cpp
index 53f11fda7..17daa7113 100644
--- a/src/modules/objects/KvsObject_checkBox.cpp
+++ b/src/modules/objects/KvsObject_checkBox.cpp
@@ -29,6 +29,7 @@
#include "KviLocale.h"
#include "KvsObject_checkBox.h"
+
#include <QCheckBox>
/*
diff --git a/src/modules/objects/KvsObject_colorDialog.cpp b/src/modules/objects/KvsObject_colorDialog.cpp
new file mode 100644
index 000000000..cd80b224b
--- /dev/null
+++ b/src/modules/objects/KvsObject_colorDialog.cpp
@@ -0,0 +1,236 @@
+//=============================================================================
+//
+// File : KvsObject_colorDialog.cpp
+// Creation date : Wed 27 Apr 2011 15:42:05 CEST by Alessandro Carbone
+//
+// This file is part of the KVIrc irc client distribution
+// Copyright (C) 2011 Alessandro Carbone (elfonol at gmail dot com)
+// Copyright (C) 2000-2010 Szymon Stefanek (pragma at kvirc dot net)
+//
+// This program is FREE software. You can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your opinion) any later version.
+//
+// This program 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//=============================================================================
+
+
+#include "KviError.h"
+#include "kvi_debug.h"
+#include "KviLocale.h"
+#include "KvsObject_colorDialog.h"
+
+
+#include <QColorDialog>
+
+const char * const option_tbl[] = {
+ "ShowAlphaChannel",
+ "NoButtons",
+ "DontUseNativeDialog"
+};
+
+const int option_cod[] = {
+ QColorDialog::ShowAlphaChannel,
+ QColorDialog::NoButtons,
+ QColorDialog::DontUseNativeDialog
+};
+
+#define option_num (sizeof(option_tbl) / sizeof(option_tbl[0]))
+
+/*
+ @doc: colordialog
+ @title:
+ colordialog class
+ @type:
+ class
+ @short:
+ Check box with a text description
+ @inherits:
+ [class]object[/class]
+ [class]button[/class]
+ @description:
+ This widget provides a check box - it is a kind of a toggle
+ button. It can have two states: on (checked) and off
+ (unchecked).
+ @functions:
+ !fn: <bool> $isChecked()
+ Returns '1' if the check box is checked, '0' otherwise.[br]
+ See also [classfnc]$setChecked[/classfnc]().
+ !fn: $setChecked([<bChecked:bool>])
+ Sets the check box 'checked state' to <bool>.
+ See also [classfnc]$isChecked[/classfnc]().
+ !fn: $setText([<text:string>])
+ Sets the label text associated with the colorDialog to <text>.[br]
+ !fn: $toggleEvent(<bToggled:bool>)
+ Called by KVIrc when the colorDialog state is toggled.
+ The default implementation emits the toggled(<bool>) signal.
+*/
+
+//---------------------------------------------------------------------------------
+
+KVSO_BEGIN_REGISTERCLASS(KvsObject_colorDialog,"colorDialog","dialog")
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_colorDialog,setCurrentColor)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_colorDialog,setOptions)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_colorDialog,colorSelectedEvent)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_colorDialog,currentColorChangedEvent)
+KVSO_END_REGISTERCLASS(KvsObject_colorDialog)
+
+KVSO_BEGIN_CONSTRUCTOR(KvsObject_colorDialog,KvsObject_dialog)
+
+KVSO_END_CONSTRUCTOR(KvsObject_colorDialog)
+
+
+KVSO_BEGIN_DESTRUCTOR(KvsObject_colorDialog)
+
+KVSO_END_CONSTRUCTOR(KvsObject_colorDialog)
+
+bool KvsObject_colorDialog::init(KviKvsRunTimeContext *,KviKvsVariantList *)
+{
+ QColorDialog * d = new QColorDialog(parentScriptWidget());
+ d->setObjectName(getName().toUtf8().data());
+ setObject(d, true);
+ connect(d,SIGNAL(colorSelected(const QColor &)),this,SLOT(slotColorSelected(const QColor &)));
+ connect(d,SIGNAL(currentColorChanged(const QColor &)),this,SLOT(slotCurrentColorChanged(const QColor &)));
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(colorDialog,setCurrentColor)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ kvs_int_t iCol1,iCol2,iCol3,iOpacity;
+ QString szColorMode,szColor;
+ KviKvsVariant *var1,*var2,*var3;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("Color_1_Or_Colorname",KVS_PT_VARIANT,0,var1)
+ KVSO_PARAMETER("Color_2",KVS_PT_VARIANT,KVS_PF_OPTIONAL,var2)
+ KVSO_PARAMETER("Colo3_3",KVS_PT_VARIANT,KVS_PF_OPTIONAL,var3)
+ KVSO_PARAMETER("opacity",KVS_PT_INT,KVS_PF_OPTIONAL,iOpacity)
+ KVSO_PARAMETER("color_mode",KVS_PT_STRING,KVS_PF_OPTIONAL,szColorMode)
+ KVSO_PARAMETERS_END(c)
+ QColor col;
+ if (!var1->asInteger(iCol1))
+ {
+ var1->asString(szColor);
+ if (c->paramCount()<2) iOpacity=255;
+ else
+ {
+ if (!var2->asInteger(iOpacity))
+ {
+ c->warning(__tr2qs_ctx("The opacity parameter didn't evaluate to integer","objects"));
+ return true;
+ }
+ }
+ col.setNamedColor(szColor);
+ col.setAlpha(iOpacity);
+ }
+ else
+ {
+ if(c->paramCount()<3)
+ {
+ c->error(__tr2qs_ctx("Color name or triplette rgb/hsv value required","objects"));
+ return true;
+ }
+ if (!var2->asInteger(iCol2)||!var3->asInteger(iCol3))
+ {
+ c->error(__tr2qs_ctx("One of the triplette parameters didn't evaluate to an integer","objects"));\
+ return true;
+ }
+ if (c->paramCount()<4) iOpacity=255;
+ else
+ {
+ if (c->paramCount()>4)
+ {
+ if(KviQString::equalCI(szColorMode, "HSV"))
+ col.setHsv(iCol1,iCol2,iCol3,iOpacity);
+ else
+ col.setRgb(iCol1,iCol2,iCol3,iOpacity);
+ }
+ }
+ col.setAlpha(iOpacity);
+ }
+ ((QColorDialog *)widget())->setCurrentColor(col);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(colorDialog,setOptions)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QStringList szOptions;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("szOptions",KVS_PT_STRINGLIST,KVS_PF_OPTIONAL,szOptions)
+ KVSO_PARAMETERS_END(c)
+ if (!widget()) return true;
+ int colorDialogOption,sum = 0;
+ for ( QStringList::Iterator it = szOptions.begin(); it != szOptions.end(); ++it )
+ {
+ colorDialogOption = 0;
+ for(unsigned int j = 0; j < option_num; j++)
+ {
+ if(KviQString::equalCI((*it), option_tbl[j]))
+ {
+ colorDialogOption=option_cod[j];
+ break;
+ }
+ }
+ if(colorDialogOption)
+ sum = sum | colorDialogOption;
+ else
+ c->warning(__tr2qs_ctx("Unknown szOptions '%Q'","objects"),&(*it));
+
+ }
+ ((QColorDialog *)widget())->setOptions(QColorDialog::ColorDialogOptions(sum));
+ return true;
+}
+
+
+
+KVSO_CLASS_FUNCTION(colorDialog,currentColorChangedEvent)
+{
+ emitSignal("currentColorChanged",c,c->params());
+ return true;
+}
+
+
+KVSO_CLASS_FUNCTION(colorDialog,colorSelectedEvent)
+{
+ emitSignal("colorSelected",c,c->params());
+ return true;
+}
+
+//slots
+void KvsObject_colorDialog::slotCurrentColorChanged(const QColor &col)
+{
+ KviKvsHash *pHash = new KviKvsHash();
+ KviKvsVariant *pColName = new KviKvsVariant(col.name());
+ KviKvsVariant *pColAlpha = new KviKvsVariant((kvs_int_t)col.alpha());
+ pHash->set("color",pColName);
+ pHash->set("opacity",pColAlpha);
+ KviKvsVariantList params(new KviKvsVariant(pHash));
+ callFunction(this,"currentColorChangedEvent",&params);
+}
+
+void KvsObject_colorDialog::slotColorSelected(const QColor &col)
+{
+ KviKvsHash *pHash = new KviKvsHash();
+ KviKvsVariant *pColName = new KviKvsVariant(col.name());
+ KviKvsVariant *pColAlpha = new KviKvsVariant((kvs_int_t)col.alpha());
+ pHash->set("color",pColName);
+ pHash->set("alpha",pColAlpha);
+ KviKvsVariantList params(new KviKvsVariant(pHash));
+ callFunction(this,"colorSelectedEvent",&params);
+}
+
+
+#ifndef COMPILE_USE_STANDALONE_MOC_SOURCES
+#include "m_KvsObject_colorDialog.moc"
+#endif //!COMPILE_USE_STANDALONE_MOC_SOURCES
+
diff --git a/src/modules/objects/KvsObject_colorDialog.h b/src/modules/objects/KvsObject_colorDialog.h
new file mode 100644
index 000000000..1ad507e40
--- /dev/null
+++ b/src/modules/objects/KvsObject_colorDialog.h
@@ -0,0 +1,52 @@
+#ifndef _CLASS_COLORDIALOG_H_
+#define _CLASS_COLORDIALOG_H_
+
+//=============================================================================
+//
+// File : KvsObject_colorDialog.h
+// Creation date : Wed 27 Apr 2011 15:42:05 CEST by Alessandro Carbone
+//
+// This file is part of the KVIrc irc client distribution
+// Copyright (C) 2011 Alessandro Carbone (elfonol at gmail dot com)
+// Copyright (C) 2000-2010 Szymon Stefanek (pragma at kvirc dot net)
+//
+// This program is FREE software. You can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your opinion) any later version.
+//
+// This program 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//=============================================================================
+
+
+
+#include "KvsObject_dialog.h"
+#include "object_macros.h"
+
+class KvsObject_colorDialog : public KvsObject_dialog
+{
+ Q_OBJECT
+public:
+ KVSO_DECLARE_OBJECT(KvsObject_colorDialog)
+public:
+ QWidget * widget() { return (QWidget *)object(); }
+protected:
+ virtual bool init(KviKvsRunTimeContext * pContext,KviKvsVariantList *pParams);
+ bool setCurrentColor(KviKvsObjectFunctionCall *c);
+ bool currentColorChangedEvent(KviKvsObjectFunctionCall *c);
+ bool colorSelectedEvent(KviKvsObjectFunctionCall *c);
+ bool setOptions(KviKvsObjectFunctionCall *c);
+protected slots:
+ void slotCurrentColorChanged(const QColor &col);
+ void slotColorSelected(const QColor &col);
+
+};
+#endif // !_CLASS_COLORDIALOG_H_
diff --git a/src/modules/objects/KvsObject_dialog.cpp b/src/modules/objects/KvsObject_dialog.cpp
index f3feb53ff..73e41ae17 100644
--- a/src/modules/objects/KvsObject_dialog.cpp
+++ b/src/modules/objects/KvsObject_dialog.cpp
@@ -30,7 +30,7 @@
#include "KviApplication.h"
#include <QDialog>
-
+#include <QGraphicsDropShadowEffect>
/*
@doc: dialog
@@ -72,6 +72,11 @@ bool KvsObject_dialog::init(KviKvsRunTimeContext *,KviKvsVariantList *)
QWidget * w = g_pApp->activeModalWidget();
if(!w)w = g_pMainWindow;
QDialog * d = new QDialog(parentScriptWidget() ? parentScriptWidget() : w);
+ QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect(widget());
+ effect->setColor(QColor(0, 0, 0, 255));
+ effect->setBlurRadius(20);
+ d->setGraphicsEffect(effect);
+
d->setObjectName(getName());
//d->setModal(true);
setObject(d);
diff --git a/src/modules/objects/KvsObject_painter.cpp b/src/modules/objects/KvsObject_painter.cpp
index a73d7924e..fa37a8072 100644
--- a/src/modules/objects/KvsObject_painter.cpp
+++ b/src/modules/objects/KvsObject_painter.cpp
@@ -76,8 +76,63 @@ const char * const penstyles_tbl[] = {
"dashDotDotLine"
};
+const QPainter::CompositionMode composition_cod[] = {
+ QPainter::CompositionMode_SourceOver,
+ QPainter::CompositionMode_DestinationOver,
+ QPainter::CompositionMode_Clear,
+ QPainter::CompositionMode_Source,
+ QPainter::CompositionMode_Destination,
+ QPainter::CompositionMode_SourceIn,
+ QPainter::CompositionMode_DestinationIn,
+ QPainter::CompositionMode_SourceOut,
+ QPainter::CompositionMode_DestinationOut,
+ QPainter::CompositionMode_SourceAtop,
+ QPainter::CompositionMode_DestinationAtop,
+ QPainter::CompositionMode_Xor,
+ QPainter::CompositionMode_Plus,
+ QPainter::CompositionMode_Multiply,
+ QPainter::CompositionMode_Screen,
+ QPainter::CompositionMode_Overlay,
+ QPainter::CompositionMode_Darken,
+ QPainter::CompositionMode_Lighten,
+ QPainter::CompositionMode_ColorDodge,
+ QPainter::CompositionMode_ColorBurn,
+ QPainter::CompositionMode_HardLight,
+ QPainter::CompositionMode_SoftLight,
+ QPainter::CompositionMode_Difference,
+ QPainter::CompositionMode_Exclusion,
+};
+const char * const composition_tbl[] = {
+ "SourceOver",
+ "DestinationOver",
+ "Clear",
+ "Source",
+ "Destination",
+ "SourceIn",
+ "DestinationIn",
+ "SourceOut",
+ "DestinationOut",
+ "SourceAtop",
+ "DestinationAtop",
+ "Xor",
+ "Plus",
+ "Multiply",
+ "Screen",
+ "Overlay",
+ "Darken",
+ "Lighten",
+ "ColorDodge",
+ "ColorBurn",
+ "HardLight",
+ "SoftLight",
+ "Difference",
+ "Exclusion"
+};
+
#define penstyles_num (sizeof(penstyles_tbl) / sizeof(penstyles_tbl[0]))
+#define composition_num (sizeof(composition_tbl) / sizeof(composition_tbl[0]))
+
const Qt::BrushStyle brushstyles_cod[] = {
Qt::NoBrush,
Qt::SolidPattern,
@@ -471,7 +526,7 @@ KVSO_BEGIN_REGISTERCLASS(KvsObject_painter,"painter","object")
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,setAntialiasing)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,setSmoothPixmapTransform)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,setBackGroundMode)
-
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,setCompositionMode)
// QPainterPath stuff
@@ -514,6 +569,7 @@ KVSO_BEGIN_REGISTERCLASS(KvsObject_painter,"painter","object")
// extra
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,beginPdf)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,drawPixmapWithEffect);
KVSO_END_REGISTERCLASS(KvsObject_painter)
@@ -522,7 +578,7 @@ KVSO_END_REGISTERCLASS(KvsObject_painter)
KVSO_BEGIN_CONSTRUCTOR(KvsObject_painter,KviKvsObject)
m_pPainter = new QPainter();
- bDonotdeleteinternalqpainter=false;
+ bDonotdeleteinternalqpainter=false;
m_pPrinter = 0 ;
m_pDeviceObject=0;
m_pPainterPath=0;
@@ -846,7 +902,7 @@ KVSO_CLASS_FUNCTION(painter,setBrush)
return true;
}
if(pObject->inheritsClass("pixmap"))
- m_pPainter->setBrush(*((KvsObject_pixmap *)pObject)->getPixmap());
+ m_pPainter->setBrush(*((KvsObject_pixmap *)pObject)->getImage());
else c->warning(__tr2qs_ctx("Object Pixmap required!","objects"));
return true;
}
@@ -1083,7 +1139,7 @@ KVSO_CLASS_FUNCTION(painter,begin)
c->warning(__tr2qs_ctx("Pixmap or Widget parameter is not an object","objects"));
return true;
}
- if(pObject->inheritsClass("pixmap"))pd=((KvsObject_pixmap *)pObject)->getPixmap();
+ if(pObject->inheritsClass("pixmap"))pd=((KvsObject_pixmap *)pObject)->getImage();
else if (pObject->inheritsClass("widget")) pd=((KvsObject_widget *)pObject)->widget();
else
{
@@ -1108,7 +1164,7 @@ void KvsObject_painter::attachDevice(KviKvsObject * o,QPaintDevice * p)
// KvsObject_pixmap and KvsObject_widget object have this signal
// it is emitted BEFORE the real QPaintDevice is deleted, so we can eventually
// call m_pPainter->end() in time
-
+ qDebug("Begin painter");
QObject::connect(m_pDeviceObject,SIGNAL(aboutToDie()),this,SLOT(detachDevice()));
m_pPainter->begin(p);
}
@@ -1161,13 +1217,14 @@ KVSO_CLASS_FUNCTION(painter,drawText)
{
CHECK_INTERNAL_POINTER(m_pPainter)
QString szText,szMode;
- kvs_int_t iX,iY,iN=-1;
+ kvs_int_t iX,iY,iN=-1,iW,iH;
KVSO_PARAMETERS_BEGIN(c)
KVSO_PARAMETER("x",KVS_PT_INT,0,iX)
KVSO_PARAMETER("y",KVS_PT_INT,0,iY)
+ KVSO_PARAMETER("w",KVS_PT_INT,0,iW)
+ KVSO_PARAMETER("h",KVS_PT_INT,0,iH)
KVSO_PARAMETER("text",KVS_PT_STRING,0,szText)
- KVSO_PARAMETER("num_chars",KVS_PT_INT,KVS_PF_OPTIONAL,iN)
- KVSO_PARAMETER("mode",KVS_PT_STRING,KVS_PF_OPTIONAL,szMode)
+
KVSO_PARAMETERS_END(c)
if (!szMode.isEmpty() && !KviQString::equalCI(szMode,"Auto"))
{
@@ -1179,7 +1236,14 @@ KVSO_CLASS_FUNCTION(painter,drawText)
return true;
}
}
- m_pPainter->drawText(iX,iY,szText.left(iN));
+ //if(!iN) iN = szText.length();
+ QRect rect;
+ rect.setX(iX);
+ rect.setY(iY);
+ rect.setWidth(iW);
+ rect.setHeight(iH);
+
+ m_pPainter->drawText(rect,szText);
return true;
}
@@ -1212,11 +1276,92 @@ KVSO_CLASS_FUNCTION(painter,drawPixmap)
c->warning(__tr2qs_ctx("Pixmap object required","objects"));
return true;
}
-
- m_pPainter->drawPixmap(QPointF(iX,iY),*((KvsObject_pixmap *)obj)->getPixmap(),QRect(iStartx,iStarty,iEndx,iEndy));
+ QImage *pImage=((KvsObject_pixmap *)obj)->getImage();
+ qDebug("image ");
+ m_pPainter->drawImage(QPointF(iX,iY),*pImage,QRect(iStartx,iStarty,iEndx,iEndy));
return true;
}
+KVSO_CLASS_FUNCTION(painter,drawPixmapWithEffect)
+{
+ CHECK_INTERNAL_POINTER(m_pPainter)
+ QString szEffect;
+ kvs_real_t iX,iY,factor;
+ kvs_int_t r,g,b;
+ KviKvsObject *obj;
+ kvs_hobject_t hObject;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("string_effect",KVS_PT_STRING,0,szEffect)
+ KVSO_PARAMETER("x",KVS_PT_REAL,0,iX)
+ KVSO_PARAMETER("y",KVS_PT_REAL,0,iY)
+ KVSO_PARAMETER("pixmap",KVS_PT_HOBJECT,0,hObject)
+ KVSO_PARAMETER("red",KVS_PT_INTEGER,0,r)
+ KVSO_PARAMETER("green",KVS_PT_INTEGER,0,g)
+ KVSO_PARAMETER("blue",KVS_PT_INTEGER,0,b)
+ KVSO_PARAMETERS_END(c)
+ obj=KviKvsKernel::instance()->objectController()->lookupObject(hObject);
+ if (!obj)
+ {
+ c->warning(__tr2qs_ctx("Pixmap parameter is not an object","objects"));
+ return true;
+ }
+ if (!obj->inheritsClass("pixmap"))
+ {
+ c->warning(__tr2qs_ctx("Pixmap object required","objects"));
+ return true;
+ }
+ QImage *pImage=((KvsObject_pixmap *)obj)->getImage();
+ QImage pDest(pImage->width(),pImage->height(),QImage::Format_ARGB32);
+ QRgb col ;
+ QRgb *dataSource;
+ QRgb *dataDest;
+ int w=pImage->width();
+ int h=pImage->height();
+ if(KviQString::equalCI(szEffect,"add"))
+ {
+ int sumR, sumG, sumB;
+ for(int y=0; y<h; y++)
+ {
+ dataSource = (QRgb *) pImage->scanLine(y);
+ dataDest = (QRgb *) pDest.scanLine(y);
+ for (int x=0; x<w; x++)
+ {
+ col = *dataSource;
+ sumR=qRed(col)+r;
+ sumG=qGreen(col)+g;
+ sumB=qBlue(col)+b;
+ *dataDest++ = qRgba(sumR<255 ?sumR : 255,
+ sumG<255 ?sumG : 255,
+ sumB<255 ?sumB : 255,
+ qAlpha(col));
+ dataSource++;
+ }
+ }
+ }
+ else if(KviQString::equalCI(szEffect,"sub"))
+ {
+ int subR, subG, subB;
+ for(int y=0; y<h; y++)
+ {
+ dataSource = (QRgb *) pImage->scanLine(y);
+ dataDest = (QRgb *) pDest.scanLine(y);
+ for (int x=0; x<w; x++)
+ {
+ col = *dataSource;
+ subR=qRed(col)-r;
+ subG=qGreen(col)-g;
+ subB=qBlue(col)-b;
+ *dataDest++ = qRgba(subR>0 ? subR : 0,
+ subG>0 ? subG : 0,
+ subB>0 ? subB : 0,
+ qAlpha(col));
+ dataSource++;
+ }
+ }
+ }
+ m_pPainter->drawImage(QPointF(iX,iY),pDest);
+ return true;
+}
KVSO_CLASS_FUNCTION(painter,rotate)
{
CHECK_INTERNAL_POINTER(m_pPainter)
@@ -1619,24 +1764,54 @@ KVSO_CLASS_FUNCTION(painter,fillRect)
CHECK_INTERNAL_POINTER(m_pPainter)
kvs_int_t iX,iY,iW,iH;
kvs_int_t iCol1,iCol2,iCol3,iOpacity;
- QString szColorMode;
+ QString szColorMode,szColor;
+ KviKvsVariant *var1,*var2,*var3;
KVSO_PARAMETERS_BEGIN(c)
KVSO_PARAMETER("x",KVS_PT_INT,0,iX)
KVSO_PARAMETER("y",KVS_PT_INT,0,iY)
KVSO_PARAMETER("w",KVS_PT_INT,0,iW)
KVSO_PARAMETER("h",KVS_PT_INT,0,iH)
- KVSO_PARAMETER("Color_1",KVS_PT_INT,0,iCol1)
- KVSO_PARAMETER("Color_2",KVS_PT_INT,0,iCol2)
- KVSO_PARAMETER("Colo3_3",KVS_PT_INT,0,iCol3)
+ KVSO_PARAMETER("Color_1_Or_Colorname",KVS_PT_VARIANT,0,var1)
+ KVSO_PARAMETER("Color_2",KVS_PT_VARIANT,KVS_PF_OPTIONAL,var2)
+ KVSO_PARAMETER("Colo3_3",KVS_PT_VARIANT,KVS_PF_OPTIONAL,var3)
KVSO_PARAMETER("opacity",KVS_PT_INT,KVS_PF_OPTIONAL,iOpacity)
KVSO_PARAMETER("color_mode",KVS_PT_STRING,KVS_PF_OPTIONAL,szColorMode)
KVSO_PARAMETERS_END(c)
- if (c->paramCount()<8) iOpacity=255;
QColor col;
- if(KviQString::equalCI(szColorMode, "HSV"))
- col.setHsv(iCol1,iCol2,iCol3,iOpacity);
+ if (!var1->asInteger(iCol1))
+ {
+ var1->asString(szColor);
+ if (c->paramCount()<6) iOpacity=255;
+ else
+ {
+ if (!var2->asInteger(iOpacity))
+ {
+ c->warning(__tr2qs_ctx("The opacity parameter didn't evaluate to integer","objects"));
+ return true;
+ }
+ }
+ col.setNamedColor(szColor);
+ col.setAlpha(iOpacity);
+ }
else
+ {
+ if(c->paramCount()<7)
+ {
+ c->error(__tr2qs_ctx("Color name or triplette rgb/hsv value required","objects"));
+ return true;
+ }
+ if (!var2->asInteger(iCol2)||!var3->asInteger(iCol3))
+ {
+ c->error(__tr2qs_ctx("One of the triplette parameters didn't evaluate to an integer","objects"));\
+ return true;
+ }
+ if (c->paramCount()<5) iOpacity=255;
+ QColor col;
+ if(KviQString::equalCI(szColorMode, "HSV"))
+ col.setHsv(iCol1,iCol2,iCol3,iOpacity);
+ else
col.setRgb(iCol1,iCol2,iCol3,iOpacity);
+ }
m_pPainter->fillRect(iX,iY,iW,iH,col);
return true;
}
@@ -1718,6 +1893,29 @@ KVSO_CLASS_FUNCTION(painter,drawPath)
return true;
}
+KVSO_CLASS_FUNCTION(painter,setCompositionMode)
+{
+ CHECK_INTERNAL_POINTER(m_pPainter)
+ QString szComposition;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("style",KVS_PT_STRING,0,szComposition)
+ KVSO_PARAMETERS_END(c)
+ bool found=false;
+ unsigned int j = 0;
+ for(; j < composition_num; j++)
+ {
+ if(KviQString::equalCI(szComposition,composition_tbl[j]))
+ {
+ found=true;
+ break;
+ }
+ }
+ if (found){
+ m_pPainter->setCompositionMode(composition_cod[j]);
+ }
+ else c->warning(__tr2qs_ctx("Unknown composition mode '%Q'","objects"),&szComposition);
+ return true;
+}
KVSO_CLASS_FUNCTION(painter,resetPath)
{
Q_UNUSED(c);
diff --git a/src/modules/objects/KvsObject_painter.h b/src/modules/objects/KvsObject_painter.h
index e8529dfb0..7f9508a94 100644
--- a/src/modules/objects/KvsObject_painter.h
+++ b/src/modules/objects/KvsObject_painter.h
@@ -86,6 +86,7 @@ public:
bool translate(KviKvsObjectFunctionCall *c);
bool setPenStyle(KviKvsObjectFunctionCall *c);
bool setBrushStyle(KviKvsObjectFunctionCall *c);
+ bool setCompositionMode(KviKvsObjectFunctionCall *c);
// QT4
bool setOpacity(KviKvsObjectFunctionCall *c);
@@ -113,7 +114,7 @@ public:
bool resetPath(KviKvsObjectFunctionCall *c);
bool beginPdf(KviKvsObjectFunctionCall *c);
-
+bool drawPixmapWithEffect(KviKvsObjectFunctionCall *c);
bool painterDeviceWidth(KviKvsObjectFunctionCall *c);
bool painterDeviceHeight(KviKvsObjectFunctionCall *c);
diff --git a/src/modules/objects/KvsObject_pixmap.cpp b/src/modules/objects/KvsObject_pixmap.cpp
index a84798f3f..02e8110b7 100644
--- a/src/modules/objects/KvsObject_pixmap.cpp
+++ b/src/modules/objects/KvsObject_pixmap.cpp
@@ -50,9 +50,8 @@
@description:
The pixmap class is an off-screen, pixel-based paint device.
@functions:
- !fn: $fill(<widget:object>,<x_offset:integer>,<y:offset>)
- Fills the pixmap with the widget's background color or pixmap.[br]
- Note that x_offset, y_offest are offsets in the widget.
+ !fn: $fill(<colorname, rgb or hsv array value or [<red>,<green>,<blue>][<hue>,<saturation>,<value>],[opacity],[system color:RGB or HSV])
+ Fills the pixmap with color and opacity.[br]
!fn: $resize(<width:integer>,<height:integer>)
Resizes the pixmap to w width and h height. Set wh or hg to 0, to have a null pixmap.
!fn: $scale(<width:integer>,<height:integer>,[<aspect_ratio:string>])
@@ -98,6 +97,11 @@ KVSO_BEGIN_REGISTERCLASS(KvsObject_pixmap,"pixmap","object")
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,loadFromMemoryBuffer)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,height)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,width)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,rotate)
+
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,mirrored)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,setPixel)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,toGrayScale)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,grabWidget)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,frameChangedEvent)
@@ -106,7 +110,9 @@ KVSO_END_REGISTERCLASS(KvsObject_pixmap)
KVSO_BEGIN_CONSTRUCTOR(KvsObject_pixmap,KviKvsObject)
m_pAnimatedPixmap = 0;
+ m_currentType = Image;
m_pPixmap = 0;
+ m_pImage = 0;
KVSO_END_CONSTRUCTOR(KvsObject_pixmap)
@@ -114,44 +120,297 @@ KVSO_BEGIN_DESTRUCTOR(KvsObject_pixmap)
emit aboutToDie();
if (m_pPixmap)delete m_pPixmap;
if (m_pAnimatedPixmap) delete m_pAnimatedPixmap;
+ if (m_pImage) delete m_pImage;
KVSO_END_CONSTRUCTOR(KvsObject_pixmap)
KVSO_CLASS_FUNCTION(pixmap,fill)
{
- KviKvsObject *pObject;
- kvs_int_t iXoffset,iYoffset;
- kvs_hobject_t hObject;
+ kvs_int_t iCol1,iCol2,iCol3,iOpacity;
+ QString szColorMode,szColor;
+ KviKvsVariant *var1,*var2,*var3;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("Color_1_Or_Colorname",KVS_PT_VARIANT,0,var1)
+ KVSO_PARAMETER("Color_2",KVS_PT_VARIANT,KVS_PF_OPTIONAL,var2)
+ KVSO_PARAMETER("Colo3_3",KVS_PT_VARIANT,KVS_PF_OPTIONAL,var3)
+ KVSO_PARAMETER("color_mode",KVS_PT_STRING,KVS_PF_OPTIONAL,szColorMode)
+ KVSO_PARAMETER("opacity",KVS_PT_INT,KVS_PF_OPTIONAL,iOpacity)
+ KVSO_PARAMETERS_END(c)
+ QColor col;
+ if (!var1->asInteger(iCol1))
+ {
+ var1->asString(szColor);
+ if (c->paramCount()<2) iOpacity=255;
+ else
+ {
+ if (!var2->asInteger(iOpacity))
+ {
+ c->warning(__tr2qs_ctx("The opacity parameter didn't evaluate to integer","objects"));
+ return true;
+ }
+ }
+ col.setNamedColor(szColor);
+ col.setAlpha(iOpacity);
+ }
+ else
+ {
+ if(c->paramCount()<3)
+ {
+ c->error(__tr2qs_ctx("Color name or triplette rgb/hsv value required","objects"));
+ return true;
+ }
+ if (!var2->asInteger(iCol2)||!var3->asInteger(iCol3))
+ {
+ c->error(__tr2qs_ctx("One of the triplette parameters didn't evaluate to an integer","objects"));\
+ return true;
+ }
+ if (c->paramCount()<5) iOpacity=255;
+ if(KviQString::equalCI(szColorMode, "HSV"))
+ col.setHsv(iCol1,iCol2,iCol3,iOpacity);
+ else
+ col.setRgb(iCol1,iCol2,iCol3,iOpacity);
+ }
+ if(m_currentType==Image)
+ {
+ if(m_pImage)
+ {
+ if(!m_pPixmap) m_pPixmap = new QPixmap();
+ *m_pPixmap = QPixmap::fromImage(*m_pImage);
+ delete m_pImage;
+ m_pImage = 0;
+ }
+ else m_pPixmap = 0;
+ }
+ else if(m_currentType==AnimatedPixmap)
+ {
+ delete m_pAnimatedPixmap;
+ m_pAnimatedPixmap=0;
+ }
+ m_currentType = Pixmap;
+ if(!m_pPixmap) m_pPixmap=new QPixmap();
+ m_pPixmap->fill(col);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(pixmap,resize)
+{
+ kvs_int_t iWidth,iHeight;
KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("widget",KVS_PT_HOBJECT,0,hObject)
- KVSO_PARAMETER("x_offset",KVS_PT_INT,0,iXoffset)
- KVSO_PARAMETER("y_offset",KVS_PT_INT,0,iYoffset)
+ KVSO_PARAMETER("width",KVS_PT_INTEGER,0,iWidth)
+ KVSO_PARAMETER("height",KVS_PT_INTEGER,0,iHeight)
KVSO_PARAMETERS_END(c)
+ if(m_currentType==Image)
+ {
+ if(m_pImage)
+ delete m_pImage;
+ m_pImage = 0;
+ }
+ else if(m_currentType==AnimatedPixmap)
+ {
+ if (m_pAnimatedPixmap)
+ delete m_pAnimatedPixmap;
+ m_pAnimatedPixmap=0;
+ }
+ else if(m_pPixmap)
+ {
+ delete m_pPixmap;
+ }
+ m_currentType = Image;
+ m_pImage=new QImage(iWidth,iHeight,QImage::Format_ARGB32_Premultiplied);
+ m_pImage->fill(Qt::transparent);
+ return true;
+}
- pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject);
- CHECK_HOBJECT_IS_WIDGET(pObject)
- if (m_pAnimatedPixmap)
+KVSO_CLASS_FUNCTION(pixmap,setPixel)
+{
+ kvs_int_t iCol1,iCol2,iCol3,iOpacity,iX,iY;
+ QString szColorMode,szColor;
+ KviKvsVariant *var1,*var2,*var3;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("x",KVS_PT_INTEGER,0,iX)
+ KVSO_PARAMETER("y",KVS_PT_INTEGER,0,iY)
+ KVSO_PARAMETER("Color_1_Or_Colorname",KVS_PT_VARIANT,0,var1)
+ KVSO_PARAMETER("Color_2",KVS_PT_VARIANT,KVS_PF_OPTIONAL,var2)
+ KVSO_PARAMETER("Colo3_3",KVS_PT_VARIANT,KVS_PF_OPTIONAL,var3)
+ KVSO_PARAMETER("color_mode",KVS_PT_STRING,KVS_PF_OPTIONAL,szColorMode)
+ KVSO_PARAMETER("opacity",KVS_PT_INT,KVS_PF_OPTIONAL,iOpacity)
+ KVSO_PARAMETERS_END(c)
+ QColor col;
+ if (!var1->asInteger(iCol1))
+ {
+ var1->asString(szColor);
+ if (c->paramCount()<4) iOpacity=255;
+ else
+ {
+ if (!var2->asInteger(iOpacity))
+ {
+ c->warning(__tr2qs_ctx("The opacity parameter didn't evaluate to integer","objects"));
+ return true;
+ }
+ }
+ col.setNamedColor(szColor);
+ col.setAlpha(iOpacity);
+ }
+ else
+ {
+ if(c->paramCount()<5)
+ {
+ c->error(__tr2qs_ctx("Color name or triplette rgb/hsv value required","objects"));
+ return true;
+ }
+ if (!var2->asInteger(iCol2)||!var3->asInteger(iCol3))
+ {
+ c->error(__tr2qs_ctx("One of the triplette parameters didn't evaluate to an integer","objects"));\
+ return true;
+ }
+ if (c->paramCount()<7) iOpacity=255;
+ if(KviQString::equalCI(szColorMode, "HSV"))
+ col.setHsv(iCol1,iCol2,iCol3,iOpacity);
+ else
+ col.setRgb(iCol1,iCol2,iCol3,iOpacity);
+ }
+
+
+ if(m_currentType==AnimatedPixmap)
{
- delete m_pAnimatedPixmap;
- m_pAnimatedPixmap=0;
+ c->warning(__tr2qs_ctx("AnimatedPixmap not supported","objects"));
+ return true;
}
- if(!m_pPixmap) m_pPixmap=new QPixmap();
- m_pPixmap->fill(((QWidget *)(pObject->object())),iXoffset,iYoffset);
+ else if((m_currentType==Image && !m_pImage) || (m_currentType==Pixmap && !m_pPixmap))
+ {
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ }
+ else if(m_currentType==Pixmap)
+ {
+ if(m_pImage) delete m_pImage;
+ *m_pImage = m_pPixmap->toImage();
+ delete m_pPixmap;
+ }
+ m_currentType = Image;
+ m_pImage->setPixel(iX,iY,col.rgba());
return true;
}
-KVSO_CLASS_FUNCTION(pixmap,resize)
+
+KVSO_CLASS_FUNCTION(pixmap,rotate)
{
- kvs_int_t iWidth,iHeight;
+ kvs_real_t dAngle;
+ QString szAxis;
KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("width",KVS_PT_INTEGER,0,iWidth)
- KVSO_PARAMETER("height",KVS_PT_INTEGER,0,iHeight)
+ KVSO_PARAMETER("angle",KVS_PT_DOUBLE,0,dAngle)
+ KVSO_PARAMETER("axis",KVS_PT_STRING,KVS_PF_OPTIONAL,szAxis)
KVSO_PARAMETERS_END(c)
- if(m_pPixmap) delete m_pPixmap;
- if (m_pAnimatedPixmap){
- delete m_pAnimatedPixmap;
- m_pAnimatedPixmap=0;
+ Qt::Axis axis = Qt::ZAxis;
+ if(!szAxis.isEmpty())
+ {
+ if (KviQString::equalCI(szAxis,"XAxis"))axis=Qt::XAxis;
+ else if (KviQString::equalCI(szAxis,"YAxis")) axis=Qt::YAxis;
+ else if (KviQString::equalCI(szAxis,"ZAxis")) axis=Qt::ZAxis;
+ else c->warning(__tr2qs_ctx("Unknown axis '%Q' switching to default ZAxis","objects"),&szAxis);
+ }
+ if(m_currentType==Pixmap)
+ {
+ if(m_pPixmap){
+ if(!m_pImage) m_pImage = new QImage();
+ *m_pImage = m_pPixmap->toImage();
+ }
+ else{
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ }
+ }
+ else if(m_currentType==AnimatedPixmap)
+ {
+ c->warning(__tr2qs_ctx("AnimatedPixmap not supported","objects"));
+ return true;
+ }
+ if(!m_pImage)
+ {
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ }
+ m_currentType = Image;
+ QTransform transform;
+ transform.rotate(dAngle,axis);
+ *m_pImage=m_pImage->transformed(transform);
+ return true;
+}
+
+
+KVSO_CLASS_FUNCTION(pixmap,mirrored)
+{
+ kvs_real_t dAngle;
+ bool bHorizontal,bVertical;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("bHorizontal",KVS_PT_BOOLEAN,0,bHorizontal)
+ KVSO_PARAMETER("bvertical",KVS_PT_BOOLEAN,0,bVertical)
+
+ KVSO_PARAMETERS_END(c)
+ if(m_currentType==Pixmap)
+ {
+ if(m_pPixmap){
+ if(!m_pImage) m_pImage = new QImage();
+ *m_pImage = m_pPixmap->toImage();
+ }
+ else{
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ }
+ }
+ else if(m_currentType==AnimatedPixmap)
+ {
+ c->warning(__tr2qs_ctx("AnimatedPixmap not supported","objects"));
+ return true;
+ }
+ if(!m_pImage)
+ {
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ }
+ m_currentType = Image;
+ *m_pImage=m_pImage->mirrored(bHorizontal,bVertical);
+ return true;
+}
+
+
+KVSO_CLASS_FUNCTION(pixmap,toGrayScale)
+{
+ if(m_currentType==Pixmap)
+ {
+ if(m_pPixmap){
+ if(!m_pImage) m_pImage = new QImage();
+ *m_pImage = m_pPixmap->toImage();
+ }
+ else{
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ }
+ }
+ else if(m_currentType==AnimatedPixmap)
+ {
+ c->warning(__tr2qs_ctx("AnimatedPixmap not supported","objects"));
+ return true;
+ }
+ if(!m_pImage)
+ {
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ }
+ m_currentType = Image;
+ QRgb col;
+ int w=m_pImage->width();
+ int h=m_pImage->height();
+ int res;
+ for(int y=0; y<h; y++)
+ {
+ QRgb *data = (QRgb *) m_pImage->scanLine(y);
+ for (int x=0; x<w; x++)
+ {
+ col = *data;
+ res = (qRed(col)+qGreen(col)+qBlue(col))/3;
+ *data++ = qRgba(res, res, res,qAlpha(col));
+ }
}
- m_pPixmap=new QPixmap(iWidth,iHeight);
return true;
}
KVSO_CLASS_FUNCTION(pixmap,scale)
@@ -164,7 +423,6 @@ KVSO_CLASS_FUNCTION(pixmap,scale)
KVSO_PARAMETER("aspect_ratio",KVS_PT_STRING,KVS_PF_OPTIONAL,szAspectRatio)
KVSO_PARAMETERS_END(c)
Qt::AspectRatioMode ratio=Qt::KeepAspectRatio;
- if(!m_pPixmap || m_pAnimatedPixmap) return true;
if(!szAspectRatio.isEmpty())
{
if(KviQString::equalCI(szAspectRatio,"IgnoreAspectRatio")) ratio=Qt::IgnoreAspectRatio;
@@ -172,8 +430,23 @@ KVSO_CLASS_FUNCTION(pixmap,scale)
else if (KviQString::equalCI(szAspectRatio,"KeepAspectRatioByExpanding")) ratio=Qt::KeepAspectRatioByExpanding;
else c->warning(__tr2qs_ctx("Unknown aspect ratio %Q - Switching to KeepAspectRatio ratio","objects"),&szAspectRatio);
}
- if (m_pAnimatedPixmap) m_pAnimatedPixmap->resize(QSize(iWidth,iHeight),ratio);
- else *m_pPixmap=m_pPixmap->scaled(iWidth,iHeight,ratio,Qt::SmoothTransformation);
+ if(m_currentType==Pixmap)
+ {
+ if(m_pPixmap)
+ *m_pPixmap=m_pPixmap->scaled(iWidth,iHeight,ratio,Qt::SmoothTransformation);
+ else{
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ }
+ }
+ else if (m_currentType==AnimatedPixmap)
+ m_pAnimatedPixmap->resize(QSize(iWidth,iHeight),ratio);
+ else if(m_pImage)
+ *m_pImage=m_pImage->scaled(iWidth,iHeight,ratio,Qt::SmoothTransformation);
+ else{
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ }
return true;
}
KVSO_CLASS_FUNCTION(pixmap,loadAnimation)
@@ -185,14 +458,17 @@ KVSO_CLASS_FUNCTION(pixmap,loadAnimation)
KVSO_PARAMETERS_END(c)
if(!QFile::exists(szFile))
{
- c->warning(__tr2qs_ctx("I can't find the specified file '%Q'.","objects"),&szFile);
- return true;
+ c->warning(__tr2qs_ctx("I can't find the specified file '%Q'.","objects"),&szFile);
+ return true;
+ }
+ if (m_pAnimatedPixmap){
+ delete m_pAnimatedPixmap;
+ m_pAnimatedPixmap = 0;
}
- if (m_pAnimatedPixmap) delete m_pAnimatedPixmap;
if (m_pPixmap)
{
- delete m_pPixmap;
- m_pPixmap=0;
+ delete m_pPixmap;
+ m_pPixmap=0;
}
m_pAnimatedPixmap= new KviAnimatedPixmap(szFile);
connect(m_pAnimatedPixmap,SIGNAL(frameChanged()),this,SLOT(frameChanged()));
@@ -221,12 +497,21 @@ KVSO_CLASS_FUNCTION(pixmap,load)
KVSO_PARAMETERS_END(c)
if(!QFile::exists(szFile))
{
- c->warning(__tr2qs_ctx("I can't find the specified file '%Q'.","objects"),&szFile);
- return true;
+ c->warning(__tr2qs_ctx("I can't find the specified file '%Q'.","objects"),&szFile);
+ return true;
}
- if (m_pAnimatedPixmap) delete m_pAnimatedPixmap;
+ if(!m_pImage) m_pImage=new QImage();
+
+ m_pImage->load(szFile);
+ return true;
+ if (m_currentType==Image && m_pImage)
+ delete m_pImage;
+ else if (m_currentType==AnimatedPixmap && m_pAnimatedPixmap)
+ delete m_pAnimatedPixmap;
if(!m_pPixmap) m_pPixmap=new QPixmap();
+ m_currentType=Pixmap;
m_pPixmap->load(szFile);
+ qDebug("alpha %i",m_pPixmap->hasAlpha());
return true;
}
KVSO_CLASS_FUNCTION(pixmap,save)
@@ -235,15 +520,41 @@ KVSO_CLASS_FUNCTION(pixmap,save)
KVSO_PARAMETERS_BEGIN(c)
KVSO_PARAMETER("file",KVS_PT_STRING,0,szFile)
KVSO_PARAMETERS_END(c)
- if (m_pAnimatedPixmap) m_pAnimatedPixmap->pixmap()->save(szFile);
- else if(m_pPixmap) m_pPixmap->save(szFile);
+ if(m_currentType==Pixmap)
+ {
+ if(m_pPixmap)
+ m_pPixmap->save(szFile);
+ else{
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ }
+ }
+ else if(m_currentType==Image)
+ {
+ if(m_pImage)
+ m_pImage->save(szFile);
+ else{
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ }
+ }
+ else m_pAnimatedPixmap->pixmap()->save(szFile);
return true;
}
void KvsObject_pixmap::setInternalPixmap(QPixmap *pPixmap)
{
- delete m_pPixmap;
- m_pPixmap=pPixmap;
+ if(m_currentType==Image && m_pImage) delete m_pImage;
+ else if(m_currentType==Pixmap && m_pPixmap) delete m_pPixmap;
+ m_currentType=Pixmap;
+ m_pPixmap=pPixmap;
+}
+void KvsObject_pixmap::setInternalImage(QImage *pImage)
+{
+ if(m_currentType==Image && m_pImage) delete m_pImage;
+ else if(m_currentType==Pixmap && m_pPixmap) delete m_pPixmap;
+ m_currentType=Image;
+ m_pImage=pImage;
}
KVSO_CLASS_FUNCTION(pixmap,loadFromMemoryBuffer)
{
@@ -307,25 +618,30 @@ KVSO_CLASS_FUNCTION(pixmap,grabWidget)
}
KVSO_CLASS_FUNCTION(pixmap,height)
{
- if(!m_pAnimatedPixmap && !m_pPixmap) c->returnValue()->setInteger(0);
- else if(m_pAnimatedPixmap) c->returnValue()->setInteger(m_pAnimatedPixmap->size().height());
- else c->returnValue()->setInteger(m_pPixmap->height());
+ if (m_currentType==Image && m_pImage) c->returnValue()->setInteger(m_pImage->height());
+ else if(m_currentType==Pixmap && m_pPixmap) c->returnValue()->setInteger(m_pPixmap->height());
+ else c->returnValue()->setInteger(0);
+ //else if(m_pAnimatedPixmap) c->returnValue()->setInteger(m_pAnimatedPixmap->size().height());
+ //else c->returnValue()->setInteger(m_pPixmap->height());
return true;
}
KVSO_CLASS_FUNCTION(pixmap,width)
{
- if(!m_pAnimatedPixmap && !m_pPixmap) c->returnValue()->setInteger(0);
- else if(m_pAnimatedPixmap) c->returnValue()->setInteger(m_pAnimatedPixmap->size().width());
- else c->returnValue()->setInteger(m_pPixmap->width());
- return true;
+
+ if (m_currentType==Image && m_pImage) c->returnValue()->setInteger(m_pImage->width());
+ else if(m_currentType==Pixmap && m_pPixmap) c->returnValue()->setInteger(m_pPixmap->width());
+ else c->returnValue()->setInteger(0);
+ //else if(m_pAnimatedPixmap) c->returnValue()->setInteger(m_pAnimatedPixmap->size().height());
+ //else c->returnValue()->setInteger(m_pPixmap->height());
+ return true;
}
-QPixmap * KvsObject_pixmap::getPixmap()
+/*QPixmap * KvsObject_pixmap::getPixmap()
{
if (!m_pAnimatedPixmap && !m_pPixmap) return new QPixmap();
else if(m_pAnimatedPixmap) return m_pAnimatedPixmap->pixmap();
else return m_pPixmap;
-}
+}*/
KVSO_CLASS_FUNCTION(pixmap,frameChangedEvent)
{
emitSignal("frameChanged",c);
diff --git a/src/modules/objects/KvsObject_pixmap.h b/src/modules/objects/KvsObject_pixmap.h
index 154713872..e0845224c 100644
--- a/src/modules/objects/KvsObject_pixmap.h
+++ b/src/modules/objects/KvsObject_pixmap.h
@@ -43,12 +43,45 @@ class KvsObject_pixmap : public KviKvsObject
// Q_PROPERTY(QPixmap pixmap READ getPixmap)
public:
KVSO_DECLARE_OBJECT(KvsObject_pixmap)
- QPixmap * getPixmap();
- void setInternalPixmap(QPixmap *p);
- //QPixmap * pixmap(){ return m_pPixmap; }
+ enum Type { Pixmap, AnimatedPixmap, Image };
+ Type m_currentType;
+ void setInternalPixmap(QPixmap *pPixmap);
+ void setInternalImage(QImage *pImage);
+
+ QImage * getImage()
+ {
+ if(!m_pImage) m_pImage = new QImage();
+ if(m_currentType==Pixmap)
+ {
+ if(m_pPixmap){
+ *m_pImage = m_pPixmap->toImage();
+ delete m_pPixmap;
+ m_pPixmap = 0;
+ }
+ }
+ m_currentType = Image;
+ return m_pImage;
+ }
+
+ QPixmap * getPixmap()
+ {
+ if(!m_pPixmap) m_pPixmap = new QPixmap();
+ if(m_currentType==Image)
+ {
+ if(m_pImage){
+ *m_pPixmap = m_pPixmap->fromImage(*m_pImage);
+ delete m_pImage;
+ m_pImage = 0;
+ }
+ }
+ m_currentType = Pixmap;
+ return m_pPixmap;
+ }
+
protected:
KviAnimatedPixmap * m_pAnimatedPixmap;
QPixmap * m_pPixmap;
+ QImage * m_pImage;
signals:
void aboutToDie();
protected:
@@ -65,8 +98,11 @@ protected:
bool height(KviKvsObjectFunctionCall *c);
bool width(KviKvsObjectFunctionCall *c);
bool grabWidget(KviKvsObjectFunctionCall *c);
-// bool setOpacity(KviKvsObjectFunctionCall *c);
bool loadFromMemoryBuffer(KviKvsObjectFunctionCall *c);
+ bool rotate(KviKvsObjectFunctionCall *c);
+ bool toGrayScale(KviKvsObjectFunctionCall *c);
+ bool mirrored(KviKvsObjectFunctionCall *c);
+ bool setPixel(KviKvsObjectFunctionCall *c);
bool frameChangedEvent(KviKvsObjectFunctionCall *c);
diff --git a/src/modules/objects/KvsObject_treeWidget.h b/src/modules/objects/KvsObject_treeWidget.h
index 05fb3f4cc..aabbafdf7 100644
--- a/src/modules/objects/KvsObject_treeWidget.h
+++ b/src/modules/objects/KvsObject_treeWidget.h
@@ -43,6 +43,8 @@ public:
protected:
virtual bool init(KviKvsRunTimeContext * pContext,KviKvsVariantList *pParams);
+
+ bool setBackgroundImage(KviKvsObjectFunctionCall *c);
bool addColumn(KviKvsObjectFunctionCall *c);
bool setColumnText(KviKvsObjectFunctionCall *c);
bool takeItem(KviKvsObjectFunctionCall *c);
diff --git a/src/modules/objects/KvsObject_treeWidgeteItem.cpp b/src/modules/objects/KvsObject_treeWidgeteItem.cpp
index da7422687..8e7903227 100644
--- a/src/modules/objects/KvsObject_treeWidgeteItem.cpp
+++ b/src/modules/objects/KvsObject_treeWidgeteItem.cpp
@@ -192,6 +192,7 @@ bool KvsObject_treeWidgetItem::init(KviKvsRunTimeContext * pContext,KviKvsVarian
return false;
}
}
+
return true;
}
diff --git a/src/modules/objects/KvsObject_webView.cpp b/src/modules/objects/KvsObject_webView.cpp
index 6e3b5e9b9..f164835f0 100644
--- a/src/modules/objects/KvsObject_webView.cpp
+++ b/src/modules/objects/KvsObject_webView.cpp
@@ -32,7 +32,7 @@
#include "KviLocale.h"
#if defined(COMPILE_WEBKIT_SUPPORT)
-#include <QtWebKit/QWebView>
+#include <QWebView>
#include <QWebSettings>
#include <QWebElement>
#include <QNetworkRequest>
@@ -260,9 +260,9 @@ KVSO_CLASS_FUNCTION(webView,makePreview)
{
CHECK_INTERNAL_POINTER(widget())
QSize size=((QWebView *)widget())->page()->mainFrame()->contentsSize();
- QImage image(212,142, QImage::Format_RGB32);
+ QImage *pImage=new QImage(212,142, QImage::Format_RGB32);
QWebFrame *pFrame=((QWebView *)widget())->page()->mainFrame();
- QPainter painter(&image);
+ QPainter painter(pImage);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setRenderHint(QPainter::TextAntialiasing, true);
painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
@@ -279,12 +279,10 @@ KVSO_CLASS_FUNCTION(webView,makePreview)
painter.scale(dWScale,dHScale);
pFrame->documentElement().render(&painter);
painter.end();
- QPixmap *pPixmap=new QPixmap();
- *pPixmap=pPixmap->fromImage(image);
KviKvsObjectClass * pClass = KviKvsKernel::instance()->objectController()->lookupClass("pixmap");
KviKvsVariantList params;
KviKvsObject * pObject = pClass->allocateInstance(0,"internalpixmap",c->context(),&params);
- ((KvsObject_pixmap *)pObject)->setInternalPixmap(pPixmap);
+ ((KvsObject_pixmap *)pObject)->setInternalImage(pImage);
c->returnValue()->setHObject(pObject->handle());
return true;
}
diff --git a/src/modules/objects/KvsObject_webView.h b/src/modules/objects/KvsObject_webView.h
index 3e16c0ed0..f9b76875e 100644
--- a/src/modules/objects/KvsObject_webView.h
+++ b/src/modules/objects/KvsObject_webView.h
@@ -30,8 +30,8 @@
#include "object_macros.h"
#include <QFile>
#include <QNetworkAccessManager>
-#include <QtWebKit/QWebView>
-#include <QtWebKit/QWebFrame>
+#include <QWebView>
+#include <QWebFrame>
#include <QWebElement>
class KvsObject_webView : public KviKvsObject
diff --git a/src/modules/objects/KvsObject_widget.cpp b/src/modules/objects/KvsObject_widget.cpp
index 0d1550e9e..2a2cfe588 100644
--- a/src/modules/objects/KvsObject_widget.cpp
+++ b/src/modules/objects/KvsObject_widget.cpp
@@ -37,6 +37,7 @@
#include "KviStatusBar.h"
#include "KvsObject_painter.h"
+
#include <QKeyEvent>
#include <QDesktopWidget>
#include <QWidget>
@@ -683,7 +684,7 @@ KVSO_BEGIN_REGISTERCLASS(KvsObject_widget,"widget","object")
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,colorPalette)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setStyleSheet)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setKeyShortcut)
-
+KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,grab)
// statusbar
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,insertIntoStatusBar)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,removeFromStatusBar)
@@ -720,7 +721,15 @@ KVSO_END_CONSTRUCTOR(KvsObject_widget)
bool KvsObject_widget::init(KviKvsRunTimeContext *c,KviKvsVariantList *)
{
setObject(new KviKvsWidget(this,parentScriptWidget()));
- m_pContext=c;
+ //qDebug("abc");
+ /*QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect(widget());
+ effect->setColor(QColor(0, 0, 0, 255));
+ effect->setBlurRadius(20);
+ widget()->setGraphicsEffect(effect);
+ if (!widget()->graphicsEffect()) qDebug("non settato");
+ else qDebug("settato");
+ */
+ m_pContext=c;
widget()->setObjectName(getName());
return true;
}
@@ -1990,8 +1999,7 @@ KVSO_CLASS_FUNCTION(widget,setKeyShortcut)
KVSO_CLASS_FUNCTION(widget,insertIntoStatusBar)
{
CHECK_INTERNAL_POINTER(widget())
- qDebug("instertinto");
- if (g_pMainWindow->mainStatusBar())
+ if (g_pMainWindow->mainStatusBar())
g_pMainWindow->mainStatusBar()->insertPermanentWidgetAtTheEnd(widget(),0);
return true;
}
@@ -2002,6 +2010,39 @@ KVSO_CLASS_FUNCTION(widget,removeFromStatusBar)
g_pMainWindow->statusBar()->removeWidget(widget());
return true;
}
+KVSO_CLASS_FUNCTION(widget,grab)
+{
+ qDebug("Grab");
+ CHECK_INTERNAL_POINTER(widget())
+ KviKvsObject *ob;
+ kvs_hobject_t hObject;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("widget",KVS_PT_HOBJECT,0,hObject)
+ KVSO_PARAMETERS_END(c)
+ qDebug("Get widget");
+ ob=KviKvsKernel::instance()->objectController()->lookupObject(hObject);
+ if (!ob)
+ {
+ c->warning(__tr2qs_ctx("Widget parameter is not an object","objects"));
+ return true;
+ }
+ qDebug("check widgetype");
+ if(!ob->object()->isWidgetType())
+ {
+ c->warning(__tr2qs_ctx("Widget object required","objects"));
+ return true;
+ }
+
+ QPixmap *pPixmap=new QPixmap();
+ qDebug("grabbing");
+ *pPixmap=QPixmap::grabWidget(((QWidget *)(ob->object())));
+ KviKvsObjectClass * pClass = KviKvsKernel::instance()->objectController()->lookupClass("pixmap");
+ KviKvsVariantList params;
+ KviKvsObject * pObject = pClass->allocateInstance(0,"internalpixmap",c->context(),&params);
+ ((KvsObject_pixmap *)pObject)->setInternalPixmap(pPixmap);
+ c->returnValue()->setHObject(pObject->handle());
+ return true;
+}
#ifndef COMPILE_USE_STANDALONE_MOC_SOURCES
diff --git a/src/modules/objects/KvsObject_widget.h b/src/modules/objects/KvsObject_widget.h
index cc2610ff0..200492e85 100644
--- a/src/modules/objects/KvsObject_widget.h
+++ b/src/modules/objects/KvsObject_widget.h
@@ -30,6 +30,8 @@
#include "KviTalToolTip.h"
#include "object_macros.h"
+#include <QGraphicsEffect>
+
#ifdef COMPILE_WEBKIT_SUPPORT
#include <QtWebKit/QWebView>
#endif
@@ -51,6 +53,7 @@ protected:
#endif
virtual bool eventFilter(QObject *o,QEvent *e);
KviKvsRunTimeContext *m_pContext;
+ QGraphicsDropShadowEffect *pGraphicsEffect;
// ok, it is clear that we're messing with the naming conventions for the
// object classes :D
// let's try to use this one:
@@ -120,6 +123,8 @@ protected:
bool windowTitle(KviKvsObjectFunctionCall *c);
bool x(KviKvsObjectFunctionCall *);
bool y(KviKvsObjectFunctionCall *);
+
+ bool grab(KviKvsObjectFunctionCall *);
#ifdef COMPILE_WEBKIT_SUPPORT
bool setWebView(KviKvsObjectFunctionCall *c);
#endif
diff --git a/src/modules/objects/libkviobjects.cpp b/src/modules/objects/libkviobjects.cpp
index 69461fe5e..c3ef16822 100644
--- a/src/modules/objects/libkviobjects.cpp
+++ b/src/modules/objects/libkviobjects.cpp
@@ -28,6 +28,8 @@
#include "KvsObject_checkBox.h"
#include "KvsObject_comboBox.h"
#include "KvsObject_dialog.h"
+#include "KvsObject_colorDialog.h"
+
#include "KvsObject_dockWindow.h"
#include "KvsObject_file.h"
#include "KvsObject_ftp.h"
@@ -102,9 +104,9 @@ static bool objects_module_cleanup(KviModule *)
#if defined(COMPILE_WEBKIT_SUPPORT)
KvsObject_webView::unregisterSelf();
#endif
- KvsObject_memoryBuffer::unregisterSelf();
+ KvsObject_memoryBuffer::unregisterSelf();
KvsObject_process::unregisterSelf();
- KvsObject_trayIcon::unregisterSelf();
+ KvsObject_trayIcon::unregisterSelf();
KvsObject_ftp::unregisterSelf();
KvsObject_http::unregisterSelf();
KvsObject_socket::unregisterSelf();
@@ -138,18 +140,18 @@ static bool objects_module_cleanup(KviModule *)
KvsObject_vBox::unregisterSelf();
KvsObject_label::unregisterSelf();
KvsObject_groupBox::unregisterSelf();
+ KvsObject_colorDialog::unregisterSelf();
KvsObject_dialog::unregisterSelf();
KvsObject_checkBox::unregisterSelf();
KvsObject_textBrowser::unregisterSelf();
KvsObject_textedit::unregisterSelf();
KvsObject_button::unregisterSelf();
- KvsObject_dateTimeEdit::unregisterSelf();
- KvsObject_tableWidget::unregisterSelf();
- KvsObject_widget::unregisterSelf();
+ KvsObject_dateTimeEdit::unregisterSelf();
+ KvsObject_tableWidget::unregisterSelf();
+ KvsObject_widget::unregisterSelf();
KvsObject_list::unregisterSelf();
- KvsObject_sql::unregisterSelf();
+ KvsObject_sql::unregisterSelf();
KvsObject_buttonGroup::unregisterSelf();
-
return true;
}
@@ -760,7 +762,6 @@ static bool objects_module_init(KviModule * m)
// Derived classes must be registered after the base ones.
KvsObject_buttonGroup::registerSelf();
-
KvsObject_sql::registerSelf();
KvsObject_list::registerSelf();
KvsObject_widget::registerSelf();
@@ -771,6 +772,7 @@ static bool objects_module_init(KviModule * m)
KvsObject_textBrowser::registerSelf();
KvsObject_checkBox::registerSelf();
KvsObject_dialog::registerSelf();
+ KvsObject_colorDialog::registerSelf();
KvsObject_groupBox::registerSelf();
KvsObject_label::registerSelf();
KvsObject_vBox::registerSelf();
@@ -804,7 +806,7 @@ static bool objects_module_init(KviModule * m)
KvsObject_socket::registerSelf();
KvsObject_http::registerSelf();
KvsObject_ftp::registerSelf();
- KvsObject_trayIcon::registerSelf();
+ KvsObject_trayIcon::registerSelf();
KvsObject_process::registerSelf();
KvsObject_memoryBuffer::registerSelf();
#if defined(COMPILE_WEBKIT_SUPPORT)