option optimize_for = SPEED;
option cc_generic_services = false;

message CMsgBeginFrame {
	optional double frame_paint_time = 1;
	optional uint32 surface_width = 2;
	optional uint32 surface_height = 3;
	optional uint32 render_target = 4;
	optional double ui_scale_factor = 5;
	optional bool empty_frame = 6;
	optional bool clear_gpu_resources_before_frame = 7;
}

message CMsgEndFrame {
	optional uint32 mouse_cursor_texture_id = 1;
	optional float mouse_cursor_hotspot_x = 2;
	optional float mouse_cursor_hotspot_y = 3;
}

message CMsgClearBackbuffer {
	optional uint32 clear_color_rgba = 1;
}

message CMsgDeleteTexture {
	optional uint64 texture_pointer = 1;
}

message CMsgDeletePanel {
	optional uint64 context_id = 1;
}

message CMsgDeleteParticleSystem {
	optional uint64 panel_handle = 1;
	optional uint32 brush_index = 2;
}

message CMsgPoint {
	optional double x = 1;
	optional double y = 2;
	optional double z = 3;
}

message CMsgMatrix4x4 {
	optional double m00 = 1;
	optional double m01 = 2;
	optional double m02 = 3;
	optional double m03 = 4;
	optional double m10 = 5;
	optional double m11 = 6;
	optional double m12 = 7;
	optional double m13 = 8;
	optional double m20 = 9;
	optional double m21 = 10;
	optional double m22 = 11;
	optional double m23 = 12;
	optional double m30 = 13;
	optional double m31 = 14;
	optional double m32 = 15;
	optional double m33 = 16;
}

message CRadiusData {
	message CCornerRadius {
		optional double horizontal = 1;
		optional double vertical = 2;
	}

	optional .CRadiusData.CCornerRadius top_left = 1;
	optional .CRadiusData.CCornerRadius top_right = 2;
	optional .CRadiusData.CCornerRadius bottom_right = 3;
	optional .CRadiusData.CCornerRadius bottom_left = 4;
}

message CBorderData {
	message CBorderSide {
		optional uint32 style = 1;
		optional double width = 2;
		optional uint32 color = 3;
	}

	optional .CBorderData.CBorderSide top = 1;
	optional .CBorderData.CBorderSide right = 2;
	optional .CBorderData.CBorderSide bottom = 3;
	optional .CBorderData.CBorderSide left = 4;
}

message CBoxShadowData {
	optional bool inset = 1;
	optional double horizontal_offset = 2;
	optional double vertical_offset = 3;
	optional double blur_radius = 4;
	optional double spread_distance = 5;
	optional uint32 color = 6;
	optional bool fill = 7;
	optional bool animating = 8;
}

message CTextShadowData {
	optional double horizontal_offset = 2;
	optional double vertical_offset = 3;
	optional double blur_radius = 4;
	optional uint32 color = 6;
	optional bool animating = 8;
	optional double strength = 9;
}

message CRadialClipData {
	optional double center_x = 1;
	optional double center_y = 2;
	optional double start_angle = 3;
	optional double sector_angle = 4;
}

message CMsgClipData {
	optional bool rect_clip = 1;
	optional double left = 2;
	optional double top = 3;
	optional double right = 4;
	optional double bottom = 5;
	optional .CRadialClipData radial_clip = 6;
}

