summaryrefslogtreecommitdiff
path: root/libprefab/iconelement.c
diff options
context:
space:
mode:
Diffstat (limited to 'libprefab/iconelement.c')
-rw-r--r--libprefab/iconelement.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/libprefab/iconelement.c b/libprefab/iconelement.c
new file mode 100644
index 00000000..94d089bb
--- /dev/null
+++ b/libprefab/iconelement.c
@@ -0,0 +1,50 @@
+#include <lib9.h>
+#include <draw.h>
+#include <interp.h>
+#include <isa.h>
+#include "../libinterp/runt.h"
+#include <drawif.h>
+#include <prefab.h>
+
+static
+PElement*
+iconelement1(Prefab_Environ *e, Draw_Rect r, Draw_Image *icon, Draw_Image *mask, enum Elementtype kind)
+{
+ PElement *pelem;
+ Prefab_Element *elem;
+
+ if(badenviron(e, 0) || icon==H || mask==H)
+ return H;
+ pelem = mkelement(e, kind);
+ if(pelem == H)
+ return H;
+ elem = &pelem->e;
+
+ if(Dx(r))
+ elem->r = r;
+ else{
+ elem->r.min = r.min;
+ elem->r.max.x = r.min.x + Dx(icon->r);
+ elem->r.max.y = r.min.y + Dy(icon->r);
+ }
+ elem->mask = mask;
+ D2H(mask)->ref++;
+ elem->image = icon;
+ D2H(icon)->ref++;
+ pelem->drawpt = IPOINT(r.min);
+ pelem->nkids = 1;
+ pelem->pkind = kind;
+ return pelem;
+}
+
+PElement*
+iconelement(Prefab_Environ *e, Draw_Rect r, Draw_Image *icon, Draw_Image *mask)
+{
+ return iconelement1(e, r, icon, mask, EIcon);
+}
+
+PElement*
+separatorelement(Prefab_Environ *e, Draw_Rect r, Draw_Image *icon, Draw_Image *mask)
+{
+ return iconelement1(e, r, icon, mask, ESeparator);
+}