Does the Fenix really use a different purple?

Former Member
Former Member
Does the Fenix really use a different purple? It doesn't match to the defined constant. Have to specify 0x5500AA

FFFFFF
AAAAAA
555555
000000
FF0000
AA0000
FF5500
FF00FF
FFAA00
5500AA <-- Fenix purple. Gfx.COLOR_PURPLE shows as pink in sim.
00FF00
00AA00
00AAFF
0000FF

FFFFFF
AAAAAA
555555
000000
FF0000
AA0000
FF5500
FF00FF
FFAA00
AA00FF <-- 920 purple.
00FF00
00AA00
00AAFF
0000FF
  • Yes, it does use a different purple--that's the best answer I have right now. We're talking about some options to address this sort of thing down the road.
  • Former Member
    Former Member over 10 years ago
    Thanks. That answer is fine, I was just checking it wasn't a typo or something.
  • Purple

    On both my D2 Bravo and the sim, Gfx.COLOR_PURPLE is pink.

    My workaround is to select another color very close to the original COLOR_PURPLE (0xAA00FF), for example 0x7100aa (or 7405738 in decimal).
    Then it displays purple again. The watch is actually capable of displaying purple, but only if not using AA00FF which is mapped to pink for some reason.

    Works on the watch and the sim. It took me quite some time to figure this out.




    using Toybox.WatchUi as Ui;
    using Toybox.Graphics as Gfx;
    using Toybox.System as Sys;
    using Toybox.Lang as Lang;

    var status = "not initialized";

    class ColorsView extends Ui.WatchFace {

    var colors = [Gfx.COLOR_BLACK,Gfx.COLOR_WHITE,Gfx.COLOR_DK_GRAY,Gfx.COLOR_LT_GRAY,Gfx.COLOR_BLUE,Gfx.COLOR_DK_BLUE,Gfx.COLOR_RED,Gfx.COLOR_DK_RED,Gfx.COLOR_GREEN,Gfx.COLOR_DK_GREEN,Gfx.COLOR_YELLOW,Gfx.COLOR_ORANGE,Gfx.COLOR_PINK,Gfx.COLOR_PURPLE,7405738];

    function onLayout(dc) {
    status = "onLayout";
    }

    function onShow() {
    status = "onShow";

    }

    function onUpdate(dc) {
    var clockTime = Sys.getClockTime();
    var timeString = Lang.format("$1$:$2$:$3$", [clockTime.hour, clockTime.min.format("%.2d"), clockTime.sec.format("%.2d")]);

    dc.setColor(Gfx.COLOR_BLACK,Gfx.COLOR_BLACK);
    dc.fillRectangle(0, 0, 218, 218);
    dc.setColor(Gfx.COLOR_WHITE,Gfx.COLOR_TRANSPARENT);
    dc.drawText(109, 40, Gfx.FONT_MEDIUM,timeString,Gfx.TEXT_JUSTIFY_CENTER);
    dc.drawText(109, 65, Gfx.FONT_SMALL,status,Gfx.TEXT_JUSTIFY_CENTER);
    status = "onUpdate";

    for (var i = 0; i < colors.size(); i++){
    var y = 120;
    var x = i * 20 + 40;
    if (i >= colors.size()/2){
    y = 140;
    x = x - (colors.size()/2 * 20);
    }

    dc.setColor(colors,Gfx.COLOR_TRANSPARENT);
    dc.fillRectangle(x, y, 20, 20);
    }

    }
    function onHide() {
    status = "onHide";
    }

    function onExitSleep() {
    status = "onExitSleep";
    }

    function onEnterSleep() {
    status = "onEnterSleep";
    }

    }
    [/CODE]
  • I don't recall the exact details behind this, but I believe that purple was mapped to pink on the fenix 3 because the device team felt that the purple used by other devices did not display well on the fenix 3 screen.
  • On both my D2 Bravo and the sim, Gfx.COLOR_PURPLE is pink.

    My workaround is to select another color very close to the original COLOR_PURPLE (0xAA00FF), for example 0x7100aa (or 7405738 in decimal).
    Then it displays purple again. The watch is actually capable of displaying purple, but only if not using AA00FF which is mapped to pink for some reason.

    Works on the watch and the sim. It took me quite some time to figure this out.



    I just tried this on my Fenix, on the off chance it was different than the Bravo, and as expected it was the same. I had wondered why there was no difference between COLOR_PINK and COLOUR_PURPLE and I would have far rather had the choice to use purple than have it decided for me to use pink instead. Have to say that in my opinion the purple is fine so I will be using this workaround in future.

    Thanks Julien
  • Former Member
    Former Member over 9 years ago
    Unfortunately this is working as expected. What you are seeing is the result of the Fenix 3/D2 Bravo using a different purple color from the Forerunner 920XT. COLOR_PURPLE in ConnectIQ (0xAA00FF) is the purple color that is used on Forerunner 920XT. The purple color used on Fenix 3/D2 Bravo is 0x5500AA. The value of COLOR_PINK is 0xFF00FF.

    When you use a color in ConnectIQ, it gets mapped to the nearest color supported by the device. On Fenix 3/D2 Bravo, COLOR_PURPLE (0xAA00FF) will end up getting mapped to 0xFF00FF (COLOR_PINK) because it is a closer match than the actual purple used by the device (0x5500AA).

    The most "proper" way to use purple on Fenix 3/D2 Bravo would be to use the matching color value of 0x5500AA, but if you want to support both Fenix 3 and 920XT you can probably get away with using something half way between the two values (0x7F00D4) You could also tweak that value up or down slightly to control which of the two colors get selected on VivoActive and Epix, which support both purples.
  • Thanks for the explanation Brian, this makes more sense to me now.

    However, would it not be better having COLOR_PURPLE defined as a number which will render a purple on all watches even if it does not match the exact value on any one particular device? i.e. if COLOR_PURPLE was defined as 0x7F00D4 wouldn't this render as purple on all watches by mapping to the nearest available colour? I guess the problem with this though is then it may not be the "best" purple on devices which have a bigger colour palette?
  • Former Member
    Former Member over 9 years ago
    There are probably a few different solutions that would be a bit of an improvement over the way it is. I would support the solution you described, but we ultimately decided against it. It would probably also make sense to have COLOR_DARK_PURPLE (or something like that) defined for the Fenix 3/D2 Bravo. In any case, a bit of clarification in our documentation of COLOR_PURPLE would probably go a long way, and I have logged a request for that.
  • Thanks. Just knowing this is the biggest help.