/*
 * Copyright 2025 Google LLC.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "gm/gm.h"
#include "include/core/SkCanvas.h"
#include "include/core/SkImageInfo.h"
#include "include/core/SkMaskFilter.h"
#include "include/core/SkPaint.h"
#include "include/core/SkPath.h"
#include "include/core/SkPathBuilder.h"
#include "include/core/SkSurface.h"
#include "include/effects/SkTableMaskFilter.h"

DEF_SIMPLE_GM(tablemaskfilter, canvas, 400, 400) {
    SkPaint paint;
    paint.setStyle(SkPaint::kFill_Style);
    paint.setColor(SK_ColorBLACK);

    // Add a table mask filter that defines half coverage for all coverage values
    // except pixels with full coverage.
    uint8_t table[256];
    for (int i = 0; i < 256; ++i) {
        table[i] = 128;
    }
    table[255] = 255;
    paint.setMaskFilter(sk_sp<SkMaskFilter>(SkTableMaskFilter::Create(table)));

    SkPath path = SkPathBuilder()
                  .addRect({38.f, 38.f, 218.f, 218.f})
                  .addOval({38.f, 38.f, 218.f, 218.f}, SkPathDirection::kCCW)
                  .detach();

    canvas->drawPath(path, paint);
}
