1with agar.core.event; 2with agar.core.timeout; 3 4package agar.gui.widget.scrollbar is 5 6 use type c.unsigned; 7 8 type type_t is (SCROLLBAR_HORIZ, SCROLLBAR_VERT); 9 for type_t use (SCROLLBAR_HORIZ => 0, SCROLLBAR_VERT => 1); 10 for type_t'size use c.unsigned'size; 11 pragma convention (c, type_t); 12 13 type button_t is ( 14 SCROLLBAR_BUTTON_NONE, 15 SCROLLBAR_BUTTON_DEC, 16 SCROLLBAR_BUTTON_INC, 17 SCROLLBAR_BUTTON_SCROLL 18 ); 19 for button_t use ( 20 SCROLLBAR_BUTTON_NONE => 0, 21 SCROLLBAR_BUTTON_DEC => 1, 22 SCROLLBAR_BUTTON_INC => 2, 23 SCROLLBAR_BUTTON_SCROLL => 3 24 ); 25 for button_t'size use c.unsigned'size; 26 pragma convention (c, button_t); 27 28 type flags_t is new c.unsigned; 29 SCROLLBAR_HFILL : constant flags_t := 16#01#; 30 SCROLLBAR_VFILL : constant flags_t := 16#02#; 31 SCROLLBAR_EXPAND : constant flags_t := SCROLLBAR_HFILL or SCROLLBAR_VFILL; 32 33 type scrollbar_t is limited private; 34 type scrollbar_access_t is access all scrollbar_t; 35 pragma convention (c, scrollbar_access_t); 36 37 -- API 38 39 function allocate_integer 40 (parent : widget_access_t; 41 bar_type : type_t; 42 flags : flags_t; 43 min : agar.core.types.integer_access_t; 44 max : agar.core.types.integer_access_t; 45 visible : agar.core.types.integer_access_t) return scrollbar_access_t; 46 pragma import (c, allocate_integer, "AG_ScrollbarNewInt"); 47 48 function allocate_unsigned 49 (parent : widget_access_t; 50 bar_type : type_t; 51 flags : flags_t; 52 min : agar.core.types.unsigned_access_t; 53 max : agar.core.types.unsigned_access_t; 54 visible : agar.core.types.unsigned_access_t) return scrollbar_access_t; 55 pragma import (c, allocate_unsigned, "AG_ScrollbarNewUint"); 56 57 function allocate_float 58 (parent : widget_access_t; 59 bar_type : type_t; 60 flags : flags_t; 61 min : agar.core.types.float_access_t; 62 max : agar.core.types.float_access_t; 63 visible : agar.core.types.float_access_t) return scrollbar_access_t; 64 pragma import (c, allocate_float, "AG_ScrollbarNewFloat"); 65 66 function allocate_double 67 (parent : widget_access_t; 68 bar_type : type_t; 69 flags : flags_t; 70 min : agar.core.types.double_access_t; 71 max : agar.core.types.double_access_t; 72 visible : agar.core.types.double_access_t) return scrollbar_access_t; 73 pragma import (c, allocate_double, "AG_ScrollbarNewDouble"); 74 75 function allocate_uint8 76 (parent : widget_access_t; 77 bar_type : type_t; 78 flags : flags_t; 79 value : agar.core.types.uint8_ptr_t; 80 min : agar.core.types.uint8_ptr_t; 81 max : agar.core.types.uint8_ptr_t; 82 visible : agar.core.types.uint8_ptr_t) return scrollbar_access_t; 83 pragma import (c, allocate_uint8, "AG_ScrollbarNewUint8"); 84 85 function allocate_int8 86 (parent : widget_access_t; 87 bar_type : type_t; 88 flags : flags_t; 89 value : agar.core.types.int8_ptr_t; 90 min : agar.core.types.int8_ptr_t; 91 max : agar.core.types.int8_ptr_t; 92 visible : agar.core.types.int8_ptr_t) return scrollbar_access_t; 93 pragma import (c, allocate_int8, "AG_ScrollbarNewSint8"); 94 95 function allocate_uint16 96 (parent : widget_access_t; 97 bar_type : type_t; 98 flags : flags_t; 99 value : agar.core.types.uint16_ptr_t; 100 min : agar.core.types.uint16_ptr_t; 101 max : agar.core.types.uint16_ptr_t; 102 visible : agar.core.types.uint16_ptr_t) return scrollbar_access_t; 103 pragma import (c, allocate_uint16, "AG_ScrollbarNewUint16"); 104 105 function allocate_int16 106 (parent : widget_access_t; 107 bar_type : type_t; 108 flags : flags_t; 109 value : agar.core.types.int16_ptr_t; 110 min : agar.core.types.int16_ptr_t; 111 max : agar.core.types.int16_ptr_t; 112 visible : agar.core.types.int16_ptr_t) return scrollbar_access_t; 113 pragma import (c, allocate_int16, "AG_ScrollbarNewSint16"); 114 115 function allocate_uint32 116 (parent : widget_access_t; 117 bar_type : type_t; 118 flags : flags_t; 119 value : agar.core.types.uint32_ptr_t; 120 min : agar.core.types.uint32_ptr_t; 121 max : agar.core.types.uint32_ptr_t; 122 visible : agar.core.types.uint32_ptr_t) return scrollbar_access_t; 123 pragma import (c, allocate_uint32, "AG_ScrollbarNewUint32"); 124 125 function allocate_int32 126 (parent : widget_access_t; 127 bar_type : type_t; 128 flags : flags_t; 129 value : agar.core.types.int32_ptr_t; 130 min : agar.core.types.int32_ptr_t; 131 max : agar.core.types.int32_ptr_t; 132 visible : agar.core.types.int32_ptr_t) return scrollbar_access_t; 133 pragma import (c, allocate_int32, "AG_ScrollbarNewSint32"); 134 135 procedure set_size 136 (scrollbar : scrollbar_access_t; 137 size : natural); 138 pragma inline (set_size); 139 140 function get_size (scrollbar : scrollbar_access_t) return natural; 141 pragma inline (get_size); 142 143 function visible (scrollbar : scrollbar_access_t) return boolean; 144 pragma inline (visible); 145 146 procedure set_increment 147 (scrollbar : scrollbar_access_t; 148 increment : positive); 149 pragma inline (set_increment); 150 151 procedure set_increment 152 (scrollbar : scrollbar_access_t; 153 increment : long_float); 154 pragma inline (set_increment); 155 156 function widget (scrollbar : scrollbar_access_t) return widget_access_t; 157 pragma inline (widget); 158 159private 160 161 type scrollbar_t is record 162 widget : aliased widget_t; 163 flags : flags_t; 164 165 value : c.int; 166 min : c.int; 167 max : c.int; 168 visible : c.int; 169 bar_type : type_t; 170 bar_button : button_t; 171 button_width : c.int; 172 bar_width : c.int; 173 arrow_height : c.int; 174 button_inc_func : access agar.core.event.event_t; 175 button_dec_func : access agar.core.event.event_t; 176 scroll_to : agar.core.timeout.timeout_t; 177 inc_to : agar.core.timeout.timeout_t; 178 dec_to : agar.core.timeout.timeout_t; 179 x_offset : c.int; 180 extent : c.int; 181 r_inc : c.double; 182 i_inc : c.int; 183 end record; 184 pragma convention (c, scrollbar_t); 185 186end agar.gui.widget.scrollbar; 187