mirror of
https://github.com/davatorium/rofi.git
synced 2025-07-31 21:59:25 -04:00
parent
798379551f
commit
7c331b130b
5 changed files with 54 additions and 7 deletions
|
@ -364,11 +364,13 @@ width: calc( 100% - 37px );
|
||||||
|
|
||||||
It supports the following operations:
|
It supports the following operations:
|
||||||
|
|
||||||
* `+`: Add
|
* `+` : Add
|
||||||
* `-`: Subtract
|
* `-` : Subtract
|
||||||
* `/`: Divide
|
* `/` : Divide
|
||||||
* `*`: Multiply
|
* `*` : Multiply
|
||||||
* `%`: Multiply
|
* `%` : Multiply
|
||||||
|
* `min` : Minimum of l or rvalue;
|
||||||
|
* `max` : Maximum of l or rvalue;
|
||||||
|
|
||||||
It uses the C precedence ordering.
|
It uses the C precedence ordering.
|
||||||
|
|
||||||
|
|
|
@ -102,6 +102,8 @@ typedef enum
|
||||||
ROFI_DISTANCE_MODIFIER_MULTIPLY,
|
ROFI_DISTANCE_MODIFIER_MULTIPLY,
|
||||||
ROFI_DISTANCE_MODIFIER_MODULO,
|
ROFI_DISTANCE_MODIFIER_MODULO,
|
||||||
ROFI_DISTANCE_MODIFIER_GROUP,
|
ROFI_DISTANCE_MODIFIER_GROUP,
|
||||||
|
ROFI_DISTANCE_MODIFIER_MIN,
|
||||||
|
ROFI_DISTANCE_MODIFIER_MAX,
|
||||||
} RofiDistanceModifier;
|
} RofiDistanceModifier;
|
||||||
|
|
||||||
typedef struct RofiDistanceUnit
|
typedef struct RofiDistanceUnit
|
||||||
|
|
|
@ -189,6 +189,8 @@ ENV $\{[[:alnum:]]*\}
|
||||||
MODIFIER_ADD \+
|
MODIFIER_ADD \+
|
||||||
MODIFIER_SUBTRACT -
|
MODIFIER_SUBTRACT -
|
||||||
MODIFIER_MULTIPLY \*
|
MODIFIER_MULTIPLY \*
|
||||||
|
MODIFIER_MIN (min)
|
||||||
|
MODIFIER_MAX (max)
|
||||||
|
|
||||||
/* Position */
|
/* Position */
|
||||||
CENTER (?i:center)
|
CENTER (?i:center)
|
||||||
|
@ -463,6 +465,8 @@ if ( queue == NULL ){
|
||||||
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{MODIFIER_ADD} { return T_MODIFIER_ADD; }
|
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{MODIFIER_ADD} { return T_MODIFIER_ADD; }
|
||||||
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{MODIFIER_SUBTRACT} { return T_MODIFIER_SUBTRACT; }
|
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{MODIFIER_SUBTRACT} { return T_MODIFIER_SUBTRACT; }
|
||||||
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{MODIFIER_MULTIPLY} { return T_MODIFIER_MULTIPLY; }
|
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{MODIFIER_MULTIPLY} { return T_MODIFIER_MULTIPLY; }
|
||||||
|
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{MODIFIER_MIN} { return T_MODIFIER_MIN; }
|
||||||
|
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{MODIFIER_MAX} { return T_MODIFIER_MAX; }
|
||||||
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{CALC} { return T_CALC; }
|
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{CALC} { return T_CALC; }
|
||||||
|
|
||||||
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{ENV} {
|
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{ENV} {
|
||||||
|
|
|
@ -218,6 +218,9 @@ static ThemeColor hwb_to_rgb ( double h, double w, double b)
|
||||||
%token T_MODIFIER_SUBTRACT "Subtract ('-')"
|
%token T_MODIFIER_SUBTRACT "Subtract ('-')"
|
||||||
%token T_MODIFIER_MULTIPLY "Multiply ('*')"
|
%token T_MODIFIER_MULTIPLY "Multiply ('*')"
|
||||||
|
|
||||||
|
%token T_MODIFIER_MAX "Max ('max')"
|
||||||
|
%token T_MODIFIER_MIN "Min ('min')"
|
||||||
|
|
||||||
%token T_CALC "calc"
|
%token T_CALC "calc"
|
||||||
|
|
||||||
%token T_BOPEN "bracket open ('{')"
|
%token T_BOPEN "bracket open ('{')"
|
||||||
|
@ -261,6 +264,7 @@ static ThemeColor hwb_to_rgb ( double h, double w, double b)
|
||||||
%type <distance> t_property_distance_zero
|
%type <distance> t_property_distance_zero
|
||||||
%type <distance_unit> t_property_distance_unit_math
|
%type <distance_unit> t_property_distance_unit_math
|
||||||
%type <distance_unit> t_property_distance_unit_math2
|
%type <distance_unit> t_property_distance_unit_math2
|
||||||
|
%type <distance_unit> t_property_distance_unit_math3
|
||||||
%type <distance_unit> t_property_distance_unit
|
%type <distance_unit> t_property_distance_unit
|
||||||
%type <ival> t_property_unit
|
%type <ival> t_property_unit
|
||||||
%type <wloc> t_property_position
|
%type <wloc> t_property_position
|
||||||
|
@ -601,7 +605,7 @@ t_property_distance_unit
|
||||||
$$->right = NULL;
|
$$->right = NULL;
|
||||||
$$->modtype = ROFI_DISTANCE_MODIFIER_NONE;
|
$$->modtype = ROFI_DISTANCE_MODIFIER_NONE;
|
||||||
}
|
}
|
||||||
| T_PARENT_LEFT t_property_distance_unit_math2 T_PARENT_RIGHT {
|
| T_PARENT_LEFT t_property_distance_unit_math3 T_PARENT_RIGHT {
|
||||||
$$ = g_slice_new0(RofiDistanceUnit);
|
$$ = g_slice_new0(RofiDistanceUnit);
|
||||||
$$->distance = 0;
|
$$->distance = 0;
|
||||||
$$->type = ROFI_PU_PX;
|
$$->type = ROFI_PU_PX;
|
||||||
|
@ -655,6 +659,23 @@ t_property_distance_unit_math2
|
||||||
| t_property_distance_unit_math {
|
| t_property_distance_unit_math {
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
};
|
};
|
||||||
|
/** Level 3 (min max)*/
|
||||||
|
t_property_distance_unit_math3
|
||||||
|
: t_property_distance_unit_math3 T_MODIFIER_MIN t_property_distance_unit_math2 {
|
||||||
|
$$ = g_slice_new0(RofiDistanceUnit);
|
||||||
|
$$->left = $1;
|
||||||
|
$$->right = $3;
|
||||||
|
$$->modtype = ROFI_DISTANCE_MODIFIER_MIN;
|
||||||
|
}
|
||||||
|
| t_property_distance_unit_math3 T_MODIFIER_MAX t_property_distance_unit_math2 {
|
||||||
|
$$ = g_slice_new0(RofiDistanceUnit);
|
||||||
|
$$->left = $1;
|
||||||
|
$$->right = $3;
|
||||||
|
$$->modtype = ROFI_DISTANCE_MODIFIER_MAX;
|
||||||
|
}
|
||||||
|
| t_property_distance_unit_math2 {
|
||||||
|
$$ = $1;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
t_property_distance
|
t_property_distance
|
||||||
|
@ -676,7 +697,7 @@ t_property_distance
|
||||||
$$.base.right = NULL;
|
$$.base.right = NULL;
|
||||||
$$.style = $3;
|
$$.style = $3;
|
||||||
}
|
}
|
||||||
| T_CALC T_PARENT_LEFT t_property_distance_unit_math2 T_PARENT_RIGHT t_property_line_style {
|
| T_CALC T_PARENT_LEFT t_property_distance_unit_math3 T_PARENT_RIGHT t_property_line_style {
|
||||||
$$.base.distance = 0;
|
$$.base.distance = 0;
|
||||||
$$.base.type = ROFI_PU_PX;
|
$$.base.type = ROFI_PU_PX;
|
||||||
$$.base.left = $3;
|
$$.base.left = $3;
|
||||||
|
|
|
@ -297,6 +297,12 @@ static void rofi_theme_print_distance_unit ( RofiDistanceUnit *unit )
|
||||||
else if ( unit->modtype == ROFI_DISTANCE_MODIFIER_MODULO ) {
|
else if ( unit->modtype == ROFI_DISTANCE_MODIFIER_MODULO ) {
|
||||||
fputs ( " % ", stdout );
|
fputs ( " % ", stdout );
|
||||||
}
|
}
|
||||||
|
else if ( unit->modtype == ROFI_DISTANCE_MODIFIER_MIN ) {
|
||||||
|
fputs ( " min ", stdout );
|
||||||
|
}
|
||||||
|
else if ( unit->modtype == ROFI_DISTANCE_MODIFIER_MAX ) {
|
||||||
|
fputs ( " max ", stdout );
|
||||||
|
}
|
||||||
if ( unit->right ) {
|
if ( unit->right ) {
|
||||||
rofi_theme_print_distance_unit ( unit->right );
|
rofi_theme_print_distance_unit ( unit->right );
|
||||||
}
|
}
|
||||||
|
@ -998,6 +1004,18 @@ static int distance_unit_get_pixel ( RofiDistanceUnit *unit, RofiOrientation ori
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
case ROFI_DISTANCE_MODIFIER_MIN:
|
||||||
|
{
|
||||||
|
int a = distance_unit_get_pixel ( unit->left, ori );
|
||||||
|
int b = distance_unit_get_pixel ( unit->right, ori );
|
||||||
|
return MIN(a,b);
|
||||||
|
}
|
||||||
|
case ROFI_DISTANCE_MODIFIER_MAX:
|
||||||
|
{
|
||||||
|
int a = distance_unit_get_pixel ( unit->left, ori );
|
||||||
|
int b = distance_unit_get_pixel ( unit->right, ori );
|
||||||
|
return MAX(a,b);
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue