public override void RenderControl(Control c, IGraphics g) { for (int i = 0; i < styleNames.Count; i++) { List<Location> locs = styleLocations[i]; List<Path> paths = stylePaths[i]; if (styleNames[i] != (string)c.Style) continue; if (styleTypes[i] != c.GetType()) { if ((c.GetType().Assembly == Assembly.GetExecutingAssembly()) || !c.GetType().IsSubclassOf(styleTypes[i])) continue; } if ((styleStates[i] & c.State) != styleStates[i]) continue; PatternList plist = styleOperations[i]; for (int j = 0; j < plist.Count; j++) { g.Save(); Path path = (paths[j] != null) ? paths[j].Clone() : c.Path.Clone(); path.Control = c; if (locs[j] != null) { // This is a little hackish, but I can't think of a better way // Without reworking major chunks of the geometry classes Control tmp = new Control(); tmp.Path = path; tmp.Parent = c; path.Control = tmp; Location loc = locs[j].Clone(); loc.Control = tmp; g.Translate(loc.RealL, loc.RealT); loc.HandleRel(); path = tmp.Path.ClonePixels(); tmp.Parent = null; } path.Apply(g); plist[j].Apply(g, path.W, path.H); if (plist[j].Type == PatternType.Fill) g.Fill(); else g.Stroke(); g.Restore(); } } }
public override string[] GetStyles(Control c) { List<string> styles = new List<string>(); for (int i = 0; i < styleNames.Count; i++) { if (styleTypes[i] == c.GetType()) styles.Add(styleNames[i]); if ((c.GetType().Assembly != Assembly.GetExecutingAssembly()) && c.GetType().IsSubclassOf(styleTypes[i])) styles.Add(styleNames[i]); } return styles.ToArray(); }