message CMsgPushCompositingLayer {
	optional uint64 layer_id = 1;
	optional double width = 2;
	optional double height = 3;
	optional double layer_quad_top_left_x = 4;
	optional double layer_quad_top_left_y = 5;
	optional double layer_quad_top_left_z = 6;
	optional double layer_quad_top_right_x = 7;
	optional double layer_quad_top_right_y = 8;
	optional double layer_quad_top_right_z = 9;
	optional double layer_quad_bottom_left_x = 10;
	optional double layer_quad_bottom_left_y = 11;
	optional double layer_quad_bottom_left_z = 12;
	optional double layer_quad_bottom_right_x = 13;
	optional double layer_quad_bottom_right_y = 14;
	optional double layer_quad_bottom_right_z = 15;
	optional double transform_m00 = 16;
	optional double transform_m01 = 17;
	optional double transform_m02 = 18;
	optional double transform_m03 = 19;
	optional double transform_m10 = 20;
	optional double transform_m11 = 21;
	optional double transform_m12 = 22;
	optional double transform_m13 = 23;
	optional double transform_m20 = 24;
	optional double transform_m21 = 25;
	optional double transform_m22 = 26;
	optional double transform_m23 = 27;
	optional double transform_m30 = 28;
	optional double transform_m31 = 29;
	optional double transform_m32 = 30;
	optional double transform_m33 = 31;
	optional double perspective_depth = 32;
	optional double opacity = 33;
	optional uint32 composition_color = 34;
	optional double saturation = 35;
	optional double hue_shift = 36;
	optional double brightness = 37;
	optional double contrast = 38;
	optional uint32 opacity_mask_texture_id = 39;
	optional double opacity_mask_opacity = 40;
	optional .CBorderData border = 41;
	optional .CRadiusData border_radius = 42;
	optional .CBoxShadowData box_shadow = 43;
	optional double gaussianblur_passes = 44;
	optional double gaussianblur_stddevhor = 45;
	optional double gaussianblur_stddevver = 46;
	optional double scale_2d_factors_x = 47;
	optional double scale_2d_factors_y = 48;
	optional double rotate_2d = 49;
	optional bool needs_clear = 50;
	optional bool needs_depth = 51;
	optional bool needs_intermediate_texture = 52;
	optional bool needs_redraw_every_frame = 53;
	optional .CTextShadowData text_shadow = 54;
	optional uint32 mix_blend_mode = 55;
	optional double occluded_left_edge = 56;
	optional double occluded_top_edge = 57;
	optional double occluded_right_edge = 58;
	optional double occluded_bottom_edge = 59;
	optional .CRadialClipData radial_clip = 60;
	optional double motionblur_velocity = 61;
	optional double motionblur_dirx = 62;
	optional double motionblur_diry = 63;
	optional string composition_layer_texture_name = 64;
}

message CMsgPopCompositingLayer {
}

message CMsgFreeCompositingLayer {
	optional uint64 layer_id = 1;
}

message CMsgTransitionData {
	optional double start_time = 1;
	optional double delay_seconds = 2;
	optional double duration_seconds = 3;
	optional uint32 timing_func = 4 [default = 0];
	optional float cubic_bezier_0 = 5;
	optional float cubic_bezier_1 = 6;
	optional float cubic_bezier_2 = 7;
	optional float cubic_bezier_3 = 8;
}

message CMsgAnimationData {
	optional double start_time = 1;
	optional double delay_seconds = 2;
	optional double duration_seconds = 3;
	optional uint32 timing_func = 4;
	optional float cubic_bezier_0 = 5;
	optional float cubic_bezier_1 = 6;
	optional float cubic_bezier_2 = 7;
	optional float cubic_bezier_3 = 8;
	optional uint32 direction = 9;
	optional float iteration = 10;
	repeated .CMsgAnimationFrameData frames = 11;
}

message CMsgAnimationFrameData {
	optional float percent = 1;
	optional uint32 timing_func = 2 [default = 0];
	optional float cubic_bezier_0 = 3;
	optional float cubic_bezier_1 = 4;
	optional float cubic_bezier_2 = 5;
	optional float cubic_bezier_3 = 6;

	extensions 1000 to max;
}

