CopyToAFS: Remove dead FMF_* flags
[AROS.git] / rom / hyperlayers / scalelayer.c
blob6a57795f0d68301fe4fb4af98b0322565655889f
1 /*
2 Copyright © 1995-2008, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc:
6 Lang: english
7 */
8 #include <aros/asmcall.h>
9 #include <aros/debug.h>
10 #include <proto/exec.h>
11 #include <proto/utility.h>
12 #include <exec/types.h>
13 #include <exec/memory.h>
14 #include <aros/libcall.h>
15 #include <proto/graphics.h>
16 #include <graphics/scale.h>
18 #include "layers_intern.h"
19 #include "basicfuncs.h"
22 struct ScaleLayerParam
24 struct TagItem * taglist;
25 struct LayersBase * LayersBase;
28 AROS_UFP3(struct Region *, ScaleLayerCallback,
29 AROS_UFPA(struct Hook *, hook , A0),
30 AROS_UFPA(struct Layer *, l , A2),
31 AROS_UFPA(struct ChangeLayerShapeMsg *, clsm , A1));
33 /*****************************************************************************
35 NAME */
36 #include <proto/layers.h>
37 AROS_LH2(ULONG, ScaleLayer,
39 /* SYNOPSIS */
40 AROS_LHA(struct Layer *, l , A0),
41 AROS_LHA(struct TagItem *, taglist , A1),
43 /* LOCATION */
44 struct LayersBase *, LayersBase, 42, Layers)
46 /* FUNCTION
47 Scale the given layer. This function will use the
48 current shape of the layer and resize it according to
49 the given newwidth/newheight.
51 INPUTS
52 L - pointer to layer
53 newwidth - new width of the layer
54 newheight - new height of the layer
56 RESULT
57 TRUE if everything went alright, FALSE otherwise
59 NOTES
61 EXAMPLE
63 BUGS
65 SEE ALSO
67 INTERNALS
69 *****************************************************************************/
71 AROS_LIBFUNC_INIT
73 struct ScaleLayerParam parm = {taglist, LayersBase};
74 struct Region * oldshape;
75 struct Hook hook;
77 hook.h_Entry = (HOOKFUNC)ScaleLayerCallback;
78 hook.h_Data = (APTR)&parm;
80 oldshape = ChangeLayerShape(l, 0, &hook);
83 * I must not free oldshape here since it is also the new shape!
86 return FALSE;
87 AROS_LIBFUNC_EXIT
88 } /* ScaleLayer */
93 * The ScaleLayer callback is doing the actual work of
94 * scaling the layer.
96 AROS_UFH3(struct Region *, ScaleLayerCallback,
97 AROS_UFHA(struct Hook *, hook , A0),
98 AROS_UFHA(struct Layer *, l , A2),
99 AROS_UFHA(struct ChangeLayerShapeMsg *, clsm , A1))
101 AROS_USERFUNC_INIT
103 struct BitScaleArgs bsa;
104 struct BitMap * bm = NULL;
105 struct ScaleLayerParam * slp = (struct ScaleLayerParam *)hook->h_Data;
106 struct LayersBase * LayersBase = slp->LayersBase;
108 struct TagItem * taglist = slp->taglist;
110 if (l->ClipRect->Next)
112 kprintf("%s: Only expecting one ClipRect - leaving!\n",__FUNCTION__);
113 return NULL;
116 bm = AllocBitMap(GetTagData(LA_DESTWIDTH , l->Width , taglist),
117 GetTagData(LA_DESTHEIGHT, l->Height, taglist),
118 l->ClipRect->BitMap->Depth,
120 l->rp->BitMap);
122 bsa.bsa_SrcX = GetTagData(LA_SRCX, 0, taglist);
123 bsa.bsa_SrcY = GetTagData(LA_SRCY, 0, taglist);
124 bsa.bsa_SrcWidth = GetTagData(LA_SRCWIDTH , l->Width , taglist);
125 bsa.bsa_SrcHeight = GetTagData(LA_SRCHEIGHT, l->Height, taglist);
126 bsa.bsa_XSrcFactor = bsa.bsa_SrcWidth;
127 bsa.bsa_YSrcFactor = bsa.bsa_SrcHeight;
128 bsa.bsa_DestX = GetTagData(LA_DESTX, 0, taglist);
129 bsa.bsa_DestY = GetTagData(LA_DESTY, 0, taglist);
131 bsa.bsa_DestWidth = GetTagData(LA_DESTWIDTH , l->Width , taglist);
132 bsa.bsa_DestHeight = GetTagData(LA_DESTHEIGHT, l->Height, taglist);
134 bsa.bsa_XDestFactor = GetTagData(LA_DESTWIDTH , l->Width , taglist);
135 bsa.bsa_YDestFactor = GetTagData(LA_DESTHEIGHT, l->Height, taglist);
136 bsa.bsa_SrcBitMap = l->ClipRect->BitMap;
137 bsa.bsa_DestBitMap = bm;
138 bsa.bsa_Flags = 0;
139 #if 0
140 bsa.bsa_XDDA;
141 bsa.bsa_YDDA;
142 bsa.bsa_Reserved1;
143 bsa.bsa_Reserved2;
144 #endif
146 //kprintf("Scaling bitmap!\n");
147 BitMapScale(&bsa);
149 FreeBitMap(l->ClipRect->BitMap);
150 l->ClipRect->BitMap = bm;
151 //kprintf("Leaving %s!\n",__FUNCTION__);
153 kprintf("shaperegion: %p\n",l->shaperegion);
155 return l->shaperegion;
157 AROS_USERFUNC_EXIT