mirror of https://gitlab.com/nakst/essence
				
				
				
			show glyph preview in font editor glyphs table
This commit is contained in:
		
							parent
							
								
									3acd4472aa
								
							
						
					
					
						commit
						af7ed68c81
					
				| 
						 | 
					@ -236,7 +236,19 @@ void DeleteGlyph(void *cp) {
 | 
				
			||||||
	UIElementRefresh(kerning);
 | 
						UIElementRefresh(kerning);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DrawGlyph(UIPainter *painter, Glyph *g, int _x, int _y) {
 | 
				
			||||||
 | 
						for (int y = g->y0; y <= g->y1; y++) {
 | 
				
			||||||
 | 
							for (int x = g->x0; x <= g->x1; x++) {
 | 
				
			||||||
 | 
								if (g->bits[y][x]) {
 | 
				
			||||||
 | 
									UIDrawBlock(painter, UI_RECT_4(_x + x - g->xOrigin, _x + x + 1 - g->xOrigin, _y + y - g->yOrigin, _y + y + 1 - g->yOrigin), 0xFF000000);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int GlyphsTableMessage(UIElement *element, UIMessage message, int di, void *dp) {
 | 
					int GlyphsTableMessage(UIElement *element, UIMessage message, int di, void *dp) {
 | 
				
			||||||
 | 
						UITable *table = (UITable *) element;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (message == UI_MSG_TABLE_GET_ITEM) {
 | 
						if (message == UI_MSG_TABLE_GET_ITEM) {
 | 
				
			||||||
		UITableGetItem *m = (UITableGetItem *) dp;
 | 
							UITableGetItem *m = (UITableGetItem *) dp;
 | 
				
			||||||
		m->isSelected = selectedGlyph == m->index;
 | 
							m->isSelected = selectedGlyph == m->index;
 | 
				
			||||||
| 
						 | 
					@ -251,7 +263,7 @@ int GlyphsTableMessage(UIElement *element, UIMessage message, int di, void *dp)
 | 
				
			||||||
			return snprintf(m->buffer, m->bufferBytes, "U+%.4X", glyphsArray[m->index].number);
 | 
								return snprintf(m->buffer, m->bufferBytes, "U+%.4X", glyphsArray[m->index].number);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else if (message == UI_MSG_LEFT_DOWN || message == UI_MSG_MOUSE_DRAG) {
 | 
						} else if (message == UI_MSG_LEFT_DOWN || message == UI_MSG_MOUSE_DRAG) {
 | 
				
			||||||
		int index = UITableHitTest((UITable *) element, element->window->cursorX, element->window->cursorY);
 | 
							int index = UITableHitTest(table, element->window->cursorX, element->window->cursorY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (index != -1) {
 | 
							if (index != -1) {
 | 
				
			||||||
			selectedGlyph = index;
 | 
								selectedGlyph = index;
 | 
				
			||||||
| 
						 | 
					@ -259,21 +271,33 @@ int GlyphsTableMessage(UIElement *element, UIMessage message, int di, void *dp)
 | 
				
			||||||
			UIElementMessage(&tabPane->e, UI_MSG_LAYOUT, 0, 0);
 | 
								UIElementMessage(&tabPane->e, UI_MSG_LAYOUT, 0, 0);
 | 
				
			||||||
			UIElementRepaint(&tabPane->e, NULL);
 | 
								UIElementRepaint(&tabPane->e, NULL);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						} else if (message == UI_MSG_PAINT) {
 | 
				
			||||||
 | 
							element->messageClass(element, message, di, dp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							UIPainter *painter = (UIPainter *) dp;
 | 
				
			||||||
 | 
							UIRectangle oldClip = painter->clip;
 | 
				
			||||||
 | 
							UIRectangle bounds = element->bounds;
 | 
				
			||||||
 | 
							bounds.t += UI_SIZE_TABLE_HEADER * element->window->scale;
 | 
				
			||||||
 | 
							bounds.r -= UI_SIZE_SCROLL_BAR * element->window->scale;
 | 
				
			||||||
 | 
							painter->clip = UIRectangleIntersection(painter->clip, bounds);
 | 
				
			||||||
 | 
							UIRectangle row = bounds;
 | 
				
			||||||
 | 
							int rowHeight = UI_SIZE_TABLE_ROW * element->window->scale;
 | 
				
			||||||
 | 
							row.t -= (int64_t) table->vScroll->position % rowHeight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for (int i = table->vScroll->position / rowHeight; i < table->itemCount; i++) {
 | 
				
			||||||
 | 
								if (row.t > element->clip.b) break;
 | 
				
			||||||
 | 
								row.b = row.t + rowHeight;
 | 
				
			||||||
 | 
								DrawGlyph(painter, &glyphsArray[i], row.r - 50, row.b - 8);
 | 
				
			||||||
 | 
								row.t += rowHeight;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							painter->clip = oldClip;
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DrawGlyph(UIPainter *painter, Glyph *g, int _x, int _y) {
 | 
					 | 
				
			||||||
	for (int y = g->y0; y <= g->y1; y++) {
 | 
					 | 
				
			||||||
		for (int x = g->x0; x <= g->x1; x++) {
 | 
					 | 
				
			||||||
			if (g->bits[y][x]) {
 | 
					 | 
				
			||||||
				UIDrawBlock(painter, UI_RECT_4(_x + x - g->xOrigin, _x + x + 1 - g->xOrigin, _y + y - g->yOrigin, _y + y + 1 - g->yOrigin), 0xFF000000);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void SetOrigin(void *cp) {
 | 
					void SetOrigin(void *cp) {
 | 
				
			||||||
	Glyph *g = &glyphsArray[selectedGlyph];
 | 
						Glyph *g = &glyphsArray[selectedGlyph];
 | 
				
			||||||
	g->xOrigin = selectedPixelX;
 | 
						g->xOrigin = selectedPixelX;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue