All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.oscim.theme.styles.LineStyle Maven / Gradle / Ivy

/*
 * Copyright 2010, 2011, 2012 mapsforge.org
 * Copyright 2013 Hannes Janetzek
 * Copyright 2016-2017 devemux86
 * Copyright 2017 Longri
 *
 * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
 *
 * This program is free software: you can redistribute it and/or modify it under the
 * terms of the GNU Lesser General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with
 * this program. If not, see .
 */
package org.oscim.theme.styles;

import org.oscim.backend.canvas.Color;
import org.oscim.backend.canvas.Paint.Cap;
import org.oscim.renderer.bucket.TextureItem;

import static org.oscim.backend.canvas.Color.parseColor;

public final class LineStyle extends RenderStyle {

    public static final float REPEAT_START_DEFAULT = 30f;
    public static final float REPEAT_GAP_DEFAULT = 200f;

    private final int level;
    public final String style;
    public final float width;
    public final int color;
    public final Cap cap;
    public final boolean outline;
    public final boolean fixed;
    public final int fadeScale;
    public final float blur;

    public final int stipple;
    public final int stippleColor;
    public final float stippleWidth;
    public final TextureItem texture;

    public final float heightOffset;
    public final boolean randomOffset;

    public final int symbolWidth;
    public final int symbolHeight;
    public final int symbolPercent;

    public final float[] dashArray;
    public final float repeatStart;
    public final float repeatGap;

    public LineStyle(int stroke, float width) {
        this(0, "", stroke, width, Cap.BUTT, true, 0, 0, 0, -1, 0, false, null, true, null, REPEAT_START_DEFAULT, REPEAT_GAP_DEFAULT);
    }

    public LineStyle(int level, int stroke, float width) {
        this(level, "", stroke, width, Cap.BUTT, true, 0, 0, 0, -1, 0, false, null, true, null, REPEAT_START_DEFAULT, REPEAT_GAP_DEFAULT);
    }

    public LineStyle(int stroke, float width, Cap cap) {
        this(0, "", stroke, width, cap, true, 0, 0, 0, -1, 0, false, null, true, null, REPEAT_START_DEFAULT, REPEAT_GAP_DEFAULT);
    }

    public LineStyle(int level, String style, int color, float width,
                     Cap cap, boolean fixed,
                     int stipple, int stippleColor, float stippleWidth,
                     int fadeScale, float blur, boolean isOutline, TextureItem texture,
                     boolean randomOffset, float[] dashArray, float repeatStart, float repeatGap) {

        this.level = level;
        this.style = style;
        this.outline = isOutline;

        this.cap = cap;
        this.color = color;
        this.width = width;
        this.fixed = fixed;

        this.stipple = stipple;
        this.stippleColor = stippleColor;
        this.stippleWidth = stippleWidth;
        this.texture = texture;

        this.blur = blur;
        this.fadeScale = fadeScale;

        this.heightOffset = 0;
        this.randomOffset = randomOffset;

        this.symbolWidth = 0;
        this.symbolHeight = 0;
        this.symbolPercent = 100;

        this.dashArray = dashArray;
        this.repeatStart = repeatStart;
        this.repeatGap = repeatGap;
    }

    private LineStyle(LineBuilder b) {
        this.cat = b.cat;
        this.level = b.level;
        this.style = b.style;
        this.width = b.strokeWidth;
        this.color = b.themeCallback != null ? b.themeCallback.getColor(b.fillColor) : b.fillColor;
        this.cap = b.cap;
        this.outline = b.outline;
        this.fixed = b.fixed;
        this.fadeScale = b.fadeScale;
        this.blur = b.blur;
        this.stipple = b.stipple;
        this.stippleColor = b.themeCallback != null ? b.themeCallback.getColor(b.stippleColor) : b.stippleColor;
        this.stippleWidth = b.stippleWidth;
        this.texture = b.texture;

        this.heightOffset = b.heightOffset;
        this.randomOffset = b.randomOffset;

        this.symbolWidth = b.symbolWidth;
        this.symbolHeight = b.symbolHeight;
        this.symbolPercent = b.symbolPercent;

        this.dashArray = b.dashArray;
        this.repeatStart = b.repeatStart;
        this.repeatGap = b.repeatGap;
    }

    @Override
    public LineStyle current() {
        return (LineStyle) mCurrent;
    }

