diff options
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | dtd/functions.dtd | 25 | ||||
-rw-r--r-- | libcore/pixmapcontainer.c | 9 | ||||
-rw-r--r-- | libcore/pixmapcontainer.h | 1 | ||||
-rw-r--r-- | libtemplate/templatefunction.c | 14 | ||||
-rw-r--r-- | libtemplate/templatefunction.h | 2 | ||||
-rw-r--r-- | libtemplate/templatepixmap.c | 2 | ||||
-rw-r--r-- | libtemplate/templateview.c | 14 | ||||
-rw-r--r-- | views/view.c | 29 | ||||
-rw-r--r-- | views/view.h | 1 |
10 files changed, 94 insertions, 5 deletions
@@ -32,4 +32,6 @@ Version 0.0.2 - fixed bug that x and y of subviews was not respected - if a subview is completely not set in a skin, the default menu is used - fixed a bug if displaydetailedtext is called without correct menucat (mailbox plugin) +- implemented function drawslope, see Wiki for documentation + diff --git a/dtd/functions.dtd b/dtd/functions.dtd index 5e78876..424378f 100644 --- a/dtd/functions.dtd +++ b/dtd/functions.dtd @@ -1,4 +1,4 @@ -<!ELEMENT area (loop|fill|drawtext|drawtextbox|drawimage|drawrectangle|drawellipse)*> +<!ELEMENT area (loop|fill|drawtext|drawtextbox|drawimage|drawrectangle|drawellipse|drawslope)*> <!ATTLIST area x CDATA #IMPLIED y CDATA #IMPLIED @@ -10,7 +10,7 @@ debug (true|false) #IMPLIED > -<!ELEMENT areascroll (loop|fill|drawtext|drawtextbox|drawimage|drawrectangle|drawellipse)*> +<!ELEMENT areascroll (loop|fill|drawtext|drawtextbox|drawimage|drawrectangle|drawellipse|drawslope)*> <!ATTLIST areascroll x CDATA #IMPLIED y CDATA #IMPLIED @@ -27,7 +27,7 @@ debug (true|false) #IMPLIED > -<!ELEMENT loop (drawtext|drawtextbox|drawimage|drawrectangle|drawellipse)+> +<!ELEMENT loop (drawtext|drawtextbox|drawimage|drawrectangle|drawellipse|drawslope)+> <!ATTLIST loop x CDATA #REQUIRED y CDATA #REQUIRED @@ -101,8 +101,8 @@ <!ELEMENT drawellipse EMPTY> <!ATTLIST drawellipse - x CDATA #REQUIRED - y CDATA #REQUIRED + x CDATA #IMPLIED + y CDATA #IMPLIED width CDATA #IMPLIED height CDATA #IMPLIED align (left|center|right) #IMPLIED @@ -114,6 +114,21 @@ debug NMTOKEN #IMPLIED > +<!ELEMENT drawslope EMPTY> +<!ATTLIST drawslope + x CDATA #IMPLIED + y CDATA #IMPLIED + width CDATA #REQUIRED + height CDATA #REQUIRED + align (left|center|right) #IMPLIED + valign (top|center|bottom) #IMPLIED + color CDATA #REQUIRED + type CDATA #REQUIRED + name NMTOKEN #IMPLIED + condition CDATA #IMPLIED + debug NMTOKEN #IMPLIED + > + <!ELEMENT drawimage EMPTY> <!ATTLIST drawimage x CDATA #IMPLIED diff --git a/libcore/pixmapcontainer.c b/libcore/pixmapcontainer.c index 4ee651a..fe5190f 100644 --- a/libcore/pixmapcontainer.c +++ b/libcore/pixmapcontainer.c @@ -136,6 +136,15 @@ void cPixmapContainer::DrawEllipse(int num, const cRect &Rect, tColor Color, int pixmaps[num]->DrawEllipse(Rect, Color, Quadrants); } +void cPixmapContainer::DrawSlope(int num, const cRect &Rect, tColor Color, int Type) { + if (checkRunning && !Running()) + return; + cMutexLock MutexLock(&mutex); + if (!pixmaps[num]) + return; + pixmaps[num]->DrawSlope(Rect, Color, Type); +} + void cPixmapContainer::DrawImage(int num, const cPoint &Point, const cImage &Image) { if (checkRunning && !Running()) return; diff --git a/libcore/pixmapcontainer.h b/libcore/pixmapcontainer.h index 3904f16..3b3105a 100644 --- a/libcore/pixmapcontainer.h +++ b/libcore/pixmapcontainer.h @@ -35,6 +35,7 @@ protected: void DrawText(int num, const cPoint &Point, const char *s, tColor ColorFg, tColor ColorBg, std::string fontName, int fontSize); void DrawRectangle(int num, const cRect &Rect, tColor Color); void DrawEllipse(int num, const cRect &Rect, tColor Color, int Quadrants = 0); + void DrawSlope(int num, const cRect &Rect, tColor Color, int Type); void DrawImage(int num, const cPoint &Point, const cImage &Image); void DrawBitmap(int num, const cPoint &Point, const cBitmap &Bitmap, tColor ColorFg = 0, tColor ColorBg = 0, bool Overlay = false); void Fill(int num, tColor Color); diff --git a/libtemplate/templatefunction.c b/libtemplate/templatefunction.c index 9dca94e..b96f0be 100644 --- a/libtemplate/templatefunction.c +++ b/libtemplate/templatefunction.c @@ -83,6 +83,8 @@ void cTemplateFunction::SetParameters(vector<pair<string, string> > params) { p.first = ptTransparency;
} else if (!name.compare("quadrant")) {
p.first = ptQuadrant;
+ } else if (!name.compare("type")) {
+ p.first = ptType;
} else if (!name.compare("align")) {
p.first = ptAlign;
} else if (!name.compare("valign")) {
@@ -215,6 +217,7 @@ bool cTemplateFunction::CalculateParameters(void) { case ptLayer:
case ptTransparency:
case ptQuadrant:
+ case ptType:
case ptNumElements:
case ptFloatWidth:
case ptFloatHeight:
@@ -301,6 +304,9 @@ void cTemplateFunction::CompleteParameters(void) { case ftDrawEllipse:
CalculateAlign(GetNumericParameter(ptWidth), GetNumericParameter(ptHeight));
break;
+ case ftDrawSlope:
+ CalculateAlign(GetNumericParameter(ptWidth), GetNumericParameter(ptHeight));
+ break;
case ftDrawText:
CalculateAlign(GetWidth(), GetHeight());
break;
@@ -439,6 +445,7 @@ int cTemplateFunction::GetWidth(bool cutted) { case ftDrawImage:
case ftDrawRectangle:
case ftDrawEllipse:
+ case ftDrawSlope:
case ftDrawTextBox:
funcWidth = GetNumericParameter(ptWidth);
break;
@@ -459,6 +466,7 @@ int cTemplateFunction::GetHeight(void) { case ftDrawImage:
case ftDrawRectangle:
case ftDrawEllipse:
+ case ftDrawSlope:
funcHeight = GetNumericParameter(ptHeight);
break;
case ftDrawTextBox: {
@@ -1265,6 +1273,9 @@ string cTemplateFunction::GetFuncName(void) { case ftDrawEllipse:
name = "Function DrawEllipse";
break;
+ case ftDrawSlope:
+ name = "Function DrawSlope";
+ break;
case ftNone:
name = "Undefined";
break;
@@ -1332,6 +1343,9 @@ string cTemplateFunction::GetParamName(eParamType pt) { case ptQuadrant:
name = "Quadrant";
break;
+ case ptType:
+ name = "Type";
+ break;
case ptAlign:
name = "Align";
break;
diff --git a/libtemplate/templatefunction.h b/libtemplate/templatefunction.h index 9a784c5..b6c2d53 100644 --- a/libtemplate/templatefunction.h +++ b/libtemplate/templatefunction.h @@ -32,6 +32,7 @@ enum eFuncType { ftDrawImage, ftDrawRectangle, ftDrawEllipse, + ftDrawSlope, ftNone }; @@ -54,6 +55,7 @@ enum eParamType { ptLayer, ptTransparency, ptQuadrant, + ptType, ptAlign, ptValign, ptScrollMode, diff --git a/libtemplate/templatepixmap.c b/libtemplate/templatepixmap.c index 8aaa4f3..4fbd513 100644 --- a/libtemplate/templatepixmap.c +++ b/libtemplate/templatepixmap.c @@ -107,6 +107,8 @@ void cTemplatePixmap::AddFunction(string name, vector<pair<string, string> > &pa type = ftDrawRectangle;
} else if (!name.compare("drawellipse")) {
type = ftDrawEllipse;
+ } else if (!name.compare("drawslope")) {
+ type = ftDrawSlope;
}
if (type == ftNone) {
diff --git a/libtemplate/templateview.c b/libtemplate/templateview.c index 37bb13b..7786ce1 100644 --- a/libtemplate/templateview.c +++ b/libtemplate/templateview.c @@ -558,6 +558,20 @@ void cTemplateView::SetFunctionDefinitions(void) { attributes.insert("quadrant"); funcsAllowed.insert(pair< string, set<string> >(name, attributes)); + name = "drawslope"; + attributes.clear(); + attributes.insert("debug"); + attributes.insert("condition"); + attributes.insert("name"); + attributes.insert("x"); + attributes.insert("y"); + attributes.insert("align"); + attributes.insert("valign"); + attributes.insert("width"); + attributes.insert("height"); + attributes.insert("color"); + attributes.insert("type"); + funcsAllowed.insert(pair< string, set<string> >(name, attributes)); } /************************************************************************************ diff --git a/views/view.c b/views/view.c index 3b72253..75a24e0 100644 --- a/views/view.c +++ b/views/view.c @@ -251,6 +251,9 @@ void cView::DrawPixmap(int num, cTemplatePixmap *pix, map < string, vector< map< case ftDrawEllipse:
DoDrawEllipse(num, func);
break;
+ case ftDrawSlope:
+ DoDrawSlope(num, func);
+ break;
case ftDrawImage:
DoDrawImage(num, func);
break;
@@ -348,6 +351,9 @@ void cView::DrawLoop(int numPixmap, cTemplateFunction *func, map < string, vecto case ftDrawEllipse:
DoDrawEllipse(numPixmap, func, x0, y0);
break;
+ case ftDrawSlope:
+ DoDrawSlope(numPixmap, func, x0, y0);
+ break;
case ftDrawImage:
DoDrawImage(numPixmap, func, x0, y0);
break;
@@ -634,9 +640,32 @@ void cView::DoDrawEllipse(int num, cTemplateFunction *func, int x0, int y0) { cRect size(x, y, w, h);
tColor clr = func->GetColorParameter(ptColor);
int quadrant = func->GetNumericParameter(ptQuadrant);
+ if (quadrant < -4 || quadrant > 8) {
+ esyslog("skindesigner: wrong quadrant %d for drawellipse, allowed values are from -4 to 8", quadrant);
+ quadrant = 0;
+ }
DrawEllipse(num, size, clr, quadrant);
}
+void cView::DoDrawSlope(int num, cTemplateFunction *func, int x0, int y0) {
+ int x = func->GetNumericParameter(ptX);
+ int y = func->GetNumericParameter(ptY);
+ if (x < 0) x = 0;
+ x += x0;
+ if (y < 0) y = 0;
+ y += y0;
+ int w = func->GetNumericParameter(ptWidth);
+ int h = func->GetNumericParameter(ptHeight);
+ cRect size(x, y, w, h);
+ tColor clr = func->GetColorParameter(ptColor);
+ int type = func->GetNumericParameter(ptType);
+ if (type < 0 || type > 7) {
+ esyslog("skindesigner: wrong type %d for drawslope, allowed values are from 0 to 7", type);
+ type = 0;
+ }
+ DrawSlope(num, size, clr, type);
+}
+
void cView::DoDrawImage(int num, cTemplateFunction *func, int x0, int y0) {
int x = func->GetNumericParameter(ptX);
int y = func->GetNumericParameter(ptY);
diff --git a/views/view.h b/views/view.h index 4609935..a793c31 100644 --- a/views/view.h +++ b/views/view.h @@ -17,6 +17,7 @@ private: void DoDrawFloatingTextBox(int num, cTemplateFunction *func);
void DoDrawRectangle(int num, cTemplateFunction *func, int x0 = 0, int y0 = 0);
void DoDrawEllipse(int num, cTemplateFunction *func, int x0 = 0, int y0 = 0);
+ void DoDrawSlope(int num, cTemplateFunction *func, int x0 = 0, int y0 = 0);
void DoDrawImage(int num, cTemplateFunction *func, int x0 = 0, int y0 = 0);
void ActivateScrolling(void);
protected:
|