message CMsgPointWithTransition {
	message AnimationFrameData {
		optional .CMsgPoint data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgPointWithTransition.AnimationFrameData animation_frame_data = 1012;
	}

	optional .CMsgPoint base = 1;
	optional .CMsgPoint transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgColor {
	message AnimationFrameData {
		optional uint32 data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgColor.AnimationFrameData animation_frame_data = 1001;
	}

	optional uint32 base = 1;
	optional uint32 transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgColorStop {
	optional double position = 1;
	optional uint32 color_rgba = 2;
}

message CMsgLinearGradient {
	optional .CMsgPoint start_position = 1;
	optional .CMsgPoint end_position = 2;
	repeated .CMsgColorStop color_stop = 3;
}

message CMsgRadialGradient {
	optional .CMsgPoint center_position = 1;
	optional .CMsgPoint offset_distance = 2;
	optional .CMsgPoint radii = 3;
	repeated .CMsgColorStop color_stop = 4;
}

message CMsgParticle {
	optional .CMsgPoint particle_position = 1;
	optional float particle_size = 2;
	optional float particle_sharpness = 3;
	optional uint32 color_rgba = 4;
}

message CMsgParticleSystem {
	optional .CMsgPoint base_position = 1;
	optional .CMsgPoint base_position_variance = 2;
	optional double particle_size = 3;
	optional double particle_size_variance = 4;
	optional double particles_per_second = 5;
	optional double particles_per_second_variance = 6;
	optional double particle_lifespan_seconds = 7;
	optional double particle_lifespan_seconds_variance = 8;
	optional .CMsgPoint particle_initial_velocity = 9;
	optional .CMsgPoint particle_initial_velocity_variance = 10;
	optional .CMsgPoint gravity_acceleration = 11;
	optional .CMsgPoint gravity_acceleration_particle_variance = 12;
	optional uint32 color_start_rgba = 13;
	optional uint32 color_start_rgba_variance = 14;
	optional uint32 color_end_rgba = 15;
	optional uint32 color_end_rgba_variance = 16;
	optional uint64 parent_panel_handle = 17;
	optional uint32 parent_brush_index = 18;
	optional float particle_sharpness = 19;
	optional float particle_sharpness_variance = 20;
	optional float particle_flicker = 21;
	optional float particle_flicker_variance = 22;
	optional .CMsgPoint particle_velocity_min = 23;
	optional .CMsgPoint particle_velocity_max = 24;
	repeated .CMsgParticle particles = 50;
}

message CMsgFillBrush {
	optional double opacity = 1;
	optional uint32 color_rgba = 2;
	optional .CMsgLinearGradient linear_gradient = 3;
	optional .CMsgRadialGradient radial_gradient = 4;
	optional .CMsgParticleSystem particle_system = 5;
}

message CMsgFillBrushCollection {
	message AnimationFrameData {
		repeated .CMsgFillBrush data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgFillBrushCollection.AnimationFrameData animation_frame_data = 1007;
	}

	repeated .CMsgFillBrush base = 1;
	repeated .CMsgFillBrush transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgRenderFillBrushCollection {
	repeated .CMsgFillBrush fill_brush = 1;
}

message CMsgPanelPosition {
	message AnimationFrameData {
		optional .CMsgPoint data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgPanelPosition.AnimationFrameData animation_frame_data = 1011;
	}

	optional .CMsgPoint base = 1;
	optional .CMsgPoint transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
	optional .CMsgPoint scroll_offset = 6;
	optional .CMsgPoint scroll_offset_target = 7;
	optional .CMsgTransitionData scroll_transition_x = 8;
	optional .CMsgTransitionData scroll_transition_y = 9;
}

message CMsgOpacity {
	message AnimationFrameData {
		optional double data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgOpacity.AnimationFrameData animation_frame_data = 1004;
	}

	optional double base = 1;
	optional double transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgRotate2D {
	message AnimationFrameData {
		optional double data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgRotate2D.AnimationFrameData animation_frame_data = 1014;
	}

	optional double base = 1;
	optional double transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgOpacityMaskData {
	optional uint32 opacity_mask_texture_id = 1;
	optional double opacity_mask_opacity = 2;
}

message CMsgOpacityMask {
	message AnimationFrameData {
		optional .CMsgOpacityMaskData data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgOpacityMask.AnimationFrameData animation_frame_data = 1013;
	}

	optional .CMsgOpacityMaskData base = 1;
	optional .CMsgOpacityMaskData transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgHueShift {
	message AnimationFrameData {
		optional double data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgHueShift.AnimationFrameData animation_frame_data = 1019;
	}

	optional double base = 1;
	optional double transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgSaturation {
	message AnimationFrameData {
		optional double data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgSaturation.AnimationFrameData animation_frame_data = 1005;
	}

	optional double base = 1;
	optional double transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgBrightness {
	message AnimationFrameData {
		optional double data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgBrightness.AnimationFrameData animation_frame_data = 1020;
	}

	optional double base = 1;
	optional double transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgContrast {
	message AnimationFrameData {
		optional double data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgContrast.AnimationFrameData animation_frame_data = 1021;
	}

	optional double base = 1;
	optional double transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgGaussianValues {
	optional double passes = 1;
	optional double stddev_hor = 2;
	optional double stddev_ver = 3;
}

message CMsgGaussianBlur {
	message AnimationFrameData {
		optional .CMsgGaussianValues data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgGaussianBlur.AnimationFrameData animation_frame_data = 1008;
	}

	optional .CMsgGaussianValues base = 1;
	optional .CMsgGaussianValues transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgMotionBlurValues {
	optional double velocity = 1;
	optional double dirx = 2;
	optional double diry = 3;
}

message CMsgMotionBlur {
	message AnimationFrameData {
		optional .CMsgMotionBlurValues data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgMotionBlur.AnimationFrameData animation_frame_data = 1022;
	}

	optional .CMsgMotionBlurValues base = 1;
	optional .CMsgMotionBlurValues transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	repeated .CMsgAnimationData animations = 4;
	optional uint32 style_symbol = 5;
}

message CMsg3DTransformPerspective {
	message AnimationFrameData {
		optional double data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsg3DTransformPerspective.AnimationFrameData animation_frame_data = 1003;
	}

	optional double base = 1;
	optional double transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsg3DTransformPerspectiveOrigin {
	message AnimationFrameData {
		optional .CMsgPoint data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsg3DTransformPerspectiveOrigin.AnimationFrameData animation_frame_data = 1002;
	}

	optional .CMsgPoint base = 1;
	optional .CMsgPoint transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgTransformOriginData {
	optional double x = 1;
	optional double y = 2;
	optional bool x_is_percent = 3;
	optional bool y_is_percent = 4;
	optional bool is_parent_relative = 5;
}

message CMsg3DTransformOrigin {
	message AnimationFrameData {
		optional .CMsgTransformOriginData data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsg3DTransformOrigin.AnimationFrameData animation_frame_data = 1015;
	}

	optional .CMsgTransformOriginData base = 1;
	optional .CMsgTransformOriginData transition = 2;
	optional .CMsgTransitionData transition_data = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsg3DTransformMatrix {
	message AnimationFrameData {
		optional .CMsgMatrix4x4 data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsg3DTransformMatrix.AnimationFrameData animation_frame_data = 1000;
	}

	optional .CMsgMatrix4x4 base = 1;
	optional .CMsgTransitionData transition_data = 2;
	optional .CMsgMatrix4x4 transition = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgBorderRadius {
	message AnimationFrameData {
		optional .CRadiusData data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgBorderRadius.AnimationFrameData animation_frame_data = 1006;
	}

	optional .CRadiusData base = 1;
	optional .CMsgTransitionData transition_data = 2;
	optional .CRadiusData transition = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgBorder {
	message AnimationFrameData {
		optional .CBorderData data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgBorder.AnimationFrameData animation_frame_data = 1009;
	}

	optional .CBorderData base = 1;
	optional .CMsgTransitionData transition_data = 2;
	optional .CBorderData transition = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgBoxShadow {
	message AnimationFrameData {
		optional .CBoxShadowData data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgBoxShadow.AnimationFrameData animation_frame_data = 1010;
	}

	optional .CBoxShadowData base = 1;
	optional .CMsgTransitionData transition_data = 2;
	optional .CBoxShadowData transition = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgTextShadow {
	message AnimationFrameData {
		optional .CTextShadowData data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgTextShadow.AnimationFrameData animation_frame_data = 1017;
	}

	optional .CTextShadowData base = 1;
	optional .CMsgTransitionData transition_data = 2;
	optional .CTextShadowData transition = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgClip {
	message AnimationFrameData {
		optional .CMsgClipData data = 1;
	}

	extend .CMsgAnimationFrameData {
		optional .CMsgClip.AnimationFrameData animation_frame_data = 1018;
	}

	optional .CMsgClipData base = 1;
	optional .CMsgTransitionData transition_data = 2;
	optional .CMsgClipData transition = 3;
	optional uint32 style_symbol = 4;
	repeated .CMsgAnimationData animations = 5;
}

message CMsgPushClipLayer {
	optional .CMsgPoint top_left = 1;
	optional .CMsgPoint bottom_right = 2;
	optional .CRadiusData border_radius = 3;
}

message CMsgPopClipLayer {
}

message CMsgPushPanelContextInLayer {
	optional double transform_m00 = 1;
	optional double transform_m01 = 2;
	optional double transform_m02 = 3;
	optional double transform_m03 = 4;
	optional double transform_m10 = 5;
	optional double transform_m11 = 6;
	optional double transform_m12 = 7;
	optional double transform_m13 = 8;
	optional double transform_m20 = 9;
	optional double transform_m21 = 10;
	optional double transform_m22 = 11;
	optional double transform_m23 = 12;
	optional double transform_m30 = 13;
	optional double transform_m31 = 14;
	optional double transform_m32 = 15;
	optional double transform_m33 = 16;
	optional .CBoxShadowData box_shadow = 17;
	optional double width = 18;
	optional double height = 19;
	optional double position_x = 20;
	optional double position_y = 21;
	optional double position_z = 22;
	optional .CBorderData border = 23;
	optional double scroll_x = 24;
	optional double scroll_y = 25;
}

message CMsgPopPanelContextInLayer {
}

message CMsgPushAAndTContext {
	optional uint64 context_id = 1;
	optional double width = 3;
	optional double height = 4;
	optional bool chilren_have_3dtransforms = 5;
	optional float zindex = 6;
	optional .CMsgPanelPosition panel_position = 7;
	optional .CMsg3DTransformMatrix transform_matrix = 8;
	optional .CMsg3DTransformOrigin transform_origin = 9;
	optional .CMsg3DTransformPerspective transform_perspective = 10;
	optional .CMsg3DTransformPerspectiveOrigin transform_perspective_origin = 11;
	optional .CMsgOpacity opacity = 12;
	optional .CMsgColor wash_color = 13;
	optional .CMsgHueShift hue_shift = 14;
	optional .CMsgSaturation saturation = 15;
	optional .CMsgBrightness brightness = 16;
	optional .CMsgContrast contrast = 17;
	optional .CMsgOpacityMask opacity_mask = 18;
	optional .CMsgBorderRadius border_radius = 19;
	optional .CMsgGaussianBlur gaussian_blur = 20;
	optional .CMsgBorder border = 21;
	optional .CMsgBoxShadow box_shadow = 22;
	optional .CMsgPointWithTransition scale_2d_centered = 23;
	optional .CMsgRotate2D rotate_2d_centered = 24;
	optional .CMsgTextShadow text_shadow = 25;
	optional .CMsgClip clip = 26;
	optional bool suppress_clip_to_bounds = 27;
	optional int32 needs_full_repaint = 28;
	optional bool needs_intermediate_texture = 29;
	optional bool clip_after_transform = 30;
	optional bool wants_hit_test = 31;
	optional bool wants_hit_test_children = 32;
	optional uint32 mix_blend_mode = 33;
	optional bool opaque_background = 34;
	optional uint32 child_panel_count = 35;
	optional bool wants_screenspace_quad_output = 36;
	optional .CMsgMotionBlur motion_blur = 37;
	optional string composition_layer_texture_name = 38;
}

message CMsgPopAAndTContext {
	optional uint64 context_id = 1;
}

message CMsgBeginPaintBackground {
}

message CMsgEndPaintBackground {
}

message CMsgBeginPaintLast {
}

message CMsgEndPaintLast {
}

message CMsgDrawFilledRect {
	optional .CMsgPoint top_left = 1;
	optional .CMsgPoint bottom_right = 2;
	optional .CMsgFillBrushCollection fill_brush_collection = 3;
	optional uint32 antialiasing = 4;
}

message CMsgRenderFilledRect {
	optional .CMsgPoint top_left = 1;
	optional .CMsgPoint bottom_right = 2;
	optional .CMsgRenderFillBrushCollection fill_brush_collection = 3;
	optional uint32 antialiasing = 4;
}

message CMsgDrawTexturedRect {
	optional .CMsgPoint top_left = 1;
	optional .CMsgPoint bottom_right = 2;
	optional uint32 texture_id = 3;
	optional .CMsgPoint texture_top_left = 4;
	optional .CMsgPoint texture_bottom_right = 5;
	optional int32 texture_serial = 6 [default = 0];
	optional uint32 texture_sample_mode = 7 [default = 0];
	optional .CMsgOpacity texture_opacity = 8;
}

message CMsgRenderTexturedRect {
	optional .CMsgPoint top_left = 1;
	optional .CMsgPoint bottom_right = 2;
	optional uint32 texture_id = 3;
	optional .CMsgPoint texture_top_left = 4;
	optional .CMsgPoint texture_bottom_right = 5;
	optional int32 texture_serial = 6 [default = 0];
	optional uint32 texture_sample_mode = 7 [default = 0];
	optional float texture_opacity = 8 [default = 1];
}

message CMsgLockTexture {
	optional uint32 texture_id = 1;
	optional int32 texture_serial = 2 [default = 0];
}

message CMsgTextInlineObject {
	optional float width = 1;
	optional float height = 2;
}

message CMsgTextFormat {
	optional string font_name = 1;
	optional double font_size = 2;
	optional int32 font_weight = 3 [default = -1];
	optional int32 font_style = 4 [default = -1];
	optional bool underline = 5;
	optional bool strikethrough = 6;
	optional .CMsgFillBrushCollection fill_brush_collection = 7;
	optional int32 letter_spacing = 8 [default = 0];
	optional .CMsgTextInlineObject inline_object = 9;
}

message CMsgTextRangeFormat {
	optional uint32 start_index = 1;
	optional uint32 end_index = 2;
	optional .CMsgTextFormat format = 3;
}

message CMsgRenderTextFormat {
	optional string font_name = 1;
	optional double font_size = 2;
	optional int32 font_weight = 3 [default = -1];
	optional int32 font_style = 4 [default = -1];
	optional bool underline = 5;
	optional bool strikethrough = 6;
	optional .CMsgRenderFillBrushCollection fill_brush_collection = 7;
	optional int32 letter_spacing = 8 [default = 0];
	optional .CMsgTextInlineObject inline_object = 9;
}

message CMsgRenderTextRangeFormat {
	optional uint32 start_index = 1;
	optional uint32 end_index = 2;
	optional .CMsgRenderTextFormat format = 3;
}

message CMsgDrawTextRegion {
	optional bytes raw_text = 11;
	optional int32 text_chars = 12;
	optional int32 text_encoding = 13;
	optional .CMsgTextFormat default_format = 3;
	optional uint32 text_align = 4;
	optional uint32 line_height = 5;
	optional .CMsgPoint top_left = 6;
	optional .CMsgPoint bottom_right = 7;
	optional bool wrapping = 8;
	optional bool ellipsis = 9;
	repeated .CMsgTextRangeFormat range_formats = 10;
}

message CMsgRenderTextRegion {
	optional bytes raw_text = 12;
	optional int32 text_chars = 13;
	optional int32 text_encoding = 14;
	optional .CMsgRenderTextFormat default_format = 3;
	optional uint32 text_align = 4;
	optional uint32 line_height = 5;
	optional .CMsgPoint top_left = 6;
	optional .CMsgPoint bottom_right = 7;
	optional bool wrapping = 8;
	optional bool ellipsis = 9;
	repeated .CMsgRenderTextRangeFormat range_formats = 10;
	optional .CTextShadowData text_shadow = 11;
}

message CMsgRequestRenderCallback {
	optional bytes callback_obj = 1;
	optional .CMsgPoint top_left = 2;
	optional .CMsgPoint bottom_right = 3;
	optional .CMsgPoint top_left_padding = 4;
	optional .CMsgPoint bottom_right_padding = 5;
	optional bool needs_redraw_every_frame = 6;
}

