X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fflexui%2Ffui_common.pas;h=38afcbb424d0a7d592f8e6aa963d4d05017e81b0;hb=d5593c39bbce64b1e9866e1c1d8a6e1e4910a14e;hp=76354c3b966c4acb99342519f15efcddb3768bef;hpb=26290d9816334b8377531cf8b3e58643444f4d04;p=d2df-sdl.git diff --git a/src/flexui/fui_common.pas b/src/flexui/fui_common.pas index 76354c3..38afcbb 100644 --- a/src/flexui/fui_common.pas +++ b/src/flexui/fui_common.pas @@ -3,8 +3,7 @@ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * the Free Software Foundation, version 3 of the License ONLY. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -86,12 +85,39 @@ type function isOpaque (): Boolean; inline; function isTransparent (): Boolean; inline; + function toString (): AnsiString; + // WARNING! This function does blending in RGB space, and RGB space is not linear! // alpha value of `self` doesn't matter // `aa` means: 255 for replace color, 0 for keep `self` function blend (ar, ag, ab, aa: Integer): TGxRGBA; inline; end; + TGxRect = packed record + public + x, y, w, h: Integer; + + public + constructor Create (ax, ay, aw, ah: Integer); + + function empty (): Boolean; inline; // invalid rects are empty too + function valid (): Boolean; inline; + + function toString (): AnsiString; + + // modifies this rect, so it won't be bigger than `r` + // returns `false` if this rect becomes empty + function intersect (constref r: TGxRect): Boolean; inline; + end; + + TGxOfs = packed record + public + xofs, yofs: Integer; + + public + constructor Create (axofs, ayofs: Integer); + end; + // ////////////////////////////////////////////////////////////////////////// // // return `false` if destination rect is empty @@ -105,7 +131,6 @@ implementation uses utils; - // ////////////////////////////////////////////////////////////////////////// // constructor TLaySize.Create (aw, ah: Integer); begin w := aw; h := ah; end; function TLaySize.getIdx (idx: Integer): Integer; inline; begin if (idx = 0) then result := w else if (idx = 1) then result := h else result := -1; end; @@ -173,6 +198,30 @@ begin result.a := a; end; +function TGxRGBA.toString (): AnsiString; +begin + if (a = 255) then result := formatstrf('rgb(%s,%s,%s)', [r, g, b]) + else result := formatstrf('rgba(%s,%s,%s,%s)', [r, g, b, a]); +end; + + +// ////////////////////////////////////////////////////////////////////////// // +constructor TGxRect.Create (ax, ay, aw, ah: Integer); begin x := ax; y := ay; w := aw; h := ah; end; + +function TGxRect.empty (): Boolean; inline; begin result := (w <= 0) or (h <= 0); end; +function TGxRect.valid (): Boolean; inline; begin result := (w < 0) or (h < 0); end; + +function TGxRect.intersect (constref r: TGxRect): Boolean; inline; +begin + result := intersectRect(x, y, w, h, r.x, r.y, r.w, r.h); +end; + +function TGxRect.toString (): AnsiString; begin result := formatstrf('(%s,%s;%sx%s)', [x, y, w, h]); end; + + +// ////////////////////////////////////////////////////////////////////////// // +constructor TGxOfs.Create (axofs, ayofs: Integer); begin xofs := axofs; yofs := ayofs; end; + // ////////////////////////////////////////////////////////////////////////// // //TODO: overflow checks