@@ -104,16 +104,43 @@ static void _CSSNodeMarkDirty(const CSSNodeRef node);
104
104
105
105
#ifdef ANDROID
106
106
#include <android/log.h>
107
- static int _csslayoutAndroidLog (const char * format , ...) {
108
- va_list args ;
109
- va_start (args , format );
110
- const int result = __android_log_vprint (ANDROID_LOG_DEBUG , "css-layout" , format , args );
111
- va_end (args );
107
+ static int _csslayoutAndroidLog (CSSLogLevel level , const char * format , va_list args ) {
108
+ int androidLevel = CSSLogLevelDebug ;
109
+ switch (level ) {
110
+ case CSSLogLevelError :
111
+ androidLevel = ANDROID_LOG_ERROR ;
112
+ break ;
113
+ case CSSLogLevelWarn :
114
+ androidLevel = ANDROID_LOG_WARN ;
115
+ break ;
116
+ case CSSLogLevelInfo :
117
+ androidLevel = ANDROID_LOG_INFO ;
118
+ break ;
119
+ case CSSLogLevelDebug :
120
+ androidLevel = ANDROID_LOG_DEBUG ;
121
+ break ;
122
+ case CSSLogLevelVerbose :
123
+ androidLevel = ANDROID_LOG_VERBOSE ;
124
+ break ;
125
+ }
126
+ const int result = __android_log_vprint (androidLevel , "css-layout" , format , args );
112
127
return result ;
113
128
}
114
129
static CSSLogger gLogger = & _csslayoutAndroidLog ;
115
130
#else
116
- static CSSLogger gLogger = & printf ;
131
+ static int _csslayoutDefaultLog (CSSLogLevel level , const char * format , va_list args ) {
132
+ switch (level ) {
133
+ case CSSLogLevelError :
134
+ return vfprintf (stderr , format , args );
135
+ case CSSLogLevelWarn :
136
+ case CSSLogLevelInfo :
137
+ case CSSLogLevelDebug :
138
+ case CSSLogLevelVerbose :
139
+ default :
140
+ return vprintf (format , args );
141
+ }
142
+ }
143
+ static CSSLogger gLogger = & _csslayoutDefaultLog ;
117
144
#endif
118
145
119
146
static inline float computedEdgeValue (const float edges [CSSEdgeCount ],
@@ -446,19 +473,19 @@ static inline bool eq(const float a, const float b) {
446
473
447
474
static void indent (const uint32_t n ) {
448
475
for (uint32_t i = 0 ; i < n ; i ++ ) {
449
- gLogger ( " " );
476
+ CSSLog ( CSSLogLevelDebug , " " );
450
477
}
451
478
}
452
479
453
480
static void printNumberIfNotZero (const char * str , const float number ) {
454
481
if (!eq (number , 0 )) {
455
- gLogger ( "%s: %g, " , str , number );
482
+ CSSLog ( CSSLogLevelDebug , "%s: %g, " , str , number );
456
483
}
457
484
}
458
485
459
486
static void printNumberIfNotUndefined (const char * str , const float number ) {
460
487
if (!CSSValueIsUndefined (number )) {
461
- gLogger ( "%s: %g, " , str , number );
488
+ CSSLog ( CSSLogLevelDebug , "%s: %g, " , str , number );
462
489
}
463
490
}
464
491
@@ -470,78 +497,78 @@ static void _CSSNodePrint(const CSSNodeRef node,
470
497
const CSSPrintOptions options ,
471
498
const uint32_t level ) {
472
499
indent (level );
473
- gLogger ( "{" );
500
+ CSSLog ( CSSLogLevelDebug , "{" );
474
501
475
502
if (node -> print ) {
476
503
node -> print (node );
477
504
}
478
505
479
506
if (options & CSSPrintOptionsLayout ) {
480
- gLogger ( "layout: {" );
481
- gLogger ( "width: %g, " , node -> layout .dimensions [CSSDimensionWidth ]);
482
- gLogger ( "height: %g, " , node -> layout .dimensions [CSSDimensionHeight ]);
483
- gLogger ( "top: %g, " , node -> layout .position [CSSEdgeTop ]);
484
- gLogger ( "left: %g" , node -> layout .position [CSSEdgeLeft ]);
485
- gLogger ( "}, " );
507
+ CSSLog ( CSSLogLevelDebug , "layout: {" );
508
+ CSSLog ( CSSLogLevelDebug , "width: %g, " , node -> layout .dimensions [CSSDimensionWidth ]);
509
+ CSSLog ( CSSLogLevelDebug , "height: %g, " , node -> layout .dimensions [CSSDimensionHeight ]);
510
+ CSSLog ( CSSLogLevelDebug , "top: %g, " , node -> layout .position [CSSEdgeTop ]);
511
+ CSSLog ( CSSLogLevelDebug , "left: %g" , node -> layout .position [CSSEdgeLeft ]);
512
+ CSSLog ( CSSLogLevelDebug , "}, " );
486
513
}
487
514
488
515
if (options & CSSPrintOptionsStyle ) {
489
516
if (node -> style .flexDirection == CSSFlexDirectionColumn ) {
490
- gLogger ( "flexDirection: 'column', " );
517
+ CSSLog ( CSSLogLevelDebug , "flexDirection: 'column', " );
491
518
} else if (node -> style .flexDirection == CSSFlexDirectionColumnReverse ) {
492
- gLogger ( "flexDirection: 'column-reverse', " );
519
+ CSSLog ( CSSLogLevelDebug , "flexDirection: 'column-reverse', " );
493
520
} else if (node -> style .flexDirection == CSSFlexDirectionRow ) {
494
- gLogger ( "flexDirection: 'row', " );
521
+ CSSLog ( CSSLogLevelDebug , "flexDirection: 'row', " );
495
522
} else if (node -> style .flexDirection == CSSFlexDirectionRowReverse ) {
496
- gLogger ( "flexDirection: 'row-reverse', " );
523
+ CSSLog ( CSSLogLevelDebug , "flexDirection: 'row-reverse', " );
497
524
}
498
525
499
526
if (node -> style .justifyContent == CSSJustifyCenter ) {
500
- gLogger ( "justifyContent: 'center', " );
527
+ CSSLog ( CSSLogLevelDebug , "justifyContent: 'center', " );
501
528
} else if (node -> style .justifyContent == CSSJustifyFlexEnd ) {
502
- gLogger ( "justifyContent: 'flex-end', " );
529
+ CSSLog ( CSSLogLevelDebug , "justifyContent: 'flex-end', " );
503
530
} else if (node -> style .justifyContent == CSSJustifySpaceAround ) {
504
- gLogger ( "justifyContent: 'space-around', " );
531
+ CSSLog ( CSSLogLevelDebug , "justifyContent: 'space-around', " );
505
532
} else if (node -> style .justifyContent == CSSJustifySpaceBetween ) {
506
- gLogger ( "justifyContent: 'space-between', " );
533
+ CSSLog ( CSSLogLevelDebug , "justifyContent: 'space-between', " );
507
534
}
508
535
509
536
if (node -> style .alignItems == CSSAlignCenter ) {
510
- gLogger ( "alignItems: 'center', " );
537
+ CSSLog ( CSSLogLevelDebug , "alignItems: 'center', " );
511
538
} else if (node -> style .alignItems == CSSAlignFlexEnd ) {
512
- gLogger ( "alignItems: 'flex-end', " );
539
+ CSSLog ( CSSLogLevelDebug , "alignItems: 'flex-end', " );
513
540
} else if (node -> style .alignItems == CSSAlignStretch ) {
514
- gLogger ( "alignItems: 'stretch', " );
541
+ CSSLog ( CSSLogLevelDebug , "alignItems: 'stretch', " );
515
542
}
516
543
517
544
if (node -> style .alignContent == CSSAlignCenter ) {
518
- gLogger ( "alignContent: 'center', " );
545
+ CSSLog ( CSSLogLevelDebug , "alignContent: 'center', " );
519
546
} else if (node -> style .alignContent == CSSAlignFlexEnd ) {
520
- gLogger ( "alignContent: 'flex-end', " );
547
+ CSSLog ( CSSLogLevelDebug , "alignContent: 'flex-end', " );
521
548
} else if (node -> style .alignContent == CSSAlignStretch ) {
522
- gLogger ( "alignContent: 'stretch', " );
549
+ CSSLog ( CSSLogLevelDebug , "alignContent: 'stretch', " );
523
550
}
524
551
525
552
if (node -> style .alignSelf == CSSAlignFlexStart ) {
526
- gLogger ( "alignSelf: 'flex-start', " );
553
+ CSSLog ( CSSLogLevelDebug , "alignSelf: 'flex-start', " );
527
554
} else if (node -> style .alignSelf == CSSAlignCenter ) {
528
- gLogger ( "alignSelf: 'center', " );
555
+ CSSLog ( CSSLogLevelDebug , "alignSelf: 'center', " );
529
556
} else if (node -> style .alignSelf == CSSAlignFlexEnd ) {
530
- gLogger ( "alignSelf: 'flex-end', " );
557
+ CSSLog ( CSSLogLevelDebug , "alignSelf: 'flex-end', " );
531
558
} else if (node -> style .alignSelf == CSSAlignStretch ) {
532
- gLogger ( "alignSelf: 'stretch', " );
559
+ CSSLog ( CSSLogLevelDebug , "alignSelf: 'stretch', " );
533
560
}
534
561
535
562
printNumberIfNotUndefined ("flexGrow" , CSSNodeStyleGetFlexGrow (node ));
536
563
printNumberIfNotUndefined ("flexShrink" , CSSNodeStyleGetFlexShrink (node ));
537
564
printNumberIfNotUndefined ("flexBasis" , CSSNodeStyleGetFlexBasis (node ));
538
565
539
566
if (node -> style .overflow == CSSOverflowHidden ) {
540
- gLogger ( "overflow: 'hidden', " );
567
+ CSSLog ( CSSLogLevelDebug , "overflow: 'hidden', " );
541
568
} else if (node -> style .overflow == CSSOverflowVisible ) {
542
- gLogger ( "overflow: 'visible', " );
569
+ CSSLog ( CSSLogLevelDebug , "overflow: 'visible', " );
543
570
} else if (node -> style .overflow == CSSOverflowScroll ) {
544
- gLogger ( "overflow: 'scroll', " );
571
+ CSSLog ( CSSLogLevelDebug , "overflow: 'scroll', " );
545
572
}
546
573
547
574
if (eqFour (node -> style .margin )) {
@@ -590,7 +617,7 @@ static void _CSSNodePrint(const CSSNodeRef node,
590
617
printNumberIfNotUndefined ("minHeight" , node -> style .minDimensions [CSSDimensionHeight ]);
591
618
592
619
if (node -> style .positionType == CSSPositionTypeAbsolute ) {
593
- gLogger ( "position: 'absolute', " );
620
+ CSSLog ( CSSLogLevelDebug , "position: 'absolute', " );
594
621
}
595
622
596
623
printNumberIfNotUndefined ("left" ,
@@ -605,14 +632,14 @@ static void _CSSNodePrint(const CSSNodeRef node,
605
632
606
633
const uint32_t childCount = CSSNodeListCount (node -> children );
607
634
if (options & CSSPrintOptionsChildren && childCount > 0 ) {
608
- gLogger ( "children: [\n" );
635
+ CSSLog ( CSSLogLevelDebug , "children: [\n" );
609
636
for (uint32_t i = 0 ; i < childCount ; i ++ ) {
610
637
_CSSNodePrint (CSSNodeGetChild (node , i ), options , level + 1 );
611
638
}
612
639
indent (level );
613
- gLogger ( "]},\n" );
640
+ CSSLog ( CSSLogLevelDebug , "]},\n" );
614
641
} else {
615
- gLogger ( "},\n" );
642
+ CSSLog ( CSSLogLevelDebug , "},\n" );
616
643
}
617
644
}
618
645
@@ -2441,6 +2468,13 @@ void CSSLayoutSetLogger(CSSLogger logger) {
2441
2468
gLogger = logger ;
2442
2469
}
2443
2470
2471
+ void CSSLog (CSSLogLevel level , const char * format , ...) {
2472
+ va_list args ;
2473
+ va_start (args , format );
2474
+ gLogger (level , format , args );
2475
+ va_end (args );
2476
+ }
2477
+
2444
2478
#ifdef CSS_ASSERT_FAIL_ENABLED
2445
2479
static CSSAssertFailFunc gAssertFailFunc ;
2446
2480
0 commit comments