diff --git a/src/common/Makefile b/src/common/Makefile index 13e5718..71ff218 100644 --- a/src/common/Makefile +++ b/src/common/Makefile @@ -3,7 +3,8 @@ 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 diff --git a/src/common/OFColor+QColor.h b/src/common/OFColor+QColor.h new file mode 100644 index 0000000..88569f3 --- /dev/null +++ b/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]; +} + +} diff --git a/src/common/OFColor+QColor.mm b/src/common/OFColor+QColor.mm new file mode 100644 index 0000000..b5a72e4 --- /dev/null +++ b/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 diff --git a/src/common/OFData+QByteArray.h b/src/common/OFData+QByteArray.h index ba2d129..9aac02d 100644 --- a/src/common/OFData+QByteArray.h +++ b/src/common/OFData+QByteArray.h @@ -26,6 +26,7 @@ @interface OFData (QByteArray) + (instancetype)dataWithQByteArray: (const QByteArray &)qByteArray; +- (instancetype)initWithQByteArray: (const QByteArray &)qByteArray; - (QByteArray)qByteArray; @end diff --git a/src/common/OFData+QByteArray.mm b/src/common/OFData+QByteArray.mm index 41acae3..7363e3b 100644 --- a/src/common/OFData+QByteArray.mm +++ b/src/common/OFData+QByteArray.mm @@ -25,8 +25,13 @@ @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 diff --git a/src/common/OFString+QString.h b/src/common/OFString+QString.h index 1236d38..acfea21 100644 --- a/src/common/OFString+QString.h +++ b/src/common/OFString+QString.h @@ -26,7 +26,7 @@ @interface OFString (QString) + (instancetype)stringWithQString: (const QString &)qString; -- initWithQString: (const QString &)qString; +- (instancetype)initWithQString: (const QString &)qString; - (QString)qString; @end diff --git a/src/common/OFString+QString.mm b/src/common/OFString+QString.mm index c944178..d06d216 100644 --- a/src/common/OFString+QString.mm +++ b/src/common/OFString+QString.mm @@ -23,12 +23,12 @@ #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!");