/////////////////////////////////////////////////////////////////////////// //// the selection // selections come in 5 modes: // // oneline (also multiple lines but all fill the row): // | ######### | // // disjoint: // | #######| // |## | // // default: // | ###########| // |######### | // // topfull: // |##############| // |###### | // // bottomfull: // | ######| // |##############| group { name: "terminology/selection"; parts { // background pattern. duplicated because clips cut out regions of // it to see and clips don't overlap part { name: "background_top"; type: RECT; mouse_events: 0; clip_to: "top_clip"; description { state: "default" 0.0; color: 255 255 255 128; // no cc color_class: "GLOW"; } } part { name: "background_middle"; type: RECT; mouse_events: 0; clip_to: "middle_clip"; description { state: "default" 0.0; color: 255 255 255 128; // no cc color_class: "GLOW"; } } part { name: "background_bottom"; type: RECT; mouse_events: 0; clip_to: "bottom_clip"; description { state: "default" 0.0; color: 255 255 255 128; // no cc color_class: "GLOW"; } } // clips that clip the above pattern images to occupy specific // regions of the object (or be invisible since clip is invisible) part { name: "top_clip"; type: RECT; mouse_events: 0; description { state: "default" 0.0; rel1.to: "terminology.top_left"; rel1.relative: 1.0 0.0; rel2.to_y: "terminology.top_left"; rel2.relative: 1.0 1.0; } description { state: "oneline" 0.0; inherit: "default" 0.0; visible: 0; } description { state: "disjoint" 0.0; inherit: "default" 0.0; } description { state: "topfull" 0.0; inherit: "default" 0.0; } description { state: "bottomfull" 0.0; inherit: "default" 0.0; } } part { name: "middle_clip"; type: RECT; mouse_events: 0; description { state: "default" 0.0; rel1.to: "terminology.top_left"; rel1.relative: 0.0 1.0; rel2.to: "terminology.bottom_right"; rel2.relative: 1.0 0.0; } description { state: "oneline" 0.0; rel1.to: "terminology.top_left"; rel1.relative: 1.0 0.0; rel2.to: "terminology.bottom_right"; rel2.relative: 0.0 1.0; } description { state: "disjoint" 0.0; inherit: "default" 0.0; } description { state: "topfull" 0.0; inherit: "default" 0.0; } description { state: "bottomfull" 0.0; inherit: "default" 0.0; } } part { name: "bottom_clip"; type: RECT; mouse_events: 0; description { state: "default" 0.0; rel1.to_y: "terminology.bottom_right"; rel1.relative: 0.0 0.0; rel2.to_x: "terminology.bottom_right"; rel2.relative: 0.0 1.0; } description { state: "oneline" 0.0; visible: 0; } description { state: "disjoint" 0.0; inherit: "default" 0.0; } description { state: "topfull" 0.0; inherit: "default" 0.0; } description { state: "bottomfull" 0.0; inherit: "default" 0.0; } } // the outline around the selection... #define TARGETS \ target: "top_clip"; target: "middle_clip"; target: "bottom_clip"; program { signal: "mode,oneline"; source: "terminology"; action: STATE_SET "oneline" 0.0; TARGETS; } program { signal: "mode,disjoint"; source: "terminology"; action: STATE_SET "disjoint" 0.0; TARGETS; } program { signal: "mode,multiline"; source: "terminology"; action: STATE_SET "default" 0.0; TARGETS; } program { signal: "mode,topfull"; source: "terminology"; action: STATE_SET "topfull" 0.0; TARGETS; } program { signal: "mode,bottomfull"; source: "terminology"; action: STATE_SET "bottomfull" 0.0; TARGETS; } // top and bottom swallows used to communicate via min/max size the // size of the top and bottom lines part { name: "terminology.top_left"; type: SWALLOW; mouse_events: 0; description { state: "default" 0.0; align: 0.0 0.0; rel2.relative: 0.0 0.0; visible: 0; } } part { name: "terminology.bottom_right"; type: SWALLOW; mouse_events: 0; description { state: "default" 0.0; align: 1.0 1.0; rel1.relative: 1.0 1.0; visible: 0; } } // blinky cursors indicating you can drag the ends of the selection part { name: "cursor.top_left"; type: SPACER; description { state: "default" 0.0; rel.to: "terminology.top_left"; rel1.relative: 1.0 0.0; rel2.relative: 1.0 1.0; max: 0 99999; } } part { name: "cursor.top_left_arrow_l"; scale: 1; description { state: "default" 0.0; image.normal: "arrow-l"; color_class: "/fg/normal/term/selection/arrow/left"; rel.to: "cursor.top_left"; min: 15 15; max: 15 15; align: 1.0 0.5; rel1.offset: -5 0; rel2.offset: -5 -1; rel2.relative: 0.0 1.0; offscale; } description { state: "fading" 0.0; inherit: "default" 0.0; } description { state: "fading" 1.0; inherit: "default" 0.0; rel1.offset: -15 0; rel2.offset: -15 -1; color: 255 255 255 0; // no cc } } part { name: "cursor.top_left_arrow_u"; scale: 1; description { state: "default" 0.0; image.normal: "arrow-u"; color_class: "/fg/normal/term/selection/arrow/up"; rel.to: "cursor.top_left"; min: 15 15; max: 15 15; align: 0.5 1.0; rel1.offset: 0 -5; rel2.offset: -1 -5; rel2.relative: 1.0 0.0; offscale; } description { state: "fading" 0.0; inherit: "default" 0.0; } description { state: "fading" 1.0; inherit: "default" 0.0; rel1.offset: 0 -15; rel2.offset: -1 -15; color: 255 255 255 0; // no cc } } part { name: "zone.top_left"; type: RECT; scale: 1; description { state: "default" 0.0; color: 0 0 0 0; rel.to: "cursor.top_left"; min: 30 30; rel1.offset: -15 -15; rel2.offset: 14 -1; offscale; } program { name: "top_left.blink"; signal: "mouse,in"; source: "zone.top_left"; action: STATE_SET "fading" 0.0; target: "cursor.top_left_arrow_l"; target: "cursor.top_left_arrow_u"; after: "top_left.fade"; } program { name: "top_left.fade"; action: STATE_SET "fading" 1.0; transition: LINEAR 0.5; target: "cursor.top_left_arrow_l"; target: "cursor.top_left_arrow_u"; after: "top_left.blink"; } program { signal: "mouse,out"; source: "zone.top_left"; action: STATE_SET "default" 0.0; target: "cursor.top_left_arrow_l"; target: "cursor.top_left_arrow_u"; } } part { name: "cursor.bottom_right"; type: SPACER; description { state: "default" 0.0; rel.to: "terminology.bottom_right"; rel1.relative: 0.0 0.0; rel2.relative: 0.0 1.0; max: 0 99999; } } part { name: "cursor.top_left_arrow_r"; scale: 1; description { state: "default" 0.0; image.normal: "arrow-r"; color_class: "/fg/normal/term/selection/arrow/left"; rel.to: "cursor.bottom_right"; min: 15 15; max: 15 15; align: 0.0 0.5; rel1.offset: 4 0; rel2.offset: 4 -1; rel1.relative: 1.0 0.0; offscale; } description { state: "fading" 0.0; inherit: "default" 0.0; } description { state: "fading" 1.0; inherit: "default" 0.0; rel1.offset: 14 0; rel2.offset: 14 -1; color: 255 255 255 0; // no cc } } part { name: "cursor.top_left_arrow_d"; scale: 1; description { state: "default" 0.0; image.normal: "arrow-d"; color_class: "/fg/normal/term/selection/arrow/down"; rel.to: "cursor.bottom_right"; min: 15 15; max: 15 15; align: 0.5 0.0; rel1.offset: 0 4; rel2.offset: -1 4; rel1.relative: 0.0 1.0; offscale; } description { state: "fading" 0.0; inherit: "default" 0.0; } description { state: "fading" 1.0; inherit: "default" 0.0; rel1.offset: 0 14; rel2.offset: -1 14; color: 255 255 255 0; // no cc } } part { name: "zone.bottom_right"; type: RECT; scale: 1; description { state: "default" 0.0; color: 0 0 0 0; rel.to: "cursor.bottom_right"; min: 30 30; rel1.offset: -15 0; rel2.offset: 14 14; offscale; } program { name: "bottom_right.blink"; signal: "mouse,in"; source: "zone.bottom_right"; action: STATE_SET "fading" 0.0; target: "cursor.top_left_arrow_r"; target: "cursor.top_left_arrow_d"; after: "bottom_right.fade"; } program { name: "bottom_right.fade"; action: STATE_SET "fading" 1.0; transition: LINEAR 0.5; target: "cursor.top_left_arrow_r"; target: "cursor.top_left_arrow_d"; after: "bottom_right.blink"; } program { signal: "mouse,out"; source: "zone.bottom_right"; action: STATE_SET "default" 0.0; target: "cursor.top_left_arrow_r"; target: "cursor.top_left_arrow_d"; } } } }