Overview
Comment: | OFColor: Allow some imprecision for tagged pointer |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
061e16d166f1cb308ded399848ac4524 |
User & Date: | js on 2023-02-13 22:14:16 |
Other Links: | manifest | tags |
Context
2023-02-15
| ||
21:54 | OFMatrix4x4: Add -[transformedVector3D:] check-in: 1e550fabe3 user: js tags: trunk | |
2023-02-13
| ||
22:14 | OFColor: Allow some imprecision for tagged pointer check-in: 061e16d166 user: js tags: trunk | |
20:32 | Support for storing OFColors in tagged pointers check-in: 51c8047121 user: js tags: trunk | |
Changes
Modified src/OFColor.m from [668849c2be] to [2f23670cfa].
︙ | ︙ | |||
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" #import "OFColor.h" #import "OFOnce.h" #import "OFString.h" #import "OFInvalidArgumentException.h" @interface OFColor () + (instancetype)of_alloc; @end @interface OFColorSingleton: OFColor @end @interface OFColorPlaceholder: OFColorSingleton @end #ifdef OF_OBJFW_RUNTIME @interface OFTaggedPointerColor: OFColorSingleton @end #endif static struct { Class isa; } placeholder; #ifdef OF_OBJFW_RUNTIME | > > > > | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" #include <math.h> #import "OFColor.h" #import "OFOnce.h" #import "OFString.h" #import "OFInvalidArgumentException.h" @interface OFColor () + (instancetype)of_alloc; @end @interface OFColorSingleton: OFColor @end @interface OFColorPlaceholder: OFColorSingleton @end #ifdef OF_OBJFW_RUNTIME @interface OFTaggedPointerColor: OFColorSingleton @end static const float allowedImprecision = 0.0000001; #endif static struct { Class isa; } placeholder; #ifdef OF_OBJFW_RUNTIME |
︙ | ︙ | |||
68 69 70 71 72 73 74 | @implementation OFColorPlaceholder - (instancetype)initWithRed: (float)red green: (float)green blue: (float)blue alpha: (float)alpha { #ifdef OF_OBJFW_RUNTIME | | | | > | | | 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | @implementation OFColorPlaceholder - (instancetype)initWithRed: (float)red green: (float)green blue: (float)blue alpha: (float)alpha { #ifdef OF_OBJFW_RUNTIME uint8_t redInt = nearbyintf(red * 255); uint8_t greenInt = nearbyintf(green * 255); uint8_t blueInt = nearbyintf(blue * 255); if (fabsf(red * 255 - redInt) < allowedImprecision && fabsf(green * 255 - greenInt) < allowedImprecision && fabsf(blue * 255 - blueInt) < allowedImprecision && alpha == 1) { id ret = objc_createTaggedPointer(colorTag, (uintptr_t)redInt << 16 | (uintptr_t)greenInt << 8 | (uintptr_t)blueInt); if (ret != nil) return ret; } |
︙ | ︙ | |||
282 283 284 285 286 287 288 | - (OFString *)description { float red, green, blue, alpha; [self getRed: &red green: &green blue: &blue alpha: &alpha]; return [OFString stringWithFormat: | | | | 287 288 289 290 291 292 293 294 295 296 297 | - (OFString *)description { float red, green, blue, alpha; [self getRed: &red green: &green blue: &blue alpha: &alpha]; return [OFString stringWithFormat: @"<%@ red=%f green=%f blue=%f alpha=%f>", self.class, red, green, blue, alpha]; } @end |