From 9a55156a92ec597f1bb6892d919e088268d0f688 Mon Sep 17 00:00:00 2001 From: NicJA Date: Thu, 26 Sep 2013 16:44:30 +0000 Subject: [PATCH] read runtime config from env git-svn-id: https://svn.aros.org/svn/aros/trunk@48132 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- .../devs/monitors/Compositor/compositingclass.c | 81 ++++++++++++++++++++-- 1 file changed, 74 insertions(+), 7 deletions(-) diff --git a/AROS/workbench/devs/monitors/Compositor/compositingclass.c b/AROS/workbench/devs/monitors/Compositor/compositingclass.c index edf2624..95b862f 100644 --- a/AROS/workbench/devs/monitors/Compositor/compositingclass.c +++ b/AROS/workbench/devs/monitors/Compositor/compositingclass.c @@ -26,17 +26,31 @@ #include -#include - -#include - #include +#include #include #include #include +#include +#include + #include "compositing_intern.h" +#define COMPOSITE_PREFS "SYS/compositor.prefs" +#define COMPOSITE_PEFSTEMPLATE "ABOVE/S,BELOW/S,LEFT/S,RIGHT/S,ALPHA/S" + +enum +{ + ARG_ABOVE = 0, + ARG_BELOW, + ARG_LEFT, + ARG_RIGHT, + ARG_ALPHA, + NOOFARGS +}; + + #ifdef GfxBase #undef GfxBase #endif @@ -788,6 +802,59 @@ static void HIDDCompositingReset(struct HIDDCompositingData *compdata) compdata->screenbitmap = NULL; } +VOID CompositorParseConfig(struct HIDDCompositingData *compdata) +{ + struct RDArgs *rdargs; + IPTR CompArgs[NOOFARGS] = { 0 }; + TEXT CompConfig[1024]; + + /* use default amiga-like capabailities */ + compdata->capabilities = COMPF_ABOVE; + + rdargs = AllocDosObjectTags(DOS_RDARGS, TAG_END); + if ((rdargs != NULL) && (GetVar(COMPOSITE_PREFS, CompConfig, 1024, GVF_GLOBAL_ONLY) != -1)) + { + rdargs->RDA_Source.CS_Buffer = CompConfig; + rdargs->RDA_Source.CS_Length = strlen(rdargs->RDA_Source.CS_Buffer); + rdargs->RDA_DAList = NULL; + rdargs->RDA_Buffer = NULL; + rdargs->RDA_BufSiz = 0; + rdargs->RDA_ExtHelp = NULL; + rdargs->RDA_Flags = 0; + + if (ReadArgs(COMPOSITE_PEFSTEMPLATE, CompArgs, rdargs) != NULL) + { + if (CompArgs[ARG_ABOVE]) + compdata->capabilities |= COMPF_ABOVE; + else + compdata->capabilities &= ~COMPF_ABOVE; + + if (CompArgs[ARG_BELOW]) + compdata->capabilities |= COMPF_BELOW; + else + compdata->capabilities &= ~COMPF_BELOW; + + if (CompArgs[ARG_LEFT]) + compdata->capabilities |= COMPF_LEFT; + else + compdata->capabilities &= ~COMPF_LEFT; + + if (CompArgs[ARG_RIGHT]) + compdata->capabilities |= COMPF_RIGHT; + else + compdata->capabilities &= ~COMPF_RIGHT; +/* + if (CompArgs[ARG_ALPHA]) + compdata->capabilities |= COMPF_ALPHA; + else + compdata->capabilities &= ~COMPF_ALPHA; +*/ + FreeArgs(rdargs); + } + FreeDosObject(DOS_RDARGS, rdargs); + } +} + AROS_UFH3(void, CompositorDefaultBackFillFunc, AROS_UFHA(struct Hook * , h, A0), AROS_UFHA(OOP_Object * , bm, A2), @@ -814,10 +881,10 @@ OOP_Object *METHOD(Compositing, Root, New) OOP_MethodID disposemid; struct HIDDCompositingData *compdata = OOP_INST_DATA(cl, o); - /* use default amiga-like capabailities */ - compdata->capabilities = COMPF_ABOVE; - D(bug("[%s] Compositor @ 0x%p, data @ 0x%p\n", __PRETTY_FUNCTION__, o, compdata)); + + CompositorParseConfig(compdata); + D(bug("[%s] Composite Capabilities: %08lx\n", __PRETTY_FUNCTION__, compdata->capabilities)); compdata->screenmodeid = vHidd_ModeID_Invalid; -- 2.1.4