From 142bcfd70fc1c3476057117a08315b3b6c5db7bf Mon Sep 17 00:00:00 2001 From: antognolli Date: Wed, 20 Jul 2011 20:58:24 +0000 Subject: [PATCH] elementary/layout - adding description and moving function reference docs. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@61538 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- doc/img/layout_box.eps | 395 +++++++++++++++++++++++++++++++++++ doc/img/layout_box.png | Bin 0 -> 7012 bytes doc/img/layout_swallow.eps | 324 +++++++++++++++++++++++++++++ doc/img/layout_swallow.png | Bin 0 -> 5099 bytes doc/img/layout_table.eps | 443 ++++++++++++++++++++++++++++++++++++++++ doc/img/layout_table.png | Bin 0 -> 10137 bytes src/lib/Elementary.h.in | 499 ++++++++++++++++++++++++++++++++++++++++++++- src/lib/elm_layout.c | 282 ------------------------- 8 files changed, 1660 insertions(+), 283 deletions(-) create mode 100644 doc/img/layout_box.eps create mode 100644 doc/img/layout_box.png create mode 100644 doc/img/layout_swallow.eps create mode 100644 doc/img/layout_swallow.png create mode 100644 doc/img/layout_table.eps create mode 100644 doc/img/layout_table.png diff --git a/doc/img/layout_box.eps b/doc/img/layout_box.eps new file mode 100644 index 0000000..262d0e7 --- /dev/null +++ b/doc/img/layout_box.eps @@ -0,0 +1,395 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: cairo 1.10.2 (http://cairographics.org) +%%CreationDate: Wed Jul 20 18:10:30 2011 +%%Pages: 1 +%%BoundingBox: 0 -1 273 208 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%EndComments +%%BeginProlog +/cairo_eps_state save def +/dict_count countdictstack def +/op_count count 1 sub def +userdict begin +/q { gsave } bind def +/Q { grestore } bind def +/cm { 6 array astore concat } bind def +/w { setlinewidth } bind def +/J { setlinecap } bind def +/j { setlinejoin } bind def +/M { setmiterlimit } bind def +/d { setdash } bind def +/m { moveto } bind def +/l { lineto } bind def +/c { curveto } bind def +/h { closepath } bind def +/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto + 0 exch rlineto 0 rlineto closepath } bind def +/S { stroke } bind def +/f { fill } bind def +/f* { eofill } bind def +/n { newpath } bind def +/W { clip } bind def +/W* { eoclip } bind def +/BT { } bind def +/ET { } bind def +/pdfmark where { pop globaldict /?pdfmark /exec load put } + { globaldict begin /?pdfmark /pop load def /pdfmark + /cleartomark load def end } ifelse +/BDC { mark 3 1 roll /BDC pdfmark } bind def +/EMC { mark /EMC pdfmark } bind def +/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def +/Tj { show currentpoint cairo_store_point } bind def +/TJ { + { + dup + type /stringtype eq + { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse + } forall + currentpoint cairo_store_point +} bind def +/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore + cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def +/Tf { pop /cairo_font exch def /cairo_font_matrix where + { pop cairo_selectfont } if } bind def +/Td { matrix translate cairo_font_matrix matrix concatmatrix dup + /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point + /cairo_font where { pop cairo_selectfont } if } bind def +/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def + cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def +/g { setgray } bind def +/rg { setrgbcolor } bind def +/d1 { setcachedevice } bind def +%%EndProlog +11 dict begin +/FontType 42 def +/FontName /DejaVuSans def +/PaintType 0 def +/FontMatrix [ 1 0 0 1 0 0 ] def +/FontBBox [ 0 0 0 0 ] def +/Encoding 256 array def +0 1 255 { Encoding exch /.notdef put } for +Encoding 1 /uni004C put +Encoding 2 /uni0061 put +Encoding 3 /uni0079 put +Encoding 4 /uni006F put +Encoding 5 /uni0075 put +Encoding 6 /uni0074 put +Encoding 7 /uni0020 put +Encoding 8 /uni0057 put +Encoding 9 /uni0069 put +Encoding 10 /uni0064 put +Encoding 11 /uni0067 put +Encoding 12 /uni0065 put +Encoding 13 /uni0042 put +Encoding 14 /uni0078 put +Encoding 15 /uni0043 put +Encoding 16 /uni0068 put +Encoding 17 /uni006C put +Encoding 18 /uni0031 put +Encoding 19 /uni0032 put +Encoding 20 /uni0033 put +Encoding 21 /uni0035 put +Encoding 22 /uni0034 put +Encoding 23 /uni0036 put +/CharStrings 24 dict dup begin +/.notdef 0 def +/uni004C 1 def +/uni0061 2 def +/uni0079 3 def +/uni006F 4 def +/uni0075 5 def +/uni0074 6 def +/uni0020 7 def +/uni0057 8 def +/uni0069 9 def +/uni0064 10 def +/uni0067 11 def +/uni0065 12 def +/uni0042 13 def +/uni0078 14 def +/uni0043 15 def +/uni0068 16 def +/uni006C 17 def +/uni0031 18 def +/uni0032 19 def +/uni0033 20 def +/uni0035 21 def +/uni0034 22 def +/uni0036 23 def +end readonly def +/sfnts [ +<00010000000a008000030020636d617000baf144000012380000006e6376742000691d390000 +12a8000001fe6670676d7134766a000014a8000000ab676c796654844c08000000ac0000118c +68656164f5a891960000155400000036686865610cb806690000158c00000024686d74787164 +0c2b000015b0000000606c6f63610000d95c00001610000000646d6178700485067100001674 +00000020707265703b07f100000016940000056800020066fe96046605a400030007001a400c +04fb0006fb0108057f0204002fc4d4ec310010d4ecd4ec301311211125211121660400fc7303 +1bfce5fe96070ef8f2720629000100c90000046a05d500050025400c0295008104011c033a00 +040610fcecec31002fe4ec304009300750078003800404015d133311211521c9ca02d7fc5f05 +d5fad5aa0002007bffe3042d047b000a002500bc4027191f0b17090e00a91706b90e1120861f +ba1cb923b8118c170c001703180d09080b1f030814452610fcecccd4ec323211393931002fc4 +e4f4fcf4ec10c6ee10ee11391139123930406e301d301e301f3020302130223f27401d401e40 +1f402040214022501d501e501f50205021502250277027851d871e871f8720872185229027a0 +27f0271e301e301f30203021401e401f40204021501e501f50205021601e601f60206021701e +701f70207021801e801f80208021185d015d0122061514163332363d01371123350e01232226 +353436332135342623220607353e0133321602bedfac816f99b9b8b83fbc88accbfdfb0102a7 +9760b65465be5af3f00233667b6273d9b4294cfd81aa6661c1a2bdc0127f8b2e2eaa2727fc00 +0001003dfe56047f0460000f018b40430708020911000f0a110b0a00000f0e110f000f0d110c +0d00000f0d110e0d0a0b0a0c110b0b0a420d0b0910000b058703bd0e0bbc100e0d0c0a090603 +00080f040f0b1010d44bb00a544bb008545b58b9000b004038594bb0145458b9000bffc03859 +c4c4111739310010e432f4ec113911391239304b5358071005ed071008ed071008ed071005ed +071008ed0705ed173259220140f0060005080609030d160a170d100d230d350d490a4f0a4e0d +5a095a0a6a0a870d800d930d120a000a09060b050c0b0e0b0f1701150210041005170a140b14 +0c1a0e1a0f2700240124022004200529082809250a240b240c270d2a0e2a0f20113700350135 +0230043005380a360b360c380d390e390f301141004001400240034004400540064007400842 +09450a470d490e490f40115400510151025503500450055606550756085709570a550b550c59 +0e590f501166016602680a690e690f60117b08780e780f89008a09850b850c890d890e890f99 +09950b950c9a0e9a0fa40ba40cab0eab0fb011cf11df11ff11655d005d050e012b0135333236 +3f01013309013302934e947c936c4c543321fe3bc3015e015ec368c87a9a488654044efc9403 +6c00000000020071ffe30475047b000b0017004a401306b91200b90cb8128c1809120f510312 +15451810fcecf4ec310010e4f4ec10ee3040233f197b007b067f077f087f097f0a7f0b7b0c7f +0d7f0e7f0f7f107f117b12a019f01911015d0122061514163332363534262732001110002322 +00111000027394acab9593acac93f00112feeef0f1feef011103dfe7c9c9e7e8c8c7e99cfec8 +feecfeedfec701390113011401380000000200aeffe30458047b00130014003b401c03090003 +0e0106870e118c0a01bc14b80c0d0908140b4e020800461510fcecf439ec3231002fe4e432f4 +c4ec1112173930b46f15c01502015d1311331114163332363511331123350e0123222601aeb8 +7c7c95adb8b843b175c1c801cf01ba02a6fd619f9fbea4027bfba0ac6663f003a80000010037 +000002f2059e0013003840190e05080f03a9001101bc08870a0b08090204000810120e461410 +fc3cc4fc3cc432393931002fecf43cc4ec3211393930b2af1501015d01112115211114163b01 +152322263511233533110177017bfe854b73bdbdd5a28787059efec28ffda0894e9a9fd20260 +8f013e00000000010044000007a605d5000c017b4049051a0605090a09041a0a09031a0a0b0a +021a01020b0b0a061107080705110405080807021103020c000c011100000c420a0502030603 +00af0b080c0b0a09080605040302010b07000d10d4cc173931002f3cec32321739304b535807 +1005ed071008ed071008ed071005ed071008ed071005ed0705ed071008ed5922b2000e01015d +40f206020605020a000a000a120a2805240a200a3e023e05340a300a4c024d05420a400a5902 +6a026b05670a600a7b027f027c057f05800a960295051d070009020803000406050005000601 +070408000807090009040a0a0c000e1a0315041508190c100e20042105200620072008230924 +0a250b200e200e3c023a033504330530083609390b3f0c300e460046014a0240044505400542 +064207420840084009440a4d0c400e400e58025608590c500e66026703610462056006600760 +086409640a640b770076017b027803770474057906790777087008780c7f0c7f0e8602870388 +04890585098a0b8f0e97049f0eaf0e5b5d005d1333090133090133012309012344cc013a0139 +e3013a0139cdfe89fefec5fec2fe05d5fb1204eefb1204eefa2b0510faf00000000200c10000 +0179061400030007002b400e06be04b100bc020501080400460810fc3cec3231002fe4fcec30 +400b1009400950096009700905015d1333112311331523c1b8b8b8b80460fba00614e9000002 +0071ffe3045a06140010001c003840191ab9000e14b905088c0eb80197031704000802471112 +0b451d10fcecf4ec323231002fece4f4c4ec10c4ee30b6601e801ea01e03015d011133112335 +0e0123220211100033321601141633323635342623220603a2b8b83ab17ccbff00ffcb7cb1fd +c7a79292a8a89292a703b6025ef9eca86461014401080108014461fe15cbe7e7cbcbe7e70002 +0071fe56045a047b000b0028004a4023190c1d0912861316b90f03b92623b827bc09b90fbd1a +1d261900080c4706121220452910fcc4ecf4ec323231002fc4e4ece4f4c4ec10fed5ee111239 +3930b6602a802aa02a03015d01342623220615141633323617100221222627351e013332363d +010e0123220211101233321617353303a2a59594a5a59495a5b8fefefa61ac51519e52b5b439 +b27ccefcfcce7cb239b8023dc8dcdcc8c7dcdcebfee2fee91d1eb32c2abdbf5b6362013a0103 +0104013a6263aa0000020071ffe3047f047b0014001b00704024001501098608880515a90105 +b90c01bb18b912b80c8c1c1b1502081508004b02120f451c10fcecf4ecc4111239310010e4f4 +ece410ee10ee10f4ee1112393040293f1d701da01dd01df01d053f003f013f023f153f1b052c +072f082f092c0a6f006f016f026f156f1b095d71015d0115211e0133323637150e0123200011 +1000333200072e0123220607047ffcb20ccdb76ac76263d06bfef4fec70129fce20107b802a5 +889ab90e025e5abec73434ae2a2c0138010a01130143feddc497b4ae9e00000300c9000004ec +05d5000800110020004340231900950a0995128101950aad1f110b080213191f05000e1c1605 +191c2e09001c12042110fcec32fcecd4ec111739393931002fececf4ec10ee3930b20f220101 +5d01112132363534262301112132363534262325213216151406071e01151404232101930144 +a39d9da3febc012b94919194fe0b0204e7fa807c95a5fef0fbfde802c9fddd878b8c850266fe +3e6f727170a6c0b189a21420cb98c8da0001003b000004790460000b01434046051106070604 +1103040707060411050401020103110202010b110001000a11090a0101000a110b0a07080709 +11080807420a070401040800bf05020a0704010408000208060c10d44bb00a544bb00f545b4b +b010545b4bb011545b58b90006004038594bb0145458b90006ffc03859c4d4c411173931002f +3cec321739304b5358071005ed071008ed071008ed071005ed071005ed071008ed071008ed07 +1005ed59220140980a04040a1a04150a260a3d04310a55045707580a660a76017a047607740a +8d04820a99049f049707920a900aa601a904af04a507a30aa00a1c0a03040505090a0b1a0315 +0515091a0b2903260525092a0b200d3a013903370534073609390b300d4903460545094a0b40 +0d590056015902590357055606590756085609590b500d6f0d78017f0d9b019407ab01a407b0 +0dcf0ddf0dff0d2f5d005d09022309012309013309010464fe6b01aad9febafebad901b3fe72 +d9012901290460fddffdc101b8fe48024a0216fe71018f0000010073ffe3052705f000190036 +401a0da10eae0a951101a100ae04951791118c1a07190d003014101a10fcec32ec310010e4f4 +ecf4ec10eef6ee30b40f1b1f1b02015d01152e0123200011100021323637150e012320001110 +00213216052766e782ff00fef00110010082e7666aed84feadfe7a0186015386ed0562d55f5e +fec7fed8fed9fec75e5fd34848019f01670168019f470000000100ba00000464061400130034 +4019030900030e0106870e11b80c970a010208004e0d09080b461410fcec32f4ec31002f3cec +f4c4ec1112173930b2601501015d0111231134262322061511231133113e013332160464b87c +7c95acb9b942b375c1c602a4fd5c029e9f9ebea4fd870614fd9e6564ef00000100c100000179 +061400030022b7009702010800460410fcec31002fec30400d10054005500560057005f00506 +015d13331123c1b8b80614f9ec00000100e10000045a05d5000a004040154203a00402a00581 +0700a009081f061c03001f010b10d44bb00f5458b9000100403859ecc4fcec31002fec32f4ec +d4ec304b5358592201b40f030f04025d3721110535253311211521fe014afe990165ca014afc +a4aa047348b848fad5aa0000000100960000044a05f0001c009a4027191a1b03181c11050400 +110505044210a111940da014910400a00200100a02010a1c171003061d10fc4bb015544bb016 +545b4bb014545b58b90003ffc03859c4d4ecc0c011123931002fec32f4ecf4ec304b53580710 +05ed0705ed11173959220140325504560556077a047a05761b87190704000419041a041b051c +74007606751a731b741c82008619821a821b821ca800a81b115d005d25211521353600373e01 +35342623220607353e01333204151406070600018902c1fc4c73018d33614da7865fd3787ad4 +58e80114455b19fef4aaaaaa7701913a6d974977964243cc3132e8c25ca5701dfeeb00000001 +009cffe3047305f000280070402e0015130a86091f862013a0150da00993061ca02093239106 +8c15a329161c13000314191c2620101c03141f09062910fc4bb016544bb014545b58b90009ff +c03859c4c4d4ecf4ec11173939310010ece4f4e4ec10e6ee10ee10ee10ee1112393001400964 +1e611f6120642104005d011e0115140421222627351e013332363534262b0135333236353426 +23220607353e01333204151406033f91a3fed0fee85ec76a54c86dbec7b9a5aeb6959ea39853 +be7273c959e6010c8e03251fc490ddf22525c33132968f8495a67770737b2426b42020d1b27c +ab000001009effe3046405d5001d005e4023041a071186101d1aa00714a010890d02a000810d +8c07a41e171c010a031c000a10061e10fc014bb016544bb014545b58b90010ffc038594bb00f +5458b9001000403859c4d4ec10c4ee310010e4e4f4ec10e6ee10fec410ee1112393013211521 +113e0133320015140021222627351e0133323635342623220607dd0319fda02c582cfa0124fe +d4feef5ec3685ac06badcacaad51a15405d5aafe920f0ffeeeeaf1fef52020cb3130b69c9cb6 +2426000000020064000004a405d50002000d0081401d010d030d0003030d4200030b07a00501 +038109010c0a001c0608040c0e10dc4bb00b544bb00d545b58b9000cffc03859d43cc4ec3211 +3931002fe4d43cec321239304b5358071004c9071005c9592201402a0b002a00480059006900 +77008a000716012b0026012b0336014e014f0c4f0d5601660175017a0385010d5d005d090121 +03331133152311231121350306fe0201fe35fed5d5c9fd5e0525fce303cdfc33a8fea00160c3 +00000002008fffe3049605f0000b0024005840241306000d860c00a01606a01c16a510a00c89 +22911c8c250c22091c191e131c03211f1b2510fcececf4ece4310010e4f4e4fce410ee10ee10 +ee111239304014cb00cb01cd02cd03cd04cb05cb0607a41eb21e025d015d0122061514163332 +3635342601152e01232202033e0133320015140023200011100021321602a4889f9f88889f9f +01094c9b4cc8d30f3bb26be10105fef0e2fefdfeee0150011b4c9b033bbaa2a1bbbba1a2ba02 +79b82426fef2feef575dfeefebe6feea018d0179016201a51e00000000000002000300000000 +001400010000000000340004002000000004000400010000f017ffff0000f000ffff10000001 +000000000006003a0000000000180000000100020003000400050006000700080009000a000b +000c000d000e000f001000110012001300140015001600170000013500b800cb00cb00c100aa +009c01a600b800660000007100cb00a002b20085007500b800c301cb0189022d00cb00a600f0 +00d300aa008700cb03aa0400014a003300cb000000d9050200f4015400b4009c013901140139 +07060400044e04b4045204b804e704cd0037047304cd04600473013303a2055605a605560539 +03c5021200c9001f00b801df007300ba03e9033303bc0444040e00df03cd03aa00e503aa0404 +000000cb008f00a4007b00b80014016f007f027b0252008f00c705cd009a009a006f00cb00cd +019e01d300f000ba018300d5009803040248009e01d500c100cb00f600830354027f00000333 +026600d300c700a400cd008f009a0073040005d5010a00fe022b00a400b4009c00000062009c +0000001d032d05d505d505d505f0007f007b005400a406b80614072301d300b800cb00a601c3 +01ec069300a000d3035c037103db0185042304a80448008f0139011401390360008f05d5019a +0614072306660179046004600460047b009c00000277046001aa00e904600762007b00c5007f +027b000000b4025205cd006600bc00660077061000cd013b01850389008f007b0000001d00cd +074a042f009c009c0000077d006f0000006f0335006a006f007b00ae00b2002d0396008f027b +00f600830354063705f6008f009c04e10266008f018d02f600cd03440029006604ee00730000 +140000960000b707060504030201002c2010b002254964b040515820c859212d2cb002254964 +b040515820c859212d2c20100720b00050b00d7920b8ffff5058041b0559b0051cb0032508b0 +042523e120b00050b00d7920b8ffff5058041b0559b0051cb0032508e12d2c4b505820b0fd45 +4459212d2cb002254560442d2c4b5358b00225b0022545445921212d2c45442d2cb00225b002 +2549b00525b005254960b0206368208a108a233a8a10653a2d0000010000000251eba5041748 +5f0f3cf5001f080000000000c896fa5500000000c896fa55f7d6fcae0d720955000000080000 +00010000000000010000076dfe1d00000de2f7d6fa510d720001000000000000000000000000 +0000001804cd0066047500c904e7007b04bc003d04e50071051200ae03230037028b000007e9 +0044023900c1051400710514007104ec0071057d00c904bc003b05960073051200ba023900c1 +051700e1051700960517009c0517009e051700640517008f0000000000000044000000880000 +01b40000038000000424000004a80000052400000524000006e000000730000007c800000890 +0000096400000a1400000b9800000c3000000ca800000ce400000d5400000e5000000f380000 +0ff8000010b40000118c0001000000180354002b0068000c0002001000990008000004150216 +00080004b8028040fffbfe03fa1403f92503f83203f79603f60e03f5fe03f4fe03f32503f20e +03f19603f02503ef8a4105effe03ee9603ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03 +e63203e5e45305e59603e48a4105e45303e3e22f05e3fa03e22f03e1fe03e0fe03df3203de14 +03dd9603dcfe03db1203da7d03d9bb03d8fe03d68a4105d67d03d5d44705d57d03d44703d3d2 +1b05d3fe03d21b03d1fe03d0fe03cffe03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe +03c6851105c61c03c51603c4fe03c3fe03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03 +bbfe03ba1103b9862505b9fe03b8b7bb05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff +03b64004b52503b4fe03b39603b2fe03b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403 +abaa1205ab2503aa1203a98a4105a9fa03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a332 +03a20e03a16403a08a4105a096039ffe039e9d0c059efe039d0c039c9b19059c64039b9a1005 +9b19039a1003990a0398fe0397960d0597fe03960d03958a410595960394930e05942803930e +0392fa039190bb0591fe03908f5d0590bb039080048f8e25058f5d038f40048e25038dfe038c +8b2e058cfe038b2e038a8625058a410389880b05891403880b03878625058764038685110586 +250385110384fe038382110583fe0382110381fe0380fe037ffe0340ff7e7d7d057efe037d7d +037c64037b5415057b25037afe0379fe03780e03770c03760a0375fe0374fa0373fa0372fa03 +71fa0370fe036ffe036efe036c21036bfe036a1142056a530369fe03687d036711420566fe03 +65fe0364fe0363fe0362fe03613a0360fa035e0c035dfe035bfe035afe0359580a0559fa0358 +0a035716190557320356fe035554150555420354150353011005531803521403514a130551fe +03500b034ffe034e4d10054efe034d10034cfe034b4a13054bfe034a4910054a1303491d0d05 +491003480d0347fe0346960345960344fe0343022d0543fa0342bb03414b0340fe033ffe033e +3d12053e14033d3c0f053d12033c3b0d053c40ff0f033b0d033afe0339fe033837140538fa03 +3736100537140336350b05361003350b03341e03330d0332310b0532fe03310b03302f0b0530 +0d032f0b032e2d09052e10032d09032c32032b2a25052b64032a2912052a2503291203282725 +0528410327250326250b05260f03250b0324fe0323fe03220f03210110052112032064031ffa +031e1d0d051e64031d0d031c1142051cfe031bfa031a42031911420519fe0318640317161905 +17fe031601100516190315fe0314fe0313fe031211420512fe0311022d05114203107d030f64 +030efe030d0c16050dfe030c0110050c16030bfe030a100309fe0308022d0508fe0307140306 +64030401100504fe03401503022d0503fe0302011005022d0301100300fe0301b80164858d01 +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d00> +] def +/f-0-0 currentdict end definefont pop +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 0 -1 273 208 +%%EndPageSetup +q 0 -1 273 209 rectclip q +0 207.679 273 -208 re W n +0.0392157 0.0156863 0.0313726 rg +0.8 w +0 J +0 j +[] 0.0 d +4 M q 1 0 0 -1 0 207.679047 cm +0.402 17.879 271.582 189.395 re S Q +0 g +BT +13.340924 0 0 13.340924 83.782104 197.543071 Tm +/f-0-0 1 Tf +[<010203040506>-1<0708>22<090a0b0c06>]TJ +ET +0.0392157 0.0156863 0.0313726 rg +[ 2.4 2.4] 0 d +q 1 0 0 -1 0 207.679047 cm +29.586 60.762 210.238 120.902 re S Q +0 g +BT +10.005693 0 0 10.005693 121.303442 154.661528 Tm +/f-0-0 1 Tf +[<0d04>32<0e>]TJ +ET +0.0392157 0.0156863 0.0313726 rg +[] 0.0 d +q 1 0 0 -1 0 207.679047 cm +33.258 64.371 62.648 34.867 re S Q +q 1 0 0 -1 0 207.679047 cm +33.258 103.73 82.898 34.863 re S Q +q 1 0 0 -1 0 207.679047 cm +33.258 143.086 62.648 34.867 re S Q +q 1 0 0 -1 0 207.679047 cm +103.129 64.371 51.332 34.867 re S Q +0.8 w +q 1 0 0 -1 0 207.679047 cm +122.785 103.73 112.082 34.863 re S Q +0.8 w +q 1 0 0 -1 0 207.679047 cm +160.648 64.371 75.156 34.867 re S Q +0 g +BT +6.670462 0 0 6.670462 53.102877 123.387996 Tm +/f-0-0 1 Tf +[<0f>-1<10>-1<09>1<110a0712>]TJ +ET +BT +6.670462 0 0 6.670462 117.342965 123.387996 Tm +/f-0-0 1 Tf +[<0f>-1<10>-1<09>1<110a0713>]TJ +ET +BT +6.670462 0 0 6.670462 186.706491 123.387996 Tm +/f-0-0 1 Tf +[<0f>-1<10>-1<09>1<110a0714>]TJ +ET +BT +6.670462 0 0 6.670462 167.22485 84.030562 Tm +/f-0-0 1 Tf +[<0f>-1<10>-1<09>1<110a0715>]TJ +ET +BT +6.670462 0 0 6.670462 63.107174 84.030513 Tm +/f-0-0 1 Tf +[<0f>-1<10>-1<09>1<110a0716>]TJ +ET +BT +6.670462 0 0 6.670462 53.080075 44.673067 Tm +/f-0-0 1 Tf +[<0f>-1<10>-1<09>1<110a0717>]TJ +ET +Q Q +showpage +%%Trailer +count op_count sub {pop} repeat +countdictstack dict_count sub {end} repeat +cairo_eps_state restore +%%EOF diff --git a/doc/img/layout_box.png b/doc/img/layout_box.png new file mode 100644 index 0000000000000000000000000000000000000000..938023f9e418e8eddfd160240cb281f8a810d9bf GIT binary patch literal 7012 zcmd6scTiL7xA&7!A|POn6s2kaQJP?=(i9O12uK&DiUz3xLlXp(;}Ihs1VitZC_-ow zIs)4RsC11|10;%q)C8%9b~j$nZ_fPQ_s;vrduQ&=%${WLdG_->d+oKp>$6twp0hq9 z$S=VUfj|V&=B9QK2-F=sgm&?QS6)56IR}1m<4n*FyTH$lU6+aAIbX233l1DVuya67 z4rfP#7x#yrJ|Ak2#e_z9UAqE_h=@@04f4l%dj(%n!(Q{ro;Q$yKqNk)O;0*R=FE*= zul07!WG%4DicAnDqCBu;78-Bg;RO#TpRzshE$k1moU0egrIY&2$c{NjwY8(ZuC#rk z1wXpTUu7#&o*{BB0JG<^QY8fXicU1=L+-KP6JN7^Uf*qf)}lzLZAjmzAU1!pJ^6A; zYHn&yj*c=bHo1fdbafS>t_ zhy3ZXYxbtDc@2i7mG+=@?%*N(`Wf0Va1yvjpc4e}(s*&RR=wLVW}sN^YAzXQtOP=5 zf+Ng}fn|S{*=8X>lTNN;6$!@B0iS{o>5GxiAUEZC zIPP@qA?*m>9_W_gz-mP?%e$_cjwTp4k8YFz_h{!i*R5c#d2@+uD&0c@`hsXx@ zAP*y2fSw~@kYdOffZcqXS7Y<#^#=DhNaBRdHo7G?@Q1^^@3+0|sp}gHuf-#4pqPnL z8@P2l3<$4VVL^o<_P9WM!ZvqLca?NH4@qZo*gZXv)mc{^!ZS89zSfS59GUca6=4y+ zxe0i?oZC`o(?M(v|l(5yVH-->LM4WCNubZ)X;B*bPtjr1Z zlPtV|+~wwYMh<=Zo9D5w86{wl$XU~} zNJdAegwQtT{LEN8=4i2wnqAYP5N-O!D!*w zj@;E@u_T%pPQmKn*W|KzqC)4;ST&IA;@Qoa6HRRB@67*1Jw|04`2kbAspY2lBV z%r#nFoSeP!ntuX?z^>FJ{XUaZygN{?0+2-XTGVG%@;4#QXFt{d!t0Wp@R)bpi zE*qcVAI?^dw#OtpMK&gm*kC5JlfJhaMz7QbCOMJDNjw7-bKgH2sp}mDzm;-t*dvkfWEEkp(>aP6;j{N-bmGJ)a z_3@*8YYvZChwP@k6>0Z@uU{jeP3WT7H3E6ue2UP_dm-j^tU)%*iqr#lKXIYWiRB6i290hq-po58Ws2u9d>}}#+m#ry22dn#$AVTW!f1|&FR*^Mrzwg?gASg zY4c?LycF*(ktD{0uwzH8G}0?kDjpi@Z&k_oDhc1VtbA{0nhsu?5bM#__`sDThs;Y` zy2kV;>!iIw6Ta^S&|khcBNlMzhUC2767#U;{6mfCg!W0ZRt-|=!Ka2z=A4f2+r1Mp zr-Q!nk#*volW2-47m1WWZr`ccy{M#0RkkHl4zW<>)mtDWUxF?Y$&^K~++GEvCL>iJ zXsXhu!jVU$gFEOU0#LMCI+XISy z$&6dI=_wOG^w{En$LZFicl0zU!UYn$*I2S0nS3h5k;Ku#iVEyxpvCZu6;IQR*thl- zSs_d<6eYu6@Mluo`N>t5>C(oDB|PrC+EW@SgTXwR)|m_P>FTLG$#88DUbFhKsDYC7 z&4yaNjp-687?QmDk{Jk*Hw3V6Aek;B0cb5Y7(c zxDY=O_f#6OSkcKysuW_MWMZSa+*+6<`;Rh3kWjh*$P*cgo^Uq%NT{UZ< zzuz_�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 ePStEP +] def +/f-0-0 currentdict end definefont pop +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 0 -1 273 208 +%%EndPageSetup +q 0 -1 273 209 rectclip q +0 207.679 273 -208 re W n +0.0392157 0.0156863 0.0313726 rg +0.8 w +0 J +0 j +[] 0.0 d +4 M q 1 0 0 -1 0 207.678864 cm +0.402 17.879 271.582 189.395 re S Q +0 g +BT +13.340901 0 0 13.340901 83.782178 197.542905 Tm +/f-0-0 1 Tf +[<010203040506>-1<0708>22<090a0b0c06>]TJ +ET +0.0392157 0.0156863 0.0313726 rg +[ 2.4 2.4] 0 d +q 1 0 0 -1 0 207.678864 cm +29.586 60.762 210.238 120.898 re S Q +0 g +BT +10.005676 0 0 10.005676 121.303467 154.661436 Tm +/f-0-0 1 Tf +<0d0e020f040e>Tj +ET +0.0392157 0.0156863 0.0313726 rg +[] 0.0 d +q 1 0 0 -1 0 207.678864 cm +33.258 64.371 202.609 112.887 re S Q +0 g +BT +6.670451 0 0 6.670451 120.998678 84.079944 Tm +/f-0-0 1 Tf +[<10>-1<11>-1<09>1<0f0a0712>]TJ +ET +Q Q +showpage +%%Trailer +count op_count sub {pop} repeat +countdictstack dict_count sub {end} repeat +cairo_eps_state restore +%%EOF diff --git a/doc/img/layout_swallow.png b/doc/img/layout_swallow.png new file mode 100644 index 0000000000000000000000000000000000000000..97d8070bbb849e0f983fa766897913aa99476b3f GIT binary patch literal 5099 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 Qf6PG)^-OUkmt1cD7q-Z&SO5S3 literal 0 HcmV?d00001 diff --git a/doc/img/layout_table.eps b/doc/img/layout_table.eps new file mode 100644 index 0000000..4d80c02 --- /dev/null +++ b/doc/img/layout_table.eps @@ -0,0 +1,443 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: cairo 1.10.2 (http://cairographics.org) +%%CreationDate: Wed Jul 20 18:11:00 2011 +%%Pages: 1 +%%BoundingBox: 0 -1 273 249 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%EndComments +%%BeginProlog +/cairo_eps_state save def +/dict_count countdictstack def +/op_count count 1 sub def +userdict begin +/q { gsave } bind def +/Q { grestore } bind def +/cm { 6 array astore concat } bind def +/w { setlinewidth } bind def +/J { setlinecap } bind def +/j { setlinejoin } bind def +/M { setmiterlimit } bind def +/d { setdash } bind def +/m { moveto } bind def +/l { lineto } bind def +/c { curveto } bind def +/h { closepath } bind def +/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto + 0 exch rlineto 0 rlineto closepath } bind def +/S { stroke } bind def +/f { fill } bind def +/f* { eofill } bind def +/n { newpath } bind def +/W { clip } bind def +/W* { eoclip } bind def +/BT { } bind def +/ET { } bind def +/pdfmark where { pop globaldict /?pdfmark /exec load put } + { globaldict begin /?pdfmark /pop load def /pdfmark + /cleartomark load def end } ifelse +/BDC { mark 3 1 roll /BDC pdfmark } bind def +/EMC { mark /EMC pdfmark } bind def +/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def +/Tj { show currentpoint cairo_store_point } bind def +/TJ { + { + dup + type /stringtype eq + { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse + } forall + currentpoint cairo_store_point +} bind def +/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore + cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def +/Tf { pop /cairo_font exch def /cairo_font_matrix where + { pop cairo_selectfont } if } bind def +/Td { matrix translate cairo_font_matrix matrix concatmatrix dup + /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point + /cairo_font where { pop cairo_selectfont } if } bind def +/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def + cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def +/g { setgray } bind def +/rg { setrgbcolor } bind def +/d1 { setcachedevice } bind def +%%EndProlog +11 dict begin +/FontType 42 def +/FontName /DejaVuSans def +/PaintType 0 def +/FontMatrix [ 1 0 0 1 0 0 ] def +/FontBBox [ 0 0 0 0 ] def +/Encoding 256 array def +0 1 255 { Encoding exch /.notdef put } for +Encoding 1 /uni004C put +Encoding 2 /uni0061 put +Encoding 3 /uni0079 put +Encoding 4 /uni006F put +Encoding 5 /uni0075 put +Encoding 6 /uni0074 put +Encoding 7 /uni0020 put +Encoding 8 /uni0057 put +Encoding 9 /uni0069 put +Encoding 10 /uni0064 put +Encoding 11 /uni0067 put +Encoding 12 /uni0065 put +Encoding 13 /uni0043 put +Encoding 14 /uni0068 put +Encoding 15 /uni006C put +Encoding 16 /uni0031 put +Encoding 17 /uni0032 put +Encoding 18 /uni0033 put +Encoding 19 /uni0035 put +Encoding 20 /uni0034 put +Encoding 21 /uni0037 put +Encoding 22 /uni0038 put +Encoding 23 /uni0039 put +Encoding 24 /uni0030 put +Encoding 25 /uni0054 put +Encoding 26 /uni0062 put +/CharStrings 27 dict dup begin +/.notdef 0 def +/uni004C 1 def +/uni0061 2 def +/uni0079 3 def +/uni006F 4 def +/uni0075 5 def +/uni0074 6 def +/uni0020 7 def +/uni0057 8 def +/uni0069 9 def +/uni0064 10 def +/uni0067 11 def +/uni0065 12 def +/uni0043 13 def +/uni0068 14 def +/uni006C 15 def +/uni0031 16 def +/uni0032 17 def +/uni0033 18 def +/uni0035 19 def +/uni0034 20 def +/uni0037 21 def +/uni0038 22 def +/uni0039 23 def +/uni0030 24 def +/uni0054 25 def +/uni0062 26 def +end readonly def +/sfnts [ +<00010000000a008000030020636d617000d6f17f000012ec000000746376742000691d390000 +1360000001fe6670676d7134766a00001560000000ab676c79661a17fc9a000000ac00001240 +68656164f5a891960000160c00000036686865610cb8066c0000164400000024686d74788068 +0d87000016680000006c6c6f636100010544000016d4000000706d6178700488067100001744 +00000020707265703b07f100000017640000056800020066fe96046605a400030007001a400c +04fb0006fb0108057f0204002fc4d4ec310010d4ecd4ec301311211125211121660400fc7303 +1bfce5fe96070ef8f2720629000100c90000046a05d500050025400c0295008104011c033a00 +040610fcecec31002fe4ec304009300750078003800404015d133311211521c9ca02d7fc5f05 +d5fad5aa0002007bffe3042d047b000a002500bc4027191f0b17090e00a91706b90e1120861f +ba1cb923b8118c170c001703180d09080b1f030814452610fcecccd4ec323211393931002fc4 +e4f4fcf4ec10c6ee10ee11391139123930406e301d301e301f3020302130223f27401d401e40 +1f402040214022501d501e501f50205021502250277027851d871e871f8720872185229027a0 +27f0271e301e301f30203021401e401f40204021501e501f50205021601e601f60206021701e +701f70207021801e801f80208021185d015d0122061514163332363d01371123350e01232226 +353436332135342623220607353e0133321602bedfac816f99b9b8b83fbc88accbfdfb0102a7 +9760b65465be5af3f00233667b6273d9b4294cfd81aa6661c1a2bdc0127f8b2e2eaa2727fc00 +0001003dfe56047f0460000f018b40430708020911000f0a110b0a00000f0e110f000f0d110c +0d00000f0d110e0d0a0b0a0c110b0b0a420d0b0910000b058703bd0e0bbc100e0d0c0a090603 +00080f040f0b1010d44bb00a544bb008545b58b9000b004038594bb0145458b9000bffc03859 +c4c4111739310010e432f4ec113911391239304b5358071005ed071008ed071008ed071005ed +071008ed0705ed173259220140f0060005080609030d160a170d100d230d350d490a4f0a4e0d +5a095a0a6a0a870d800d930d120a000a09060b050c0b0e0b0f1701150210041005170a140b14 +0c1a0e1a0f2700240124022004200529082809250a240b240c270d2a0e2a0f20113700350135 +0230043005380a360b360c380d390e390f301141004001400240034004400540064007400842 +09450a470d490e490f40115400510151025503500450055606550756085709570a550b550c59 +0e590f501166016602680a690e690f60117b08780e780f89008a09850b850c890d890e890f99 +09950b950c9a0e9a0fa40ba40cab0eab0fb011cf11df11ff11655d005d050e012b0135333236 +3f01013309013302934e947c936c4c543321fe3bc3015e015ec368c87a9a488654044efc9403 +6c00000000020071ffe30475047b000b0017004a401306b91200b90cb8128c1809120f510312 +15451810fcecf4ec310010e4f4ec10ee3040233f197b007b067f077f087f097f0a7f0b7b0c7f +0d7f0e7f0f7f107f117b12a019f01911015d0122061514163332363534262732001110002322 +00111000027394acab9593acac93f00112feeef0f1feef011103dfe7c9c9e7e8c8c7e99cfec8 +feecfeedfec701390113011401380000000200aeffe30458047b00130014003b401c03090003 +0e0106870e118c0a01bc14b80c0d0908140b4e020800461510fcecf439ec3231002fe4e432f4 +c4ec1112173930b46f15c01502015d1311331114163332363511331123350e0123222601aeb8 +7c7c95adb8b843b175c1c801cf01ba02a6fd619f9fbea4027bfba0ac6663f003a80000010037 +000002f2059e0013003840190e05080f03a9001101bc08870a0b08090204000810120e461410 +fc3cc4fc3cc432393931002fecf43cc4ec3211393930b2af1501015d01112115211114163b01 +152322263511233533110177017bfe854b73bdbdd5a28787059efec28ffda0894e9a9fd20260 +8f013e00000000010044000007a605d5000c017b4049051a0605090a09041a0a09031a0a0b0a +021a01020b0b0a061107080705110405080807021103020c000c011100000c420a0502030603 +00af0b080c0b0a09080605040302010b07000d10d4cc173931002f3cec32321739304b535807 +1005ed071008ed071008ed071005ed071008ed071005ed0705ed071008ed5922b2000e01015d +40f206020605020a000a000a120a2805240a200a3e023e05340a300a4c024d05420a400a5902 +6a026b05670a600a7b027f027c057f05800a960295051d070009020803000406050005000601 +070408000807090009040a0a0c000e1a0315041508190c100e20042105200620072008230924 +0a250b200e200e3c023a033504330530083609390b3f0c300e460046014a0240044505400542 +064207420840084009440a4d0c400e400e58025608590c500e66026703610462056006600760 +086409640a640b770076017b027803770474057906790777087008780c7f0c7f0e8602870388 +04890585098a0b8f0e97049f0eaf0e5b5d005d1333090133090133012309012344cc013a0139 +e3013a0139cdfe89fefec5fec2fe05d5fb1204eefb1204eefa2b0510faf00000000200c10000 +0179061400030007002b400e06be04b100bc020501080400460810fc3cec3231002fe4fcec30 +400b1009400950096009700905015d1333112311331523c1b8b8b8b80460fba00614e9000002 +0071ffe3045a06140010001c003840191ab9000e14b905088c0eb80197031704000802471112 +0b451d10fcecf4ec323231002fece4f4c4ec10c4ee30b6601e801ea01e03015d011133112335 +0e0123220211100033321601141633323635342623220603a2b8b83ab17ccbff00ffcb7cb1fd +c7a79292a8a89292a703b6025ef9eca86461014401080108014461fe15cbe7e7cbcbe7e70002 +0071fe56045a047b000b0028004a4023190c1d0912861316b90f03b92623b827bc09b90fbd1a +1d261900080c4706121220452910fcc4ecf4ec323231002fc4e4ece4f4c4ec10fed5ee111239 +3930b6602a802aa02a03015d01342623220615141633323617100221222627351e013332363d +010e0123220211101233321617353303a2a59594a5a59495a5b8fefefa61ac51519e52b5b439 +b27ccefcfcce7cb239b8023dc8dcdcc8c7dcdcebfee2fee91d1eb32c2abdbf5b6362013a0103 +0104013a6263aa0000020071ffe3047f047b0014001b00704024001501098608880515a90105 +b90c01bb18b912b80c8c1c1b1502081508004b02120f451c10fcecf4ecc4111239310010e4f4 +ece410ee10ee10f4ee1112393040293f1d701da01dd01df01d053f003f013f023f153f1b052c +072f082f092c0a6f006f016f026f156f1b095d71015d0115211e0133323637150e0123200011 +1000333200072e0123220607047ffcb20ccdb76ac76263d06bfef4fec70129fce20107b802a5 +889ab90e025e5abec73434ae2a2c0138010a01130143feddc497b4ae9e0000010073ffe30527 +05f000190036401a0da10eae0a951101a100ae04951791118c1a07190d003014101a10fcec32 +ec310010e4f4ecf4ec10eef6ee30b40f1b1f1b02015d01152e0123200011100021323637150e +01232000111000213216052766e782ff00fef00110010082e7666aed84feadfe7a0186015386 +ed0562d55f5efec7fed8fed9fec75e5fd34848019f01670168019f470000000100ba00000464 +0614001300344019030900030e0106870e11b80c970a010208004e0d09080b461410fcec32f4 +ec31002f3cecf4c4ec1112173930b2601501015d0111231134262322061511231133113e0133 +32160464b87c7c95acb9b942b375c1c602a4fd5c029e9f9ebea4fd870614fd9e6564ef000001 +00c100000179061400030022b7009702010800460410fcec31002fec30400d10054005500560 +057005f00506015d13331123c1b8b80614f9ec00000100e10000045a05d5000a004040154203 +a00402a005810700a009081f061c03001f010b10d44bb00f5458b9000100403859ecc4fcec31 +002fec32f4ecd4ec304b5358592201b40f030f04025d3721110535253311211521fe014afe99 +0165ca014afca4aa047348b848fad5aa0000000100960000044a05f0001c009a4027191a1b03 +181c11050400110505044210a111940da014910400a00200100a02010a1c171003061d10fc4b +b015544bb016545b4bb014545b58b90003ffc03859c4d4ecc0c011123931002fec32f4ecf4ec +304b5358071005ed0705ed11173959220140325504560556077a047a05761b87190704000419 +041a041b051c74007606751a731b741c82008619821a821b821ca800a81b115d005d25211521 +353600373e0135342623220607353e01333204151406070600018902c1fc4c73018d33614da7 +865fd3787ad458e80114455b19fef4aaaaaa7701913a6d974977964243cc3132e8c25ca5701d +feeb00000001009cffe3047305f000280070402e0015130a86091f862013a0150da00993061c +a020932391068c15a329161c13000314191c2620101c03141f09062910fc4bb016544bb01454 +5b58b90009ffc03859c4c4d4ecf4ec11173939310010ece4f4e4ec10e6ee10ee10ee10ee1112 +3930014009641e611f6120642104005d011e0115140421222627351e013332363534262b0135 +33323635342623220607353e01333204151406033f91a3fed0fee85ec76a54c86dbec7b9a5ae +b6959ea39853be7273c959e6010c8e03251fc490ddf22525c33132968f8495a67770737b2426 +b42020d1b27cab000001009effe3046405d5001d005e4023041a071186101d1aa00714a01089 +0d02a000810d8c07a41e171c010a031c000a10061e10fc014bb016544bb014545b58b90010ff +c038594bb00f5458b9001000403859c4d4ec10c4ee310010e4e4f4ec10e6ee10fec410ee1112 +393013211521113e0133320015140021222627351e0133323635342623220607dd0319fda02c +582cfa0124fed4feef5ec3685ac06badcacaad51a15405d5aafe920f0ffeeeeaf1fef52020cb +3130b69c9cb62426000000020064000004a405d50002000d0081401d010d030d0003030d4200 +030b07a00501038109010c0a001c0608040c0e10dc4bb00b544bb00d545b58b9000cffc03859 +d43cc4ec32113931002fe4d43cec321239304b5358071004c9071005c9592201402a0b002a00 +48005900690077008a000716012b0026012b0336014e014f0c4f0d5601660175017a0385010d +5d005d09012103331133152311231121350306fe0201fe35fed5d5c9fd5e0525fce303cdfc33 +a8fea00160c30000000100a80000046805d5000600634018051102030203110405044205a000 +8103050301040100060710fcccc411393931002ff4ec304b5358071005ed071005ed5922014b +b0165458bd00070040000100070007ffc03811373859401258020106031a05390548056703b0 +00b006075d005d13211501230121a803c0fde2d301fefd3305d556fa81052b0000000003008b +ffe3048b05f0000b0023002f00434025180c00a02706a01e2da012911e8c27a330180c242a1c +15241c0f091c151b1e031c0f211b3010fcc4ecf4c4ec10ee10ee113939310010ece4f4ec10ee +10ee393930012206151416333236353426252e01353424333216151406071e01151404232224 +353436131416333236353426232206028b90a5a59090a6a5fea5829100ffdedffe918192a3fe +f7f7f7fef7a448918382939382839102c59a87879a9b86879a5620b280b3d0d0b380b22022c6 +8fd9e8e8d98fc6016174828274748282000000020081ffe3048705f00018002400584023071f +1901860019a00aa504a00089161fa01091168c25071c1c21131e0022221c0d1b2510fcece4f4 +ecec310010e4f4ec10e6fef5ee10ee111239304016c419c21ac01bc01cc01dc21ec41f07aa12 +bc12e912035d015d37351e01333212130e012322003534003320001110002122260132363534 +26232206151416e14c9c4bc8d30f3ab26ce0fefb0110e201030111feb1fee54c9c013e889f9f +88889f9f1fb82426010d0112565c010febe60116fe73fe86fe9ffe5b1e0297baa2a1bbbba1a2 +ba0000020087ffe3048f05f0000b00170023401306a01200a00c91128c18091c0f1e031c151b +1810fcecf4ec310010e4f4ec10ee300122021110123332121110022732001110002322001110 +00028b9c9d9d9c9d9d9d9dfb0109fef7fbfbfef701090550fecdfeccfecdfecd013301330134 +0133a0fe73fe86fe87fe73018d0179017a018d000001fffa000004e905d50007004a400e0602 +950081040140031c0040050810d4e4fce431002ff4ec3230014bb00a5458bd00080040000100 +080008ffc03811373859401300091f00100110021f071009400970099f09095d032115211123 +11210604effdeecbfdee05d5aafad5052b00000200baffe304a40614000b001c0038401903b9 +0c0f09b918158c0fb81b971900121247180c06081a461d10fcec3232f4ec31002fece4f4c4ec +10c6ee30b6601e801ea01e03015d013426232206151416333236013e01333200111002232226 +271523113303e5a79292a7a79292a7fd8e3ab17bcc00ffffcc7bb13ab9b9022fcbe7e7cbcbe7 +e702526461febcfef8fef8febc6164a806140000000200030000000000140001000000000034 +0004002000000004000400010000f01affff0000f000ffff1000000100000000000600400000 +0000001b0000000100020003000400050006000700080009000a000b000c000d000e000f0010 +001100120013001400150016001700180019001a013500b800cb00cb00c100aa009c01a600b8 +00660000007100cb00a002b20085007500b800c301cb0189022d00cb00a600f000d300aa0087 +00cb03aa0400014a003300cb000000d9050200f4015400b4009c01390114013907060400044e +04b4045204b804e704cd0037047304cd04600473013303a2055605a60556053903c5021200c9 +001f00b801df007300ba03e9033303bc0444040e00df03cd03aa00e503aa0404000000cb008f +00a4007b00b80014016f007f027b0252008f00c705cd009a009a006f00cb00cd019e01d300f0 +00ba018300d5009803040248009e01d500c100cb00f600830354027f00000333026600d300c7 +00a400cd008f009a0073040005d5010a00fe022b00a400b4009c00000062009c0000001d032d +05d505d505d505f0007f007b005400a406b80614072301d300b800cb00a601c301ec069300a0 +00d3035c037103db0185042304a80448008f0139011401390360008f05d5019a061407230666 +0179046004600460047b009c00000277046001aa00e904600762007b00c5007f027b000000b4 +025205cd006600bc00660077061000cd013b01850389008f007b0000001d00cd074a042f009c +009c0000077d006f0000006f0335006a006f007b00ae00b2002d0396008f027b00f600830354 +063705f6008f009c04e10266008f018d02f600cd03440029006604ee00730000140000960000 +b707060504030201002c2010b002254964b040515820c859212d2cb002254964b040515820c8 +59212d2c20100720b00050b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b0 +0050b00d7920b8ffff5058041b0559b0051cb0032508e12d2c4b505820b0fd454459212d2cb0 +02254560442d2c4b5358b00225b0022545445921212d2c45442d2cb00225b0022549b00525b0 +05254960b0206368208a108a233a8a10653a2d0000010000000251ebfb96539e5f0f3cf5001f +080000000000c896fa5500000000c896fa55f7d6fcae0d720955000000080000000100000000 +00010000076dfe1d00000de2f7d6fa510d7200010000000000000000000000000000001b04cd +0066047500c904e7007b04bc003d04e50071051200ae03230037028b000007e90044023900c1 +051400710514007104ec007105960073051200ba023900c1051700e1051700960517009c0517 +009e05170064051700a80517008b051700810517008704e3fffa051400ba0000000000000044 +00000088000001b40000038000000424000004a80000052400000524000006e0000007300000 +07c80000089000000964000009fc00000a7400000ab000000b2000000c1c00000d0400000dc4 +00000e8000000f0c00000fe0000010b400001138000011a80000124000010000001b0354002b +0068000c000200100099000800000415021600080004b8028040fffbfe03fa1403f92503f832 +03f79603f60e03f5fe03f4fe03f32503f20e03f19603f02503ef8a4105effe03ee9603ed9603 +ecfa03ebfa03eafe03e93a03e84203e7fe03e63203e5e45305e59603e48a4105e45303e3e22f +05e3fa03e22f03e1fe03e0fe03df3203de1403dd9603dcfe03db1203da7d03d9bb03d8fe03d6 +8a4105d67d03d5d44705d57d03d44703d3d21b05d3fe03d21b03d1fe03d0fe03cffe03cefe03 +cd9603cccb1e05ccfe03cb1e03ca3203c9fe03c6851105c61c03c51603c4fe03c3fe03c2fe03 +c1fe03c0fe03bffe03befe03bdfe03bcfe03bbfe03ba1103b9862505b9fe03b8b7bb05b8fe03 +b7b65d05b7bb03b78004b6b52505b65d40ff03b64004b52503b4fe03b39603b2fe03b1fe03b0 +fe03affe03ae6403ad0e03acab2505ac6403abaa1205ab2503aa1203a98a4105a9fa03a8fe03 +a7fe03a6fe03a51203a4fe03a3a20e05a33203a20e03a16403a08a4105a096039ffe039e9d0c +059efe039d0c039c9b19059c64039b9a10059b19039a1003990a0398fe0397960d0597fe0396 +0d03958a410595960394930e05942803930e0392fa039190bb0591fe03908f5d0590bb039080 +048f8e25058f5d038f40048e25038dfe038c8b2e058cfe038b2e038a8625058a410389880b05 +891403880b03878625058764038685110586250385110384fe038382110583fe0382110381fe +0380fe037ffe0340ff7e7d7d057efe037d7d037c64037b5415057b25037afe0379fe03780e03 +770c03760a0375fe0374fa0373fa0372fa0371fa0370fe036ffe036efe036c21036bfe036a11 +42056a530369fe03687d036711420566fe0365fe0364fe0363fe0362fe03613a0360fa035e0c +035dfe035bfe035afe0359580a0559fa03580a035716190557320356fe035554150555420354 +150353011005531803521403514a130551fe03500b034ffe034e4d10054efe034d10034cfe03 +4b4a13054bfe034a4910054a1303491d0d05491003480d0347fe0346960345960344fe034302 +2d0543fa0342bb03414b0340fe033ffe033e3d12053e14033d3c0f053d12033c3b0d053c40ff +0f033b0d033afe0339fe033837140538fa033736100537140336350b05361003350b03341e03 +330d0332310b0532fe03310b03302f0b05300d032f0b032e2d09052e10032d09032c32032b2a +25052b64032a2912052a25032912032827250528410327250326250b05260f03250b0324fe03 +23fe03220f03210110052112032064031ffa031e1d0d051e64031d0d031c1142051cfe031bfa +031a42031911420519fe031864031716190517fe031601100516190315fe0314fe0313fe0312 +11420512fe0311022d05114203107d030f64030efe030d0c16050dfe030c0110050c16030bfe +030a100309fe0308022d0508fe030714030664030401100504fe03401503022d0503fe030201 +1005022d0301100300fe0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d00> +] def +/f-0-0 currentdict end definefont pop +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 0 -1 273 249 +%%EndPageSetup +q 0 -1 273 250 rectclip q +0 248.63 273 -249 re W n +0.0392157 0.0156863 0.0313726 rg +0.8 w +0 J +0 j +[] 0.0 d +4 M q 1 0 0 -1 0 248.630081 cm +33.258 64.371 62.648 34.867 re S Q +q 1 0 0 -1 0 248.630081 cm +33.258 103.73 62.648 34.863 re S Q +q 1 0 0 -1 0 248.630081 cm +33.258 143.086 62.648 34.867 re S Q +q 1 0 0 -1 0 248.630081 cm +33.258 182.445 62.648 34.863 re S Q +q 1 0 0 -1 0 248.630081 cm +103.129 64.371 62.648 34.867 re S Q +q 1 0 0 -1 0 248.630081 cm +103.129 103.73 62.648 34.863 re S Q +q 1 0 0 -1 0 248.630081 cm +103.129 143.086 62.648 34.867 re S Q +q 1 0 0 -1 0 248.630081 cm +103.129 182.445 62.648 34.863 re S Q +q 1 0 0 -1 0 248.630081 cm +173.156 64.371 62.648 34.867 re S Q +q 1 0 0 -1 0 248.630081 cm +173.156 103.73 62.648 34.863 re S Q +q 1 0 0 -1 0 248.630081 cm +173.156 143.086 62.648 34.867 re S Q +q 1 0 0 -1 0 248.630081 cm +173.156 182.445 62.648 34.863 re S Q +q 1 0 0 -1 0 248.630081 cm +0.402 17.879 271.582 230.359 re S Q +0 g +BT +13.340933 0 0 13.340933 83.782056 238.494099 Tm +/f-0-0 1 Tf +[<010203040506>-1<0708>22<090a0b0c06>]TJ +ET +0.0392157 0.0156863 0.0313726 rg +[ 2.4 2.4] 0 d +q 1 0 0 -1 0 248.630081 cm +29.586 60.762 210.238 160.207 re S Q +0 g +BT +6.670467 0 0 6.670467 53.541846 162.2602 Tm +/f-0-0 1 Tf +[<0d>-1<0e>-1<09>1<0f0a0710>]TJ +ET +BT +6.670467 0 0 6.670467 123.075513 162.574433 Tm +/f-0-0 1 Tf +[<0d>-1<0e>-1<09>1<0f0a0711>]TJ +ET +BT +6.670467 0 0 6.670467 192.60918 162.751313 Tm +/f-0-0 1 Tf +[<0d>-1<0e>-1<09>1<0f0a0712>]TJ +ET +BT +6.670467 0 0 6.670467 192.60918 123.21518 Tm +/f-0-0 1 Tf +[<0d>-1<0e>-1<09>1<0f0a0713>]TJ +ET +BT +6.670467 0 0 6.670467 123.075513 125.053046 Tm +/f-0-0 1 Tf +[<0d>-1<0e>-1<09>1<0f0a0714>]TJ +ET +BT +6.670467 0 0 6.670467 53.541846 123.711396 Tm +/f-0-0 1 Tf +[<0d>-1<0e>-1<09>1<0f0a0714>]TJ +ET +BT +6.670467 0 0 6.670467 53.541846 85.162568 Tm +/f-0-0 1 Tf +[<0d>-1<0e>-1<09>1<0f0a0715>]TJ +ET +BT +6.670467 0 0 6.670467 123.075513 83.362641 Tm +/f-0-0 1 Tf +[<0d>-1<0e>-1<09>1<0f0a0716>]TJ +ET +BT +6.670467 0 0 6.670467 192.60918 83.679096 Tm +/f-0-0 1 Tf +[<0d>-1<0e>-1<09>1<0f0a0717>]TJ +ET +BT +6.670467 0 0 6.670467 123.075513 44.142963 Tm +/f-0-0 1 Tf +[<0d>-1<0e>-1<09>1<0f0a0710>-1<10>]TJ +ET +BT +6.670467 0 0 6.670467 53.541846 44.142963 Tm +/f-0-0 1 Tf +[<0d>-1<0e>-1<09>1<0f0a0710>-1<18>]TJ +ET +BT +6.670467 0 0 6.670467 192.60918 44.142963 Tm +/f-0-0 1 Tf +[<0d>-1<0e>-1<09>1<0f0a0710>-1<11>]TJ +ET +BT +10.0057 0 0 10.0057 121.303418 195.612519 Tm +/f-0-0 1 Tf +[<19>166<02>-1<1a0f>1<0c>]TJ +ET +Q Q +showpage +%%Trailer +count op_count sub {pop} repeat +countdictstack dict_count sub {end} repeat +cairo_eps_state restore +%%EOF diff --git a/doc/img/layout_table.png b/doc/img/layout_table.png new file mode 100644 index 0000000000000000000000000000000000000000..39f69c3d57ff7393bde65b98bcb49a7ab4c9f96d GIT binary patch literal 10137 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 to insert the child. + * + * Once the object is inserted, it will become child of the layout. Its + * lifetime will be bound to the layout, whenever the layout dies the child + * will be deleted automatically. One should use elm_layout_box_remove() to + * make this layout forget about the object. + * + * @see elm_layout_box_append() + * @see elm_layout_box_prepend() + * @see elm_layout_box_insert_before() + * @see elm_layout_box_remove() + * + * @ingroup Layout + */ EAPI void elm_layout_box_insert_at(Evas_Object *obj, const char *part, Evas_Object *child, unsigned int pos) EINA_ARG_NONNULL(1); + /** + * Remove a child of the given part box. + * + * @param obj The layout object + * @param part The box part name to remove child. + * @param child The object to remove from box. + * @return The object that was being used, or NULL if not found. + * + * The object will be removed from the box part and its lifetime will + * not be handled by the layout anymore. This is equivalent to + * elm_layout_content_unset() for box. + * + * @see elm_layout_box_append() + * @see elm_layout_box_remove_all() + * + * @ingroup Layout + */ EAPI Evas_Object *elm_layout_box_remove(Evas_Object *obj, const char *part, Evas_Object *child) EINA_ARG_NONNULL(1, 2, 3); + /** + * Remove all child of the given part box. + * + * @param obj The layout object + * @param part The box part name to remove child. + * @param clear If EINA_TRUE, then all objects will be deleted as + * well, otherwise they will just be removed and will be + * dangling on the canvas. + * + * The objects will be removed from the box part and their lifetime will + * not be handled by the layout anymore. This is equivalent to + * elm_layout_box_remove() for all box children. + * + * @see elm_layout_box_append() + * @see elm_layout_box_remove() + * + * @ingroup Layout + */ EAPI void elm_layout_box_remove_all(Evas_Object *obj, const char *part, Eina_Bool clear) EINA_ARG_NONNULL(1, 2); + /** + * Insert child to layout table part. + * + * @param obj the layout object + * @param part the box part to pack child. + * @param child_obj the child object to pack into table. + * @param col the column to which the child should be added. (>= 0) + * @param row the row to which the child should be added. (>= 0) + * @param colspan how many columns should be used to store this object. (>= + * 1) + * @param rowspan how many rows should be used to store this object. (>= 1) + * + * Once the object is inserted, it will become child of the table. Its + * lifetime will be bound to the layout, and whenever the layout dies the + * child will be deleted automatically. One should use + * elm_layout_table_remove() to make this layout forget about the object. + * + * If @p colspan or @p rowspan are bigger than 1, that object will occupy + * more space than a single cell. For instance, the following code: + * @code + * elm_layout_table_pack(layout, "table_part", child, 0, 1, 3, 1); + * @endcode + * + * Would result in an object being added like the following picture: + * + * @image html layout_colspan.png + * @image latex layout_colspan.eps width=\textwidth + * + * @see elm_layout_table_unpack() + * @see elm_layout_table_clear() + * + * @ingroup Layout + */ EAPI void elm_layout_table_pack(Evas_Object *obj, const char *part, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan) EINA_ARG_NONNULL(1); + /** + * Unpack (remove) a child of the given part table. + * + * @param obj The layout object + * @param part The table part name to remove child. + * @param child_obj The object to remove from table. + * @return The object that was being used, or NULL if not found. + * + * The object will be unpacked from the table part and its lifetime + * will not be handled by the layout anymore. This is equivalent to + * elm_layout_content_unset() for table. + * + * @see elm_layout_table_pack() + * @see elm_layout_table_clear() + * + * @ingroup Layout + */ EAPI Evas_Object *elm_layout_table_unpack(Evas_Object *obj, const char *part, Evas_Object *child_obj) EINA_ARG_NONNULL(1, 2, 3); + /** + * Remove all child of the given part table. + * + * @param obj The layout object + * @param part The table part name to remove child. + * @param clear If EINA_TRUE, then all objects will be deleted as + * well, otherwise they will just be removed and will be + * dangling on the canvas. + * + * The objects will be removed from the table part and their lifetime will + * not be handled by the layout anymore. This is equivalent to + * elm_layout_table_unpack() for all table children. + * + * @see elm_layout_table_pack() + * @see elm_layout_table_unpack() + * + * @ingroup Layout + */ EAPI void elm_layout_table_clear(Evas_Object *obj, const char *part, Eina_Bool clear) EINA_ARG_NONNULL(1, 2); + /** + * Get the edje layout + * + * @param obj The layout object + * + * @return A Evas_Object with the edje layout settings loaded + * with function elm_layout_file_set + * + * This returns the edje object. It is not expected to be used to then + * swallow objects via edje_object_part_swallow() for example. Use + * elm_layout_content_set() instead so child object handling and sizing is + * done properly. + * + * @note This function should only be used if you really need to call some + * low level Edje function on this edje object. All the common stuff (setting + * text, emitting signals, hooking callbacks to signals, etc.) can be done + * with proper elementary functions. + * + * @see elm_object_signal_callback_add() + * @see elm_object_signal_emit() + * @see elm_object_text_part_set() + * @see elm_layout_content_set() + * @see elm_layout_box_append() + * @see elm_layout_table_pack() + * @see elm_layout_data_get() + * + * @ingroup Layout + */ EAPI Evas_Object *elm_layout_edje_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); + /** + * Get the edje data from the given layout + * + * @param obj The layout object + * @param key The data key + * + * @return The edje data string + * + * This function fetches data specified inside the edje theme of this layout. + * This function return NULL if data is not found. + * + * In EDC this comes from a data block within the group block that @p + * obj was loaded from. E.g. + * + * @code + * collections { + * group { + * name: "a_group"; + * data { + * item: "key1" "value1"; + * item: "key2" "value2"; + * } + * } + * } + * @endcode + * + * @ingroup Layout + */ EAPI const char *elm_layout_data_get(const Evas_Object *obj, const char *key) EINA_ARG_NONNULL(1, 2); + /** + * Eval sizing + * + * @param obj The layout object + * + * Manually forces a sizing re-evaluation. This is useful when the minimum + * size required by the edje theme of this layout has changed. The change on + * the minimum size required by the edje theme is not immediately reported to + * the elementary layout, so one needs to call this function in order to tell + * the widget (layout) that it needs to reevaluate its own size. + * + * The minimum size of the theme is calculated based on minimum size of + * parts, the size of elements inside containers like box and table, etc. All + * of this can change due to state changes, and that's when this function + * should be called. + * + * Also note that a standard signal of "size,eval" "elm" emitted from the + * edje object will cause this to happen too. + * + * @ingroup Layout + */ EAPI void elm_layout_sizing_eval(Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI Eina_Bool elm_layout_part_cursor_set(Evas_Object *obj, const char *part_name, const char *cursor) EINA_ARG_NONNULL(1, 2); EAPI const char *elm_layout_part_cursor_get(const Evas_Object *obj, const char *part_name) EINA_ARG_NONNULL(1, 2); diff --git a/src/lib/elm_layout.c b/src/lib/elm_layout.c index 994665f..e8fd384 100644 --- a/src/lib/elm_layout.c +++ b/src/lib/elm_layout.c @@ -1,15 +1,6 @@ #include #include "elm_priv.h" -/** - * @defgroup Layout Layout - * - * This takes a standard Edje design file and wraps it very thinly - * in a widget and handles swallowing widgets into swallow regions - * in the Edje object, allowing Edje to be used as a design and - * layout tool - */ - typedef struct _Widget_Data Widget_Data; typedef struct _Subinfo Subinfo; typedef struct _Part_Cursor Part_Cursor; @@ -367,14 +358,6 @@ _elm_layout_label_get(const Evas_Object *obj, const char *part) return edje_object_part_text_get(wd->lay, part); } -/** - * Add a new layout to the parent - * - * @param parent The parent object - * @return The new object or NULL if it cannot be created - * - * @ingroup Layout - */ EAPI Evas_Object * elm_layout_add(Evas_Object *parent) { @@ -413,17 +396,6 @@ elm_layout_add(Evas_Object *parent) return obj; } -/** - * Set the file that will be used as layout - * - * @param obj The layout object - * @param file The path to file (edj) that will be used as layout - * @param group The group that the layout belongs in edje file - * - * @return (1 = success, 0 = error) - * - * @ingroup Layout - */ EAPI Eina_Bool elm_layout_file_set(Evas_Object *obj, const char *file, const char *group) { @@ -443,18 +415,6 @@ elm_layout_file_set(Evas_Object *obj, const char *file, const char *group) return ret; } -/** - * Set the edje group from the elementary theme that will be used as layout - * - * @param obj The layout object - * @param clas the clas of the group - * @param group the group - * @param style the style to used - * - * @return (1 = success, 0 = error) - * - * @ingroup Layout - */ EAPI Eina_Bool elm_layout_theme_set(Evas_Object *obj, const char *clas, const char *group, const char *style) { @@ -474,19 +434,6 @@ elm_layout_theme_set(Evas_Object *obj, const char *clas, const char *group, cons return ret; } -/** - * Set the layout content - * - * Once the content object is set, a previously set one will be deleted. - * If you want to keep that old content object, use the - * elm_layout_content_unset() function. - * - * @param obj The layout object - * @param swallow The swallow group name in the edje file - * @param content The content will be filled in this layout object - * - * @ingroup Layout - */ EAPI void elm_layout_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content) { @@ -521,16 +468,6 @@ elm_layout_content_set(Evas_Object *obj, const char *swallow, Evas_Object *conte _request_sizing_eval(wd); } -/** - * Get the swallowed object in the given part - * - * @param obj The layout object - * @param swallow The SWALLOW part to get its content - * - * @return The swallowed object or NULL if none or an error occurred - * - * @ingroup Layout - */ EAPI Evas_Object * elm_layout_content_get(const Evas_Object *obj, const char *swallow) { @@ -547,17 +484,6 @@ elm_layout_content_get(const Evas_Object *obj, const char *swallow) return NULL; } -/** - * Unset the layout content - * - * Unparent and return the content object which was set for this widget - * - * @param obj The layout object - * @param swallow The swallow group name in the edje file - * @return The content that was being used - * - * @ingroup Layout - */ EAPI Evas_Object * elm_layout_content_unset(Evas_Object *obj, const char *swallow) { @@ -581,53 +507,18 @@ elm_layout_content_unset(Evas_Object *obj, const char *swallow) return NULL; } -/** - * Set the text of the given part - * - * @param obj The layout object - * @param part The TEXT part where to set the text - * @param text The text to set - * - * @ingroup Layout - * @deprecate use elm_object_text_* instead. - */ EAPI void elm_layout_text_set(Evas_Object *obj, const char *part, const char *text) { _elm_layout_label_set(obj, part, text); } -/** - * Get the text set in the given part - * - * @param obj The layout object - * @param part The TEXT part to retrieve the text off - * - * @return The text set in @p part - * - * @ingroup Layout - * @deprecate use elm_object_text_* instead. - */ EAPI const char * elm_layout_text_get(const Evas_Object *obj, const char *part) { return _elm_layout_label_get(obj, part); } -/** - * Append child to layout box part. - * - * Once the object is appended, its lifetime will be bound to the - * layout, whenever the layout dies the child will be deleted - * automatically. One should use elm_layout_box_remove() to make this - * layout forget about the object. - * - * @param obj the layout object - * @param part the box part to append. - * @param child the child object to append to box. - * - * @ingroup Layout - */ EAPI void elm_layout_box_append(Evas_Object *obj, const char *part, Evas_Object *child) { @@ -650,20 +541,6 @@ elm_layout_box_append(Evas_Object *obj, const char *part, Evas_Object *child) _request_sizing_eval(wd); } -/** - * Prepend child to layout box part. - * - * Once the object is prepended, its lifetime will be bound to the - * layout, whenever the layout dies the child will be deleted - * automatically. One should use elm_layout_box_remove() to make this - * layout forget about the object. - * - * @param obj the layout object - * @param part the box part to prepend. - * @param child the child object to prepend to box. - * - * @ingroup Layout - */ EAPI void elm_layout_box_prepend(Evas_Object *obj, const char *part, Evas_Object *child) { @@ -693,21 +570,6 @@ _box_reference_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, si->p.box.reference = NULL; } -/** - * Insert child to layout box part before a reference object. - * - * Once the object is inserted, its lifetime will be bound to the - * layout, whenever the layout dies the child will be deleted - * automatically. One should use elm_layout_box_remove() to make this - * layout forget about the object. - * - * @param obj the layout object - * @param part the box part to insert. - * @param child the child object to insert into box. - * @param reference another reference object to insert before in box. - * - * @ingroup Layout - */ EAPI void elm_layout_box_insert_before(Evas_Object *obj, const char *part, Evas_Object *child, const Evas_Object *reference) { @@ -736,21 +598,6 @@ elm_layout_box_insert_before(Evas_Object *obj, const char *part, Evas_Object *ch _request_sizing_eval(wd); } -/** - * Insert child to layout box part at a given position. - * - * Once the object is inserted, its lifetime will be bound to the - * layout, whenever the layout dies the child will be deleted - * automatically. One should use elm_layout_box_remove() to make this - * layout forget about the object. - * - * @param obj the layout object - * @param part the box part to insert. - * @param child the child object to insert into box. - * @param pos the numeric position >=0 to insert the child. - * - * @ingroup Layout - */ EAPI void elm_layout_box_insert_at(Evas_Object *obj, const char *part, Evas_Object *child, unsigned int pos) { @@ -818,20 +665,6 @@ _sub_box_is(const Subinfo *si) } } -/** - * Remove a child of the given part box. - * - * The object will be removed from the box part and its lifetime will - * not be handled by the layout anymore. This is equivalent to - * elm_layout_content_unset() for box. - * - * @param obj The layout object - * @param part The box part name to remove child. - * @param child The object to remove from box. - * @return The object that was being used, or NULL if not found. - * - * @ingroup Layout - */ EAPI Evas_Object * elm_layout_box_remove(Evas_Object *obj, const char *part, Evas_Object *child) { @@ -853,21 +686,6 @@ elm_layout_box_remove(Evas_Object *obj, const char *part, Evas_Object *child) return NULL; } -/** - * Remove all child of the given part box. - * - * The objects will be removed from the box part and their lifetime will - * not be handled by the layout anymore. This is equivalent to - * elm_layout_content_unset() for all box children. - * - * @param obj The layout object - * @param part The box part name to remove child. - * @param clear If EINA_TRUE, then all objects will be deleted as - * well, otherwise they will just be removed and will be - * dangling on the canvas. - * - * @ingroup Layout - */ EAPI void elm_layout_box_remove_all(Evas_Object *obj, const char *part, Eina_Bool clear) { @@ -893,21 +711,6 @@ elm_layout_box_remove_all(Evas_Object *obj, const char *part, Eina_Bool clear) edje_object_part_box_remove_all(wd->lay, part, clear); } -/** - * Insert child to layout table part. - * - * Once the object is inserted, its lifetime will be bound to the - * layout, whenever the layout dies the child will be deleted - * automatically. One should use elm_layout_box_remove() to make this - * layout forget about the object. - * - * @param obj the layout object - * @param part the box part to pack child. - * @param child the child object to pack into table. - * @param reference another reference object to insert before in box. - * - * @ingroup Layout - */ EAPI void elm_layout_table_pack(Evas_Object *obj, const char *part, Evas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan) { @@ -937,20 +740,6 @@ elm_layout_table_pack(Evas_Object *obj, const char *part, Evas_Object *child, un _request_sizing_eval(wd); } -/** - * Unpack (remove) a child of the given part table. - * - * The object will be unpacked from the table part and its lifetime - * will not be handled by the layout anymore. This is equivalent to - * elm_layout_content_unset() for table. - * - * @param obj The layout object - * @param part The table part name to remove child. - * @param child The object to remove from table. - * @return The object that was being used, or NULL if not found. - * - * @ingroup Layout - */ EAPI Evas_Object * elm_layout_table_unpack(Evas_Object *obj, const char *part, Evas_Object *child) { @@ -972,21 +761,6 @@ elm_layout_table_unpack(Evas_Object *obj, const char *part, Evas_Object *child) return NULL; } -/** - * Remove all child of the given part table. - * - * The objects will be removed from the table part and their lifetime will - * not be handled by the layout anymore. This is equivalent to - * elm_layout_content_unset() for all table children. - * - * @param obj The layout object - * @param part The table part name to remove child. - * @param clear If EINA_TRUE, then all objects will be deleted as - * well, otherwise they will just be removed and will be - * dangling on the canvas. - * - * @ingroup Layout - */ EAPI void elm_layout_table_clear(Evas_Object *obj, const char *part, Eina_Bool clear) { @@ -1012,22 +786,6 @@ elm_layout_table_clear(Evas_Object *obj, const char *part, Eina_Bool clear) edje_object_part_table_clear(wd->lay, part, clear); } -/** - * Get the edje layout - * - * @param obj The layout object - * - * This returns the edje object. It is not expected to be used to then swallow - * objects via edje_object_part_swallow() for example. Use - * elm_layout_content_set() instead so child object handling and sizing is - * done properly. This is more intended for setting text, emitting signals, - * hooking to signal callbacks etc. - * - * @return A Evas_Object with the edje layout settings loaded - * with function elm_layout_file_set - * - * @ingroup Layout - */ EAPI Evas_Object * elm_layout_edje_get(const Evas_Object *obj) { @@ -1037,34 +795,6 @@ elm_layout_edje_get(const Evas_Object *obj) return wd->lay; } -/** - * Get the edje data of the given layout - * - * @param obj The layout object - * @param key The data key - * - * @return The edje data string - * - * This function fetches data specified at the object level. - * This function return NULL if data is not found. - * - * In EDC this comes from a data block within the group block that @a - * obj was loaded from. E.g. - * - * @code - * collections { - * group { - * name: "a_group"; - * data { - * item: "key1" "value1"; - * item: "key2" "value2"; - * } - * } - * } - * @endcode - * - * @ingroup Layout - */ EAPI const char * elm_layout_data_get(const Evas_Object *obj, const char *key) { @@ -1073,18 +803,6 @@ elm_layout_data_get(const Evas_Object *obj, const char *key) return edje_object_data_get(wd->lay, key); } -/** - * Eval sizing - * - * Manually forms a sizing re-evaluation when contents changed state so that - * minimum size might have changed and needs re-evaluation. Also note that - * a standard signal of "size,eval" "elm" emitted by the edje object will - * cause this to happen too - * - * @param obj The layout object - * - * @ingroup Layout - */ EAPI void elm_layout_sizing_eval(Evas_Object *obj) { -- 2.7.4