Belarusian
[AROS.git] / rom / intuition / newmodifyprop.c
blob7b256c5e0f2000639ac488919f533c1bd27d40aa
1 /*
2 Copyright © 1995-2007, The AROS Development Team. All rights reserved.
3 Copyright © 2001-2003, The MorphOS Development Team. All Rights Reserved.
4 $Id$
5 */
7 #include <proto/layers.h>
8 #include "intuition_intern.h"
9 #include "inputhandler.h"
10 #include "inputhandler_actions.h"
11 #include "propgadgets.h"
12 #include <intuition/intuition.h>
14 /******************************************************************** *********
16 NAME */
17 #include <proto/intuition.h>
19 AROS_LH9(void, NewModifyProp,
21 /* SYNOPSIS */
22 AROS_LHA(struct Gadget *, gadget, A0),
23 AROS_LHA(struct Window *, window, A1),
24 AROS_LHA(struct Requester *, requester, A2),
25 AROS_LHA(ULONG , flags, D0),
26 AROS_LHA(ULONG , horizPot, D1),
27 AROS_LHA(ULONG , vertPot, D2),
28 AROS_LHA(ULONG , horizBody, D3),
29 AROS_LHA(ULONG , vertBody, D4),
30 AROS_LHA(LONG , numGad, D5),
32 /* LOCATION */
33 struct IntuitionBase *, IntuitionBase, 78, Intuition)
35 /* FUNCTION
36 Changes the values in the PropInfo-structure of a proportional
37 gadget and refreshes the specified number of gadgets beginning
38 at the proportional gadget. If numGad is 0 (zero), then no
39 refreshing is done.
41 INPUTS
42 gadget - Must be a PROPGADGET.
43 window - The window which contains the gadget
44 requester - If the gadget has GTYP_REQGADGET set, this must be
45 non-NULL.
46 flags - New flags
47 horizPot - New value for the HorizPot field of the PropInfo
48 vertPot - New value for the VertPot field of the PropInfo
49 horizBody - New value for the HorizBody field of the PropInfo
50 vertBody - New value for the VertBody field of the PropInfo
51 numGad - How many gadgets to refresh. 0 means none (not even
52 the current gadget) and -1 means all of them.
54 RESULT
55 None.
57 NOTES
58 If NewModifyProp does not work for you, check if you
59 really have a gadget with GTYP_PROPGADGET set. If you
60 create a new gadget object from PROPGCLASS, you
61 might very well get a GTYP_CUSTOMGADGET gadget.
62 As a workaround, you might have to set the
63 gadget type to GTYP_PROPGADGET manually during the
64 call to NewModifyProp. Intuition does this, too.
66 EXAMPLE
68 BUGS
70 SEE ALSO
71 ModifyProp(), RefreshGadgets(), RefreshGList()
73 INTERNALS
75 HISTORY
76 29-10-95 digulla automatically created from
77 intuition_lib.fd and clib/intuition_protos.h
79 *****************************************************************************/
81 AROS_LIBFUNC_INIT
83 struct PropInfo *pi;
84 struct BBox old, new;
85 BOOL knobok1, knobok2;
87 if ((gadget->GadgetType & GTYP_GTYPEMASK) != GTYP_PROPGADGET
88 || !gadget->SpecialInfo || !window)
89 return;
91 EXTENDUWORD(horizPot);
92 EXTENDUWORD(vertPot);
93 EXTENDUWORD(horizBody);
94 EXTENDUWORD(vertBody);
95 EXTENDUWORD(flags);
96 EXTENDWORD(numGad);
98 #ifdef USEGADGETLOCK
99 ObtainSemaphore(&GetPrivIBase(IntuitionBase)->InputHandlerLock);
100 #else
101 LOCKWINDOWLAYERS(window);
102 #endif
103 pi = gadget->SpecialInfo;
105 CalcBBox (window, requester, gadget, &old);
107 new = old;
108 #if PROP_RENDER_OPTIMIZATION
109 knobok1 = CalcKnobSize (gadget, &old);
110 #else
111 knobok1 = TRUE;
112 #endif
113 /* We don't want the inputhandler to redraw the knob with values
114 * partially changed, so use some protection.
116 pi->Flags = flags;
117 pi->HorizPot = horizPot;
118 pi->VertPot = vertPot;
119 pi->HorizBody = horizBody;
120 pi->VertBody = vertBody;
122 #ifdef PROPHACK
123 Forbid();
124 if ((gadget == ((struct IIHData *)GetPrivIBase(IntuitionBase)->InputHandler->is_Data)->ActiveGadget) && (FindTask(0) == ((struct IIHData *)GetPrivIBase(IntuitionBase)->InputHandler->is_Data)->InputDeviceTask) && ((struct IIHData *)GetPrivIBase(IntuitionBase)->InputHandler->is_Data)->PropTask)
126 Signal(((struct IIHData *)GetPrivIBase(IntuitionBase)->InputHandler->is_Data)->PropTask,PSIG_REFRESHALL);
128 else
131 // Permit(); stegerg: CHECKME, commented out!
132 #endif
133 knobok2 = CalcKnobSize (gadget, &new);
135 if (knobok2)
137 RefreshPropGadgetKnob (gadget, knobok1 ? &old : 0, &new, window, requester, IntuitionBase);
140 #ifdef PROPHACK
143 Permit();
144 #endif
146 if (numGad > 1 && gadget->NextGadget)
147 RefreshGList (gadget->NextGadget, window, requester, numGad - 1);
149 #ifdef USEGADGETLOCK
150 ReleaseSemaphore(&GetPrivIBase(IntuitionBase)->InputHandlerLock);
151 #else
152 UNLOCKWINDOWLAYERS(window);
153 #endif
154 AROS_LIBFUNC_EXIT