/*
 * Copyright (C) 2022 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 com.android.launcher3.view;

option java_outer_classname = "ViewCaptureData";

message ExportedData {

  repeated FrameData frameData = 1;
  repeated string classname = 2;
}

message FrameData {
  optional int64 timestamp = 1;
  optional ViewNode node = 2;
}

message ViewNode {
  optional int32 classname_index = 1;
  optional int32 hashcode = 2;

  repeated ViewNode children = 3;

  optional string id = 4;
  optional int32 left = 5;
  optional int32 top = 6;
  optional int32 width = 7;
  optional int32 height = 8;
  optional int32 scrollX = 9;
  optional int32 scrollY = 10;

  optional float translationX = 11;
  optional float translationY = 12;
  optional float scaleX = 13 [default = 1];
  optional float scaleY = 14 [default = 1];
  optional float alpha = 15 [default = 1];

  optional bool willNotDraw = 16;
  optional bool clipChildren = 17;
  optional int32 visibility = 18;

  optional float elevation = 19;
}
