[Bf-blender-cvs] [003e4e6b80b] blender2.8: Top-bar: Don't draw horizontal region separator
Julian Eisel
noreply at git.blender.org
Sat Apr 21 18:46:09 CEST 2018
Commit: 003e4e6b80b758ef96faa7d1de539dbc306a7d83
Author: Julian Eisel
Date: Sat Apr 21 17:15:39 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB003e4e6b80b758ef96faa7d1de539dbc306a7d83
Top-bar: Don't draw horizontal region separator
That way the tabs look nicely together with the lower sub-bar.
===================================================================
M source/blender/editors/screen/area.c
===================================================================
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 3eee303cf54..e4c48a83565 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -77,9 +77,17 @@
extern void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3, const float color[4]); /* xxx temp */
+enum RegionEmbossSide {
+ REGION_EMBOSS_LEFT = (1 << 0),
+ REGION_EMBOSS_TOP = (1 << 1),
+ REGION_EMBOSS_BOTTOM = (1 << 2),
+ REGION_EMBOSS_RIGHT = (1 << 3),
+ REGION_EMBOSS_ALL = REGION_EMBOSS_LEFT | REGION_EMBOSS_TOP | REGION_EMBOSS_RIGHT | REGION_EMBOSS_BOTTOM,
+};
+
/* general area and region code */
-static void region_draw_emboss(const ARegion *ar, const rcti *scirct)
+static void region_draw_emboss(const ARegion *ar, const rcti *scirct, int sides)
{
rcti rect;
@@ -98,26 +106,36 @@ static void region_draw_emboss(const ARegion *ar, const rcti *scirct)
unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
- immBegin(GWN_PRIM_LINE_STRIP, 5);
-
- /* right */
- immAttrib4ub(color, 0, 0, 0, 30);
- immVertex2f(pos, rect.xmax, rect.ymax);
- immAttrib4ub(color, 0, 0, 0, 30);
- immVertex2f(pos, rect.xmax, rect.ymin);
-
- /* bottom */
- immAttrib4ub(color, 0, 0, 0, 30);
- immVertex2f(pos, rect.xmin, rect.ymin);
-
- /* left */
- immAttrib4ub(color, 255, 255, 255, 30);
- immVertex2f(pos, rect.xmin, rect.ymax);
+ immBeginAtMost(GWN_PRIM_LINES, 8);
+
+ /* right */
+ if (sides & REGION_EMBOSS_RIGHT) {
+ immAttrib4ub(color, 0, 0, 0, 30);
+ immVertex2f(pos, rect.xmax, rect.ymax);
+ immVertex2f(pos, rect.xmax, rect.ymin);
+ }
+
+ /* bottom */
+ if (sides & REGION_EMBOSS_BOTTOM) {
+ immAttrib4ub(color, 0, 0, 0, 30);
+ immVertex2f(pos, rect.xmax, rect.ymin);
+ immVertex2f(pos, rect.xmin, rect.ymin);
+ }
+
+ /* left */
+ if (sides & REGION_EMBOSS_LEFT) {
+ immAttrib4ub(color, 255, 255, 255, 30);
+ immVertex2f(pos, rect.xmin, rect.ymin);
+ immVertex2f(pos, rect.xmin, rect.ymax);
+ }
+
+ /* top */
+ if (sides & REGION_EMBOSS_TOP) {
+ immAttrib4ub(color, 255, 255, 255, 30);
+ immVertex2f(pos, rect.xmin, rect.ymax);
+ immVertex2f(pos, rect.xmax, rect.ymax);
+ }
- /* top */
- immAttrib4ub(color, 255, 255, 255, 30);
- immVertex2f(pos, rect.xmax, rect.ymax);
-
immEnd();
immUnbindProgram();
@@ -594,7 +612,12 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
/* disable emboss when the area is full,
* unless we need to see division between regions (quad-split for eg) */
if (((screen->state == SCREENFULL) && (ar->alignment == RGN_ALIGN_NONE)) == 0) {
- region_draw_emboss(ar, &ar->winrct);
+ /* Don't draw horizontal separators in the top-bar to make the tabs
+ * look nice with the lower sub-bar. Obviously, a more generic
+ * solution would be preferable, e.g. a dedicated RGN_TYPE_TABS
+ * region type, but for now keeping it simple. */
+ int emboss_sides = ED_area_is_global(sa) ? (REGION_EMBOSS_LEFT | REGION_EMBOSS_RIGHT) : REGION_EMBOSS_ALL;
+ region_draw_emboss(ar, &ar->winrct, emboss_sides);
}
}
More information about the Bf-blender-cvs
mailing list