    @Override
    public void renderWay(Callback cb) {
        cb.renderWay(this, level);
    }

    public static class LineBuilder> extends StyleBuilder {

        public Cap cap;
        public boolean outline;
        public boolean fixed;
        public int fadeScale;
        public float blur;

        public int stipple;
        public int stippleColor;
        public float stippleWidth;
        public TextureItem texture;

        public float heightOffset;
        public boolean randomOffset;

        public int symbolWidth;
        public int symbolHeight;
        public int symbolPercent;

        public float[] dashArray;
        public float repeatStart;
        public float repeatGap;

        public LineBuilder() {
        }

        public T set(LineStyle line) {
            if (line == null)
                return reset();

            this.cat = line.cat;
            this.level = line.level;
            this.style = line.style;
            this.strokeWidth = line.width;
            this.fillColor = themeCallback != null ? themeCallback.getColor(line.color) : line.color;
            this.cap = line.cap;
            this.outline = line.outline;
            this.fixed = line.fixed;
            this.fadeScale = line.fadeScale;
            this.blur = line.blur;
            this.stipple = line.stipple;
            this.stippleColor = themeCallback != null ? themeCallback.getColor(line.stippleColor) : line.stippleColor;
            this.stippleWidth = line.stippleWidth;
            this.texture = line.texture;

            this.heightOffset = line.heightOffset;
            this.randomOffset = line.randomOffset;

            this.symbolWidth = line.symbolWidth;
            this.symbolHeight = line.symbolHeight;
            this.symbolPercent = line.symbolPercent;

            this.dashArray = line.dashArray;
            this.repeatStart = line.repeatStart;
            this.repeatGap = line.repeatGap;

            return self();
        }

        public T blur(float blur) {
            this.blur = blur;
            return self();
        }

        public T fadeScale(int zoom) {
            this.fadeScale = zoom;
            return self();
        }

        public T stipple(int width) {
            this.stipple = width;
            return self();
        }

        public T stippleColor(int color) {
            this.stippleColor = color;
            return self();
        }

        public T stippleColor(String color) {
            this.stippleColor = parseColor(color);
            return self();
        }

        public T stippleWidth(float width) {
            this.stippleWidth = width;
            return self();
        }

        public T isOutline(boolean outline) {
            this.outline = outline;
            return self();
        }

        public T cap(Cap cap) {
            this.cap = cap;
            return self();
        }

        public T fixed(boolean b) {
            this.fixed = b;
            return self();
        }

        public T texture(TextureItem texture) {
            this.texture = texture;
            return self();
        }

        public T heightOffset(float heightOffset) {
            this.heightOffset = heightOffset;
            return self();
        }

        public T randomOffset(boolean randomOffset) {
            this.randomOffset = randomOffset;
            return self();
        }

        public T symbolWidth(int symbolWidth) {
            this.symbolWidth = symbolWidth;
            return self();
        }

        public T symbolHeight(int symbolHeight) {
            this.symbolHeight = symbolHeight;
            return self();
        }

        public T symbolPercent(int symbolPercent) {
            this.symbolPercent = symbolPercent;
            return self();
        }

        public T dashArray(float[] dashArray) {
            this.dashArray = dashArray;
            return self();
        }

        public T repeatStart(float repeatStart) {
            this.repeatStart = repeatStart;
            return self();
        }

        public T repeatGap(float repeatGap) {
            this.repeatGap = repeatGap;
            return self();
        }

        public T reset() {
            cat = null;
            level = -1;
            style = null;
            fillColor = Color.BLACK;
            cap = Cap.ROUND;
            outline = false;
            strokeWidth = 1;
            fixed = false;

            fadeScale = -1;
            blur = 0;

            stipple = 0;
            stippleWidth = 1;
            stippleColor = Color.BLACK;
            texture = null;

            heightOffset = 0;
            randomOffset = true;

            symbolWidth = 0;
            symbolHeight = 0;
            symbolPercent = 100;

            dashArray = null;
            repeatStart = REPEAT_START_DEFAULT;
            repeatGap = REPEAT_GAP_DEFAULT;

            return self();
        }

        public LineStyle build() {
            return new LineStyle(this);
        }
    }

    @SuppressWarnings("rawtypes")
    public static LineBuilder builder() {
        return new LineBuilder();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy