/* ============ Brush_LoadEntity ============ */ brushset_t *Brush_LoadEntity (entity_t *ent, int hullnum) { brush_t *b, *next, *water, *other; mbrush_t *mbr; int numbrushes; brushset_t *bset; bset = malloc (sizeof(brushset_t)); memset (bset, 0, sizeof(brushset_t)); ClearBounds (bset); numbrushes = 0; other = water = NULL; qprintf ("--- Brush_LoadEntity ---\n"); for (mbr = ent->brushes ; mbr ; mbr=mbr->next) { b = LoadBrush (mbr, hullnum); if (!b) continue; numbrushes++; if (b->contents != CONTENTS_SOLID) { b->next = water; water = b; } else { b->next = other; other = b; } AddToBounds (bset, b->mins); AddToBounds (bset, b->maxs); } // add all of the water textures at the start for (b=water ; b ; b=next) { next = b->next; b->next = other; other = b; } bset->brushes = other; brushset = bset; Brush_DrawAll (bset); qprintf ("%i brushes read\n",numbrushes); return bset; }
/* ============ Brush_LoadEntity ============ */ void Brush_LoadEntity (entity_t *ent, tree_t *tree, int hullnum) { mbrush_t *mbr; int brushnum, numbrushes; brush_t *b, *next, *water, *other; numbrushes = 0; other = water = NULL; qprintf ("--- Brush_LoadEntity ---\n"); CurrentEntity = ent; for (mbr = ent->brushes, brushnum = 0; mbr; mbr=mbr->next, brushnum++) { b = LoadBrush (mbr, brushnum, hullnum); if (!b) continue; numbrushes++; if (b->contents != CONTENTS_SOLID) { b->next = water; water = b; } else { b->next = other; other = b; } AddPointToBounds (b->mins, tree->mins, tree->maxs); AddPointToBounds (b->maxs, tree->mins, tree->maxs); } // add all of the water textures at the start for (b=water ; b ; b=next) { next = b->next; b->next = other; other = b; } tree->brushes = other; qprintf( "%i brushes read\n", numbrushes ); }
// Paints the tabs that intersect the window's update rectangle. void Paint(HDC hdc, RECT &rc) { IntersectClipRect(hdc, rc.left, rc.top, rc.right, rc.bottom); // paint the background bool isTranslucentMode = inTitlebar && dwm::IsCompositionEnabled(); if (isTranslucentMode) PaintParentBackground(hwnd, hdc); else { HBRUSH brush = CreateSolidBrush(color.bar); FillRect(hdc, &rc, brush); DeleteObject(brush); } // TODO: GDI+ doesn't seem to cope well with SetWorldTransform XFORM ctm = { 1.0, 0, 0, 1.0, 0, 0 }; SetWorldTransform(hdc, &ctm); Graphics graphics(hdc); graphics.SetCompositingMode(CompositingModeSourceCopy); graphics.SetCompositingQuality(CompositingQualityHighQuality); graphics.SetSmoothingMode(SmoothingModeHighQuality); graphics.SetTextRenderingHint(TextRenderingHintClearTypeGridFit); graphics.SetPageUnit(UnitPixel); GraphicsPath shapes(data->Points, data->Types, data->Count); GraphicsPath shape; GraphicsPathIterator iterator(&shapes); SolidBrush br(Color(0, 0, 0)); Pen pen(&br); Font f(hdc, GetDefaultGuiFont()); // TODO: adjust these constant values for DPI? RectF layout(3.0f, 1.0f, REAL(width - 20), (REAL)height); StringFormat sf(StringFormat::GenericDefault()); sf.SetFormatFlags(StringFormatFlagsNoWrap); sf.SetLineAlignment(StringAlignmentCenter); sf.SetTrimming(StringTrimmingEllipsisCharacter); REAL yPosTab = inTitlebar ? 0.0f : REAL(ClientRect(hwnd).dy - height - 1); for (int i = 0; i < Count(); i++) { graphics.ResetTransform(); graphics.TranslateTransform(1.f + (REAL)(width + 1) * i - (REAL)rc.left, yPosTab - (REAL)rc.top); if (!graphics.IsVisible(0, 0, width + 1, height + 1)) continue; // in firefox style we only paint current and highlighed tabs // all other tabs only show bool onlyText = g_FirefoxStyle && !((current == i) || (highlighted == i)); if (onlyText) { #if 0 // we need to first paint the background with the same color as caption, // otherwise the text looks funny (because is transparent?) // TODO: what is the damn bg color of caption? bar is too light, outline is too dark Color bgColTmp; bgColTmp.SetFromCOLORREF(color.bar); { SolidBrush bgBr(bgColTmp); graphics.FillRectangle(&bgBr, layout); } bgColTmp.SetFromCOLORREF(color.outline); { SolidBrush bgBr(bgColTmp); graphics.FillRectangle(&bgBr, layout); } #endif // TODO: this is a hack. If use use no background and cleartype, the // text looks funny (is bold). // CompositingModeSourceCopy doesn't work with clear type // another option is to draw background before drawing text, but // I can't figure out what is the actual color of caption graphics.SetTextRenderingHint(TextRenderingHintAntiAliasGridFit); graphics.SetCompositingMode(CompositingModeSourceCopy); //graphics.SetCompositingMode(CompositingModeSourceOver); graphics.DrawString(text.At(i), -1, &f, layout, &sf, LoadBrush(br, color.text)); graphics.SetTextRenderingHint(TextRenderingHintClearTypeGridFit); continue; } COLORREF bgCol = color.background;; if (current == i) { bgCol = color.current; } else if (highlighted == i) { bgCol = color.highlight; } // paint tab's body graphics.SetCompositingMode(CompositingModeSourceCopy); iterator.NextMarker(&shape); LoadBrush(br, bgCol); graphics.FillPath(&br, &shape); // draw tab's text graphics.SetCompositingMode(CompositingModeSourceOver); graphics.DrawString(text.At(i), -1, &f, layout, &sf, LoadBrush(br, color.text)); // paint "x"'s circle iterator.NextMarker(&shape); if (xClicked == i) graphics.FillPath(LoadBrush(br, color.x_click), &shape); else if (xHighlighted == i) graphics.FillPath(LoadBrush(br, color.x_highlight), &shape); // paint "x" iterator.NextMarker(&shape); if (xClicked == i || xHighlighted == i) LoadPen(pen, color.x_line, 2.0f); else LoadPen(pen, color.outline, 2.0f); graphics.DrawPath(&pen, &shape); iterator.Rewind(); } }
/* ============ Brush_LoadEntity ============ */ brushset_t *Brush_LoadEntity (entity_t *ent, int hullnum) { brush_t *b, *next, *water, *other; mbrush_t *mbr; int numbrushes, TotalBrushes = 0; brushset_t *bset; CurrEnt = ent; bset = AllocOther (sizeof(brushset_t)); ClearBounds (bset); numbrushes = 0; other = water = NULL; Message (MSGVERBOSE, "------ Brush_LoadEntity ------"); for (mbr = ent->brushes; mbr; mbr = mbr->next) ++TotalBrushes; for (mbr = ent->brushes ; mbr ; mbr=mbr->next) { b = LoadBrush (mbr, hullnum); if (!b) continue; numbrushes++; if (b->contents != CONTENTS_SOLID) { b->next = water; water = b; } else { b->next = other; other = b; } AddToBounds (bset, b->mins); AddToBounds (bset, b->maxs); ShowBar(numbrushes, TotalBrushes); } ShowBar(-1, -1); // add all of the water textures at the start for (b=water ; b ; b=next) { next = b->next; b->next = other; other = b; } bset->brushes = other; brushset = bset; Message (MSGVERBOSE, "%6i brushes read",numbrushes); return bset; }