diff --git a/Modules/stdwinmodule.c b/Modules/stdwinmodule.c index b55e58b2b9b..e00fc91c334 100644 --- a/Modules/stdwinmodule.c +++ b/Modules/stdwinmodule.c @@ -459,11 +459,54 @@ drawing_setfont(self, args) drawingobject *self; object *args; { - TEXTATTR saveattr, winattr; - object *str; - if (!getstrarg(args, &str)) + object *font, *style; + int size; + if (args == NULL) { + err_badarg(); return NULL; - wsetfont(getstringvalue(str)); + } + if (is_stringobject(args)) { + font = args; + style = NULL; + size = 0; + } + else if (is_tupleobject(args)) { + int n = gettuplesize(args); + if (n == 2) { + if (!getstrintarg(args, &font, &size)) + return NULL; + style = NULL; + } + else if (!getstrstrintarg(args, &font, &style, &size)) + return NULL; + } + else { + err_badarg(); + return NULL; + } + if (getstringsize(font) != 0) + wsetfont(getstringvalue(font)); + if (style != NULL) { + switch (*getstringvalue(style)) { + case 'b': + wsetbold(); + break; + case 'i': + wsetitalic(); + break; + case 'o': + wsetbolditalic(); + break; + case 'u': + wsetunderline(); + break; + default: + wsetplain(); + break; + } + } + if (size != 0) + wsetsize(size); INCREF(None); return None; }