/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

syntax = "proto2";

package android.uirenderer.proto;

option optimize_for = LITE_RUNTIME;

message RenderNode {
    required uint64 id = 1;
    required string name = 2;
    required RenderProperties properties = 3;
    optional DisplayList display_list = 4;
    repeated RenderNode children = 5;
};

message RenderProperties {
    required int32 left = 1;
    required int32 right = 2;
    required int32 top = 3;
    required int32 bottom = 4;
    required int32 clip_flags = 5;
    required float alpha = 6;
    required float translation_x = 7;
    required float translation_y = 8;
    required float translation_z = 9;
    required float elevation = 10;
    required float rotation = 11;
    required float rotation_x = 12;
    required float rotation_y = 13;
    required float scale_x = 14;
    required float scale_y = 15;
    required float pivot_x = 16;
    required float pivot_y = 17;
    required bool has_overlapping_rendering = 18;
    required bool pivot_explicitly_set = 19;
    required bool project_backwards = 20;
    required bool projection_receiver = 21;
    required RectF clip_bounds = 22;
    optional Outline outline = 23;
    optional RevealClip reveal_clip = 24;
};

message RectF {
    required float left = 1;
    required float right = 2;
    required float top = 3;
    required float bottom = 4;
}

message Outline {
    required bool should_clip = 1;
    enum Type {
        None = 0;
        Empty = 1;
        ConvexPath = 2;
        RoundRect = 3;
    }
    required Type type = 2;
    required RectF bounds = 3;
    required float radius = 4;
    required float alpha = 5;
    optional bytes path = 6;
}

message RevealClip {
    required float x = 1;
    required float y = 2;
    required float radius = 3;
}

message DisplayList {
    optional int32 projection_receive_index = 1;
    repeated DrawOp draw_ops = 2;
}

message DrawOp {
    oneof drawop {
        DrawOp_RenderNode render_node = 1;
    }
}

message DrawOp_RenderNode {
    optional RenderNode node = 1;
}
