Skip to content

Commit

Permalink
s/offset/rotation/g
Browse files Browse the repository at this point in the history
  • Loading branch information
Zabot committed Aug 6, 2022
1 parent c7b6014 commit 4920faf
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 21 deletions.
2 changes: 1 addition & 1 deletion i3lock-zsh
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ _i3lock() {
"--bar-total-width[The total width of the bar]:float:"
# Polygon indicator
"--polygon-sides[Draws the indicator as a regular polygon]:int:"
"--polygon-offset[Rotates the indicator polygon]:float:"
"--polygon-rotation[Rotates the indicator polygon]:float:"
"--polygon-highlight[Sets the polygon highlight mode]:mode:((0\:'random' 1\:'clockwise' 2\:'counterclockwise'))"
# Extra configs
"--redraw-thread[Starts a separate thread for redrawing the screen]"
Expand Down
7 changes: 3 additions & 4 deletions i3lock.1
Original file line number Diff line number Diff line change
Expand Up @@ -445,12 +445,11 @@ Sets the number of minibars to draw on each screen.
The total width of the bar. Can be an expression.

.TP
.B \-\-polygon\-sides=0
If set to an integer greater then 2, draw the indicator as a regular polygon
instead of a circle.
.B \-\-polygon\-sides
Draw the indicator as a regular polygon instead of a circle.

.TP
.B \-\-polygon\-offset=degrees\-as\-double
.B \-\-polygon\-rotation=degrees\-as\-double
The angle to rotate the indicator polygon by.

.TP
Expand Down
18 changes: 8 additions & 10 deletions i3lock.c
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ bool bar_reversed = false;

// Polygon indicator
int polygon_sides = 0;
double polygon_offset = 0;
double polygon_rotation = 0;
int polygon_highlight = 0;

/* isutf, u8_dec © 2005 Jeff Bezanson, public domain */
Expand Down Expand Up @@ -1499,7 +1499,7 @@ int main(int argc, char *argv[]) {
{"radius", required_argument, NULL, 402},
{"ring-width", required_argument, NULL, 403},
{"polygon-sides", required_argument, NULL, 404},
{"polygon-offset", required_argument, NULL, 405},
{"polygon-rotation", required_argument, NULL, 405},
{"polygon-highlight", required_argument, NULL, 406},

// alignment
Expand Down Expand Up @@ -1822,17 +1822,15 @@ int main(int argc, char *argv[]) {
case 404:
arg = optarg;
if (sscanf(arg, "%d", &polygon_sides) != 1)
errx(1, "polygon-sides must be a number\n");
if (polygon_sides < 3 && polygon_sides != 0) {
fprintf(stderr, "polygon-sides must be greater then 2 or 0; ignoring...\n");
polygon_sides = 0;
}
errx(EXIT_FAILURE, "polygon-sides must be a number\n");
if (polygon_sides < 3)
errx(EXIT_FAILURE, "polygon-sides must be greater then 2 or 0\n");
break;
case 405:
arg = optarg;
if (sscanf(arg, "%lf", &polygon_offset) != 1)
errx(1, "polygon-offset must be a number\n");
polygon_offset = polygon_offset * (M_PI / 180);
if (sscanf(arg, "%lf", &polygon_rotation) != 1)
errx(1, "polygon-rotation must be a number\n");
polygon_rotation = polygon_rotation * (M_PI / 180);
break;
case 406:
arg = optarg;
Expand Down
22 changes: 16 additions & 6 deletions unlock_indicator.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ extern bool bar_reversed;

// Polygon indicator
extern int polygon_sides;
extern double polygon_offset;
extern double polygon_rotation;
extern int polygon_highlight;

static cairo_font_face_t *font_faces[6] = {
Expand Down Expand Up @@ -523,11 +523,21 @@ static void draw_bar(cairo_t *ctx, double bar_x, double bar_y, double bar_width,
cairo_restore(ctx);
}

void draw_polygon(cairo_t *ctx, double center_x, double center_y, double radius, int points, int start, int end, double offset) {
/* Draw some number of edges of a polygon
* center_x/center_y: The center of the polygon
* radius: The distance from the center to the vertices
* points: The number of verticies
* start/end: The index of the edges to draw. Settings start to 0 and end to
* points will draw the entire polygon. Edges are indexed counter
* clockwise around the polygon.
* angle_offset: How far offset clockwise the first vertex is from the positive
* x axis (radians).
*/
void draw_polygon(cairo_t *ctx, double center_x, double center_y, double radius, int points, int start, int end, double angle_offset) {
int count = end - start;

for (int v = 0; v < count + 1; v++) {
double theta = (start + v) * ((M_PI * 2) / points) + offset;
double theta = (start + v) * ((M_PI * 2) / points) + angle_offset;

int x = radius * cos(theta);
int y = radius * sin(theta);
Expand All @@ -545,7 +555,7 @@ static void draw_indic(cairo_t *ctx, double ind_x, double ind_y) {
/* Draw a (centered) circle with transparent background. */
cairo_set_line_width(ctx, RING_WIDTH);
if (polygon_sides > 0)
draw_polygon(ctx, ind_x, ind_y, BUTTON_RADIUS, polygon_sides, 0, polygon_sides, polygon_offset);
draw_polygon(ctx, ind_x, ind_y, BUTTON_RADIUS, polygon_sides, 0, polygon_sides, polygon_rotation);
else
cairo_arc(ctx, ind_x, ind_y, BUTTON_RADIUS, 0, 2 * M_PI);

Expand Down Expand Up @@ -618,7 +628,7 @@ static void draw_indic(cairo_t *ctx, double ind_x, double ind_y) {
cairo_set_source_rgba(ctx, line16.red, line16.green, line16.blue, line16.alpha);
cairo_set_line_width(ctx, 2.0);
if (polygon_sides > 0)
draw_polygon(ctx, ind_x, ind_y, BUTTON_RADIUS - 5, polygon_sides, 0, polygon_sides, polygon_offset);
draw_polygon(ctx, ind_x, ind_y, BUTTON_RADIUS - 5, polygon_sides, 0, polygon_sides, polygon_rotation);
else
cairo_arc(ctx, ind_x, ind_y, BUTTON_RADIUS - 5, 0, 2 * M_PI);
cairo_stroke(ctx);
Expand All @@ -643,7 +653,7 @@ static void draw_indic(cairo_t *ctx, double ind_x, double ind_y) {
highlight_start = input_position % polygon_sides;
else if(polygon_highlight == 2)
highlight_start = -input_position % polygon_sides;
draw_polygon(ctx, ind_x, ind_y, BUTTON_RADIUS, polygon_sides, highlight_start, highlight_start+1, polygon_offset);
draw_polygon(ctx, ind_x, ind_y, BUTTON_RADIUS, polygon_sides, highlight_start, highlight_start+1, polygon_rotation);
cairo_stroke(ctx);
return;
}
Expand Down

0 comments on commit 4920faf

Please sign in to comment.