diff options
Diffstat (limited to 'rdtk/librdtk/rdtk_label.c')
-rw-r--r-- | rdtk/librdtk/rdtk_label.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/rdtk/librdtk/rdtk_label.c b/rdtk/librdtk/rdtk_label.c new file mode 100644 index 0000000..298bf17 --- /dev/null +++ b/rdtk/librdtk/rdtk_label.c @@ -0,0 +1,99 @@ +/** + * RdTk: Remote Desktop Toolkit + * + * Copyright 2014 Marc-Andre Moreau <marcandre.moreau@gmail.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <winpr/assert.h> + +#include <rdtk/config.h> + +#include "rdtk_font.h" + +#include "rdtk_label.h" + +int rdtk_label_draw(rdtkSurface* surface, uint16_t nXDst, uint16_t nYDst, uint16_t nWidth, + uint16_t nHeight, rdtkLabel* label, const char* text, uint16_t hAlign, + uint16_t vAlign) +{ + uint16_t offsetX = 0; + uint16_t offsetY = 0; + uint16_t textWidth = 0; + uint16_t textHeight = 0; + + WINPR_ASSERT(surface); + + rdtkEngine* engine = surface->engine; + rdtkFont* font = engine->font; + + rdtk_font_text_draw_size(font, &textWidth, &textHeight, text); + + if ((textWidth > 0) && (textHeight > 0)) + { + offsetX = 0; + offsetY = 0; + + if (textWidth < nWidth) + offsetX = ((nWidth - textWidth) / 2); + + if (textHeight < nHeight) + offsetY = ((nHeight - textHeight) / 2); + + rdtk_font_draw_text(surface, nXDst + offsetX, nYDst + offsetY, font, text); + } + + return 1; +} + +rdtkLabel* rdtk_label_new(rdtkEngine* engine) +{ + WINPR_ASSERT(engine); + rdtkLabel* label = (rdtkLabel*)calloc(1, sizeof(rdtkLabel)); + + if (!label) + return NULL; + + label->engine = engine; + + return label; +} + +void rdtk_label_free(rdtkLabel* label) +{ + free(label); +} + +int rdtk_label_engine_init(rdtkEngine* engine) +{ + WINPR_ASSERT(engine); + if (!engine->label) + { + engine->label = rdtk_label_new(engine); + } + + return 1; +} + +int rdtk_label_engine_uninit(rdtkEngine* engine) +{ + WINPR_ASSERT(engine); + if (engine->label) + { + rdtk_label_free(engine->label); + engine->label = NULL; + } + + return 1; +} |