2 Copyright © 1995-2008, The AROS Development Team. All rights reserved.
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 /*****************************************************************************
36 #include <proto/layers.h>
37 AROS_LH2(ULONG
, ScaleLayer
,
40 AROS_LHA(struct Layer
*, l
, A0
),
41 AROS_LHA(struct TagItem
*, taglist
, A1
),
44 struct LayersBase
*, LayersBase
, 38, Layers
)
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.
53 newwidth - new width of the layer
54 newheight - new height of the layer
57 TRUE if everything went alright, FALSE otherwise
69 *****************************************************************************/
73 struct ScaleLayerParam parm
= {taglist
, LayersBase
};
74 struct Region
* oldshape
;
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!
85 if (oldshape
== NULL
) {
86 /* TODO: Can this happen? */
96 * The ScaleLayer callback is doing the actual work of
99 AROS_UFH3(struct Region
*, ScaleLayerCallback
,
100 AROS_UFHA(struct Hook
*, hook
, A0
),
101 AROS_UFHA(struct Layer
*, l
, A2
),
102 AROS_UFHA(struct ChangeLayerShapeMsg
*, clsm
, A1
))
106 struct BitScaleArgs bsa
;
107 struct BitMap
* bm
= NULL
;
108 struct ScaleLayerParam
* slp
= (struct ScaleLayerParam
*)hook
->h_Data
;
109 struct LayersBase
* LayersBase
= slp
->LayersBase
;
111 struct TagItem
* taglist
= slp
->taglist
;
113 if (l
->ClipRect
->Next
)
115 kprintf("%s: Only expecting one ClipRect - leaving!\n",__FUNCTION__
);
119 bm
= AllocBitMap(GetTagData(LA_DESTWIDTH
, l
->Width
, taglist
),
120 GetTagData(LA_DESTHEIGHT
, l
->Height
, taglist
),
121 l
->ClipRect
->BitMap
->Depth
,
125 bsa
.bsa_SrcX
= GetTagData(LA_SRCX
, 0, taglist
);
126 bsa
.bsa_SrcY
= GetTagData(LA_SRCY
, 0, taglist
);
127 bsa
.bsa_SrcWidth
= GetTagData(LA_SRCWIDTH
, l
->Width
, taglist
);
128 bsa
.bsa_SrcHeight
= GetTagData(LA_SRCHEIGHT
, l
->Height
, taglist
);
129 bsa
.bsa_XSrcFactor
= bsa
.bsa_SrcWidth
;
130 bsa
.bsa_YSrcFactor
= bsa
.bsa_SrcHeight
;
131 bsa
.bsa_DestX
= GetTagData(LA_DESTX
, 0, taglist
);
132 bsa
.bsa_DestY
= GetTagData(LA_DESTY
, 0, taglist
);
134 bsa.bsa_DestWidth = GetTagData(LA_DESTWIDTH , l->Width , taglist);
135 bsa.bsa_DestHeight = GetTagData(LA_DESTHEIGHT, l->Height, taglist);
137 bsa
.bsa_XDestFactor
= GetTagData(LA_DESTWIDTH
, l
->Width
, taglist
);
138 bsa
.bsa_YDestFactor
= GetTagData(LA_DESTHEIGHT
, l
->Height
, taglist
);
139 bsa
.bsa_SrcBitMap
= l
->ClipRect
->BitMap
;
140 bsa
.bsa_DestBitMap
= bm
;
149 //kprintf("Scaling bitmap!\n");
152 FreeBitMap(l
->ClipRect
->BitMap
);
153 l
->ClipRect
->BitMap
= bm
;
154 //kprintf("Leaving %s!\n",__FUNCTION__);
156 kprintf("shaperegion: %p\n",l
->shaperegion
);
158 return l
->shaperegion
;