Index: src/common/Makefile ================================================================== --- src/common/Makefile +++ src/common/Makefile @@ -1,11 +1,12 @@ include ../../extra.mk STATIC_PIC_LIB_NOINST = ${COMMON_LIB_A} STATIC_LIB_NOINST = ${COMMON_A} -SRCS = OFData+QByteArray.mm \ +SRCS = OFColor+QColor.mm \ + OFData+QByteArray.mm \ OFString+QString.mm include ../../buildsys.mk CPPFLAGS += -I. -I../QtCore ADDED src/common/OFColor+QColor.h Index: src/common/OFColor+QColor.h ================================================================== --- src/common/OFColor+QColor.h +++ src/common/OFColor+QColor.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2018, Jonathan Schleifer + * + * https://heap.zone/git/objqt.git + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice is present in all copies. + * + * 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. + */ + +#import + +#include + +@interface OFColor (QColor) ++ (instancetype)colorWithQColor: (const QColor &)qColor; +- (instancetype)initWithQColor: (const QColor &)qColor; +- (QColor)qColor; +@end + +namespace ObjQt { + +static OF_INLINE OFColor * +toOF(const QColor &qColor) +{ + if (!qColor.isValid()) + return nil; + + return [OFColor colorWithQColor: qColor]; +} + +static OF_INLINE QColor +toQt(OFColor *color) +{ + if (color == nil) + return QColor(); + + return [color qColor]; +} + +} ADDED src/common/OFColor+QColor.mm Index: src/common/OFColor+QColor.mm ================================================================== --- src/common/OFColor+QColor.mm +++ src/common/OFColor+QColor.mm @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2018, Jonathan Schleifer + * + * https://heap.zone/git/objqt.git + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice is present in all copies. + * + * 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. + */ + +#import "OFColor+QColor.h" + +@implementation OFColor (QColor) ++ (instancetype)colorWithQColor: (const QColor &)qColor +{ + return [[[self alloc] initWithQColor: qColor] autorelease]; +} + +- (instancetype)initWithQColor: (const QColor &)qColor +{ + return [self initWithRed: qColor.redF() + green: qColor.greenF() + blue: qColor.blueF() + alpha: qColor.alphaF()]; +} + +- (QColor)qColor +{ + QColor qColor; + float red, green, blue, alpha; + + [self getRed: &red + green: &green + blue: &blue + alpha: &alpha]; + + qColor.setRedF(red); + qColor.setGreenF(green); + qColor.setBlueF(blue); + qColor.setAlphaF(alpha); + + return qColor; +} +@end Index: src/common/OFData+QByteArray.h ================================================================== --- src/common/OFData+QByteArray.h +++ src/common/OFData+QByteArray.h @@ -24,10 +24,11 @@ #include @interface OFData (QByteArray) + (instancetype)dataWithQByteArray: (const QByteArray &)qByteArray; +- (instancetype)initWithQByteArray: (const QByteArray &)qByteArray; - (QByteArray)qByteArray; @end namespace ObjQt { Index: src/common/OFData+QByteArray.mm ================================================================== --- src/common/OFData+QByteArray.mm +++ src/common/OFData+QByteArray.mm @@ -23,15 +23,20 @@ #import "OFData+QByteArray.h" @implementation OFData (QByteArray) + (instancetype)dataWithQByteArray: (const QByteArray &)qByteArray { - return [OFData dataWithItems: qByteArray.data() - count: qByteArray.count()]; + return [[[self alloc] initWithQByteArray: qByteArray] autorelease]; +} + +- (instancetype)initWithQByteArray: (const QByteArray &)qByteArray +{ + return [self initWithItems: qByteArray.data() + count: qByteArray.count()]; } - (QByteArray)qByteArray { return QByteArray((const char *)[self items], [self count] * [self itemSize]); } @end Index: src/common/OFString+QString.h ================================================================== --- src/common/OFString+QString.h +++ src/common/OFString+QString.h @@ -24,11 +24,11 @@ #include @interface OFString (QString) + (instancetype)stringWithQString: (const QString &)qString; -- initWithQString: (const QString &)qString; +- (instancetype)initWithQString: (const QString &)qString; - (QString)qString; @end namespace ObjQt { Index: src/common/OFString+QString.mm ================================================================== --- src/common/OFString+QString.mm +++ src/common/OFString+QString.mm @@ -21,16 +21,16 @@ */ #import "OFString+QString.h" @implementation OFString (QString) -+ stringWithQString: (const QString &)qString ++ (instancetype)stringWithQString: (const QString &)qString { return [[[self alloc] initWithQString: qString] autorelease]; } -- initWithQString: (const QString &)qString +- (instancetype)initWithQString: (const QString &)qString { static_assert(sizeof(QChar) == sizeof(char16_t), "QChar and char16_t have a different size!"); return [self initWithUTF16String: (char16_t *)qString.data()