// // Button - OnDraw event. // int EZ_button_OnDraw(ez_control_t *self, void *ext_event_info) { ez_button_t *button = (ez_button_t *)self; int x, y; EZ_control_GetDrawingPosition(self, &x, &y); // Run the super class's implementation first. EZ_control_OnDraw(self, NULL); if (self->int_flags & control_focused) { if (button->ext_flags & button_use_images) { } else { Draw_AlphaRectangleRGB(x, y, self->width, self->height, 1, false, RGBAVECT_TO_COLOR(button->color_focused)); } } // Draw control specifics. CONTROL_EVENT_HANDLER_CALL(NULL, self, ez_control_t, OnDraw, NULL); return 0; }
// // Label - Draws a label control. // int EZ_label_OnDraw(ez_control_t *self, void *ext_event_info) { int x, y, i = 0; char line[LABEL_LINE_SIZE]; ez_label_t *label = (ez_label_t *)self; int scaled_char_size = label->scaled_char_size; int last_index = -1; int curr_row = 0; int curr_col = 0; clrinfo_t text_color = {RGBA_TO_COLOR(255, 255, 255, 255), 0}; // TODO : Set this in the struct instead. color_t selection_color = RGBA_TO_COLOR(178, 0, 255, 125); color_t caret_color = RGBA_TO_COLOR(255, 0, 0, 125); // Let the super class draw first. EZ_control_OnDraw(self, NULL); // Get the position we're drawing at. EZ_control_GetDrawingPosition(self, &x, &y); // Find any newlines and draw line by line. for (i = 0; i <= label->text_length; i++) { // Draw selection markers. if (label->ext_flags & label_selectable) { if (((label->select_start > -1) && (label->select_end > -1) // Is something selected at all? && (label->select_end != label->select_start)) // Only highlight if we have at least 1 char selected. && (((i >= label->select_start) && (i < label->select_end)) // Is this index selected? || ((i >= label->select_end) && (i < label->select_start))) ) { // If this is one of the selected letters, draw a selection thingie behind it. // TODO : Make this an XOR drawing ontop of the text instead? Draw_AlphaFillRGB( x + (curr_col * scaled_char_size), y + (curr_row * scaled_char_size), scaled_char_size, scaled_char_size, selection_color); } if (i == label->caret_pos.index) { // Draw the caret. Draw_AlphaFillRGB( x + (curr_col * scaled_char_size), y + (curr_row * scaled_char_size), max(5, Q_rint(scaled_char_size * 0.1)), scaled_char_size, caret_color); } } if (i == label->wordwraps[curr_row].index || label->text[i] == '\0') { // We found the end of a line, copy the contents of the line to the line buffer. snprintf(line, min(LABEL_LINE_SIZE, (i - last_index) + 1), "%s", (label->text + last_index + 1)); last_index = i; // Skip the newline character if (label->ext_flags & label_largefont) { Draw_BigString(x, y + (curr_row * scaled_char_size), line, &text_color, 1, label->scale, 1, 0); } else { Draw_SColoredString(x, y + (curr_row * scaled_char_size), str2wcs(line), &text_color, 1, false, label->scale); } curr_row++; curr_col = 0; } else { curr_col++; } } // TODO : Remove this test stuff. { char tmp[1024]; int sublen = abs(label->select_end - label->select_start); if (sublen > 0) { snprintf(tmp, sublen + 1, "%s", label->text + min(label->select_start, label->select_end)); Draw_String(x + (self->width / 2), y + (self->height / 2) + 8, tmp); } } CONTROL_EVENT_HANDLER_CALL(NULL, self, ez_control_t, OnDraw, NULL); return 0; }