11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project
40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkUserConfig_DEFINED
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkUserConfig_DEFINED
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*  SkTypes.h, the root of the public header files, does the following trick:
1405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #include "SkPreConfig.h"
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #include "SkUserConfig.h"
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #include "SkPostConfig.h"
1805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkPreConfig.h runs first, and it is responsible for initializing certain
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    skia defines.
2105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkPostConfig.h runs last, and its job is to just check that the final
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    defines are consistent (i.e. that we don't have mutually conflicting
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    defines).
2505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkUserConfig.h (this file) runs in the middle. It gets to change or augment
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    the list of flags initially set in preconfig, and then postconfig checks
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    that everything still makes sense.
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    Below are optional defines that add, subtract, or change default behavior
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    in Skia. Your port can locally edit this file to enable/disable flags as
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    you choose, or these can be delared on your command line (i.e. -Dfoo).
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    By default, this include file will always default to having all of the flags
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    commented out, so including it will have no effect.
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// ANDROID Specific changes - NO NOT CHECK BACK INTO code.google.com/p/skia
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//
43b1fd0813e0219e9f536ee5f43e988d10f4e147e6Mike Reed
444f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#define PICTURE_VERSION_ICS 1 // r1562 of Skia
454f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#define PICTURE_VERSION_JB  2
464f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
47b1fd0813e0219e9f536ee5f43e988d10f4e147e6Mike Reed// do this build check for other tools that still read this header
48b1fd0813e0219e9f536ee5f43e988d10f4e147e6Mike Reed#ifdef ANDROID
49b1fd0813e0219e9f536ee5f43e988d10f4e147e6Mike Reed    #include <utils/misc.h>
50b1fd0813e0219e9f536ee5f43e988d10f4e147e6Mike Reed#endif
510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
524f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#define SK_USE_POSIX_THREADS
534f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger
540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*  Scalars (the fractional value type in skia) can be implemented either as
550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    floats or 16.16 integers (fixed). Exactly one of these two symbols must be
560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    defined.
570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/
580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SK_SCALAR_IS_FLOAT
590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef SK_SCALAR_IS_FIXED
600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*  Somewhat independent of how SkScalar is implemented, Skia also wants to know
630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if it can use floats at all. Naturally, if SK_SCALAR_IS_FLOAT is defined,
641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SK_CAN_USE_FLOAT must be too; but if scalars are fixed, SK_CAN_USE_FLOAT
650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    can go either way.
660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SK_CAN_USE_FLOAT
680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*  For some performance-critical scalar operations, skia will optionally work
700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    around the standard float operators if it knows that the CPU does not have
710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    native support for floats. If your environment uses software floating point,
720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    define this flag.
730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
749c762df18b8a4dae9969cb79eb3b1f53a749f5ebMike Reed//#define SK_SOFTWARE_FLOAT
750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*  Skia has lots of debug-only code. Often this is just null checks or other
780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    parameter checking, but sometimes it can be quite intrusive (e.g. check that
790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    each 32bit pixel is in premultiplied form). This code can be very useful
800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    during development, but will slow things down in a shipping product.
8105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    By default, these mutually exclusive flags are defined in SkPreConfig.h,
830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    based on the presence or absence of NDEBUG, but that decision can be changed
840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    here.
850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//#define SK_DEBUG
870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//#define SK_RELEASE
880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*  If, in debugging mode, Skia needs to stop (presumably to invoke a debugger)
910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    it will call SK_CRASH(). If this is not defined it, it is defined in
920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkPostConfig.h to write to an illegal address
930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//#define SK_CRASH() *(int *)(uintptr_t)0 = 0
950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*  preconfig will have attempted to determine the endianness of the system,
980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    but you can change these mutually exclusive flags here.
990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if __BYTE_ORDER == __BIG_ENDIAN
1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define SK_CPU_BENDIAN
1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #undef  SK_CPU_LENDIAN
1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else
1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define SK_CPU_LENDIAN
1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #undef  SK_CPU_BENDIAN
1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*  Some compilers don't support long long for 64bit integers. If yours does
1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    not, define this to the appropriate type.
1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkLONGLONG int64_t
1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*  To write debug messages to a console, skia will call SkDebugf(...) following
1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    printf conventions (e.g. const char* format, ...). If you want to redirect
1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    this to something other than printf, define yours here
1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
1194f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger//#define SkDebugf(...)  MyFunction(__VA_ARGS__)
1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
1221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *  To specify a different default font cache limit, define this. If this is
1231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *  undefined, skia will use a built-in value.
12405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger */
125f98d96e192db421eed54103eedfcbb6600f73c08Derek Sollenberger#define SK_DEFAULT_FONT_CACHE_LIMIT   (768 * 1024)
1261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
1271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* If defined, use CoreText instead of ATSUI on OS X.
1281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger*/
1291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger//#define SK_USE_MAC_CORE_TEXT
1301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
13105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
13205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger/*  If zlib is available and you want to support the flate compression
13305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    algorithm (used in PDF generation), define SK_ZLIB_INCLUDE to be the
13405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    include path.
13505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger */
13605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger//#define SK_ZLIB_INCLUDE <zlib.h>
13705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
13805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger/*  Define this to allow PDF scalars above 32k.  The PDF/A spec doesn't allow
13905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    them, but modern PDF interpreters should handle them just fine.
14005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger */
14105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger//#define SK_ALLOW_LARGE_PDF_SCALARS
14205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
1431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*  Define this to provide font subsetter in PDF generation.
1441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
1451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger//#define SK_SFNTLY_SUBSETTER "sfntly/subsetter/font_subsetter.h"
1461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
14705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger/*  Define this to remove dimension checks on bitmaps. Not all blits will be
14805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    correct yet, so this is mostly for debugging the implementation.
14905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger */
15005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger//#define SK_ALLOW_OVER_32K_BITMAPS
1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*  Define this to set the upper limit for text to support LCD. Values that
1531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    are very large increase the cost in the font cache and draw slower, without
1541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    improving readability. If this is undefined, Skia will use its default
1551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    value (e.g. 48)
1561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
1571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger//#define SK_MAX_SIZE_FOR_LCDTEXT     48
1581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*  If SK_DEBUG is defined, then you can optionally define SK_SUPPORT_UNITTEST
1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    which will run additional self-tests at startup. These can take a long time,
1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    so this flag is optional.
1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DEBUG
1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define SK_SUPPORT_UNITTEST
1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* If your system embeds skia and has complex event logging, define this
1681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger   symbol to name a file that maps the following macros to your system's
1691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger   equivalents:
1701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger       SK_TRACE_EVENT0(event)
1711cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger       SK_TRACE_EVENT1(event, name1, value1)
1721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger       SK_TRACE_EVENT2(event, name1, value1, name2, value2)
1731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger   src/utils/SkDebugTrace.h has a trivial implementation that writes to
1741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger   the debug output stream. If SK_USER_TRACE_INCLUDE_FILE is not defined,
1751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger   SkTrace.h will define the above three macros to do nothing.
1761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger*/
1771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger//#undef SK_USER_TRACE_INCLUDE_FILE
1781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
17987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger/*  Change the ordering to work in X windows.
18087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger */
18187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#ifdef SK_SAMPLES_FOR_X
18287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger        #define SK_R32_SHIFT    16
18387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger        #define SK_G32_SHIFT    8
18487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger        #define SK_B32_SHIFT    0
18587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger        #define SK_A32_SHIFT    24
18687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#endif
18787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger
1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
189