@@ -10,7 +10,3 @@ | |||||
.kdev4/ | .kdev4/ | ||||
utils/lv2_ttl_generator | utils/lv2_ttl_generator | ||||
examples/dgl-app | |||||
examples/dgl-color | |||||
examples/dgl-images |
@@ -1,67 +0,0 @@ | |||||
#!/usr/bin/make -f | |||||
# Makefile for DPT examples # | |||||
# ------------------------- # | |||||
# Created by falkTX | |||||
# | |||||
include ../dgl/Makefile.mk | |||||
# -------------------------------------------------------------- | |||||
BUILD_CXX_FLAGS += -I../dgl | |||||
LINK_FLAGS += -L.. -ldgl $(DGL_LIBS) | |||||
# -------------------------------------------------------------- | |||||
ifeq ($(WIN32),true) | |||||
TARGETS = dgl-app.exe dgl-color.exe dgl-images.exe | |||||
else | |||||
TARGETS = dgl-app dgl-color dgl-images | |||||
endif | |||||
# -------------------------------------------------------------- | |||||
all: ../libdgl.a $(TARGETS) | |||||
clean: | |||||
$(MAKE) -C ../dgl clean | |||||
$(RM) $(TARGETS) | |||||
debug: | |||||
$(MAKE) DEBUG=true | |||||
# -------------------------------------------------------------- | |||||
%.exe: % | |||||
rm -f $*.exe | |||||
mv $* $*.exe | |||||
ln -sf $*.exe $* | |||||
../libdgl.a: .FORCE | |||||
$(MAKE) -C ../dgl | |||||
# -------------------------------------------------------------- | |||||
dgl-app: dgl-app.cpp ../dgl/* | |||||
$(CXX) $< $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -o $@ | |||||
dgl-color: dgl-color.cpp ../dgl/* | |||||
$(CXX) $< $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -o $@ | |||||
dgl-images: dgl-images.cpp dgl-images_src/* ../dgl/* | |||||
$(CXX) $< $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -o $@ | |||||
# -------------------------------------------------------------- | |||||
dgl-cairo: dgl-cairo.cpp ../dgl/* | |||||
$(CXX) $< $(BUILD_CXX_FLAGS) $(shell pkg-config --cflags --libs cairo) $(LINK_FLAGS) -o $@ | |||||
dgl-text: dgl-text.cpp ../dgl/* | |||||
$(CXX) $< $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -o $@ | |||||
# -------------------------------------------------------------- | |||||
.FORCE: | |||||
.PHONY: .FORCE | |||||
# -------------------------------------------------------------- |
@@ -1,3 +0,0 @@ | |||||
Examples for DGL, the OpenGL mini-toolkit used in DPF. | |||||
There are no plugin examples here, only test applications of OpenGL Stuff. |
@@ -1,43 +0,0 @@ | |||||
/* | |||||
* DISTRHO Plugin Framework (DPF) | |||||
* Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
* or without fee is hereby granted, provided that the above copyright notice and this | |||||
* permission notice appear in all copies. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
*/ | |||||
// ------------------------------------------------------ | |||||
// DGL Stuff | |||||
#include "App.hpp" | |||||
#include "Window.hpp" | |||||
// ------------------------------------------------------ | |||||
// use namespace | |||||
using namespace DGL; | |||||
// ------------------------------------------------------ | |||||
// main entry point | |||||
int main() | |||||
{ | |||||
App app; | |||||
Window win(app); | |||||
win.setTitle("App"); | |||||
win.show(); | |||||
app.exec(); | |||||
return 0; | |||||
} | |||||
// ------------------------------------------------------ |
@@ -1,149 +0,0 @@ | |||||
/* | |||||
* DISTRHO Plugin Framework (DPF) | |||||
* Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
* or without fee is hereby granted, provided that the above copyright notice and this | |||||
* permission notice appear in all copies. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
*/ | |||||
// ------------------------------------------------------ | |||||
// DGL Stuff | |||||
#include "App.hpp" | |||||
#include "Window.hpp" | |||||
#include "Widget.hpp" | |||||
// ------------------------------------------------------ | |||||
// use namespace | |||||
using namespace DGL; | |||||
// ------------------------------------------------------ | |||||
// Single color widget | |||||
class ColorWidget : public Widget, | |||||
public IdleCallback | |||||
{ | |||||
public: | |||||
ColorWidget(Window& parent) | |||||
: Widget(parent), | |||||
cur('r'), | |||||
reverse(false), | |||||
r(0), g(0), b(0) | |||||
{ | |||||
parent.addIdleCallback(this); | |||||
} | |||||
private: | |||||
void idleCallback() override | |||||
{ | |||||
switch (cur) | |||||
{ | |||||
case 'r': | |||||
if (reverse) | |||||
{ | |||||
if (--r == 0) | |||||
cur = 'g'; | |||||
} | |||||
else | |||||
{ | |||||
if (++r == 100) | |||||
cur = 'g'; | |||||
} | |||||
break; | |||||
case 'g': | |||||
if (reverse) | |||||
{ | |||||
if (--g == 0) | |||||
cur = 'b'; | |||||
} | |||||
else | |||||
{ | |||||
if (++g == 100) | |||||
cur = 'b'; | |||||
} | |||||
break; | |||||
case 'b': | |||||
if (reverse) | |||||
{ | |||||
if (--b == 0) | |||||
{ | |||||
cur = 'r'; | |||||
reverse = false; | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
if (++b == 100) | |||||
{ | |||||
cur = 'r'; | |||||
reverse = true; | |||||
} | |||||
} | |||||
break; | |||||
} | |||||
repaint(); | |||||
} | |||||
void onDisplay() override | |||||
{ | |||||
// paint bg color (in full size) | |||||
glColor3b(r, g, b); | |||||
bgFull.draw(); | |||||
// paint inverted color (in 2/3 size) | |||||
glColor3b(100-r, 100-g, 100-b); | |||||
bgSmall.draw(); | |||||
} | |||||
void onReshape(int width, int height) override | |||||
{ | |||||
// full bg | |||||
bgFull = Rectangle<int>(0, 0, width, height); | |||||
// small bg, centered 2/3 size | |||||
bgSmall = Rectangle<int>(width/6, height/6, width*2/3, height*2/3); | |||||
// make widget same size as window | |||||
setSize(width, height); | |||||
// default reshape implementation | |||||
Widget::onReshape(width, height); | |||||
} | |||||
char cur; | |||||
bool reverse; | |||||
int r, g, b; | |||||
Rectangle<int> bgFull, bgSmall; | |||||
}; | |||||
// ------------------------------------------------------ | |||||
// main entry point | |||||
int main() | |||||
{ | |||||
App app; | |||||
Window win(app); | |||||
ColorWidget color(win); | |||||
win.setSize(300, 300); | |||||
win.setTitle("Color"); | |||||
win.show(); | |||||
app.exec(); | |||||
return 0; | |||||
} | |||||
// ------------------------------------------------------ |
@@ -1,213 +0,0 @@ | |||||
/* | |||||
* DISTRHO Plugin Framework (DPF) | |||||
* Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
* or without fee is hereby granted, provided that the above copyright notice and this | |||||
* permission notice appear in all copies. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
*/ | |||||
// ------------------------------------------------------ | |||||
// Pics | |||||
#include "dgl-images_src/CatPics.cpp" | |||||
// ------------------------------------------------------ | |||||
// DGL Stuff | |||||
#include "Image.hpp" | |||||
#include "Widget.hpp" | |||||
#include "StandaloneWindow.hpp" | |||||
// ------------------------------------------------------ | |||||
// use namespace | |||||
using namespace DGL; | |||||
// ------------------------------------------------------ | |||||
// our widget | |||||
class ExampleImagesWidget : public Widget, | |||||
public IdleCallback | |||||
{ | |||||
public: | |||||
static const int kImg1y = 0; | |||||
static const int kImg2y = 500/2-CatPics::cat2Height/2; | |||||
static const int kImg3x = 400/3-CatPics::cat3Width/3; | |||||
static const int kImg1max = 500-CatPics::cat1Width; | |||||
static const int kImg2max = 500-CatPics::cat2Width; | |||||
static const int kImg3max = 400-CatPics::cat3Height; | |||||
ExampleImagesWidget(Window& win) | |||||
: Widget(win), | |||||
fImgTop1st(1), | |||||
fImgTop2nd(2), | |||||
fImgTop3rd(3), | |||||
fImg1x(0), | |||||
fImg2x(kImg2max), | |||||
fImg3y(kImg3max), | |||||
fImg1rev(false), | |||||
fImg2rev(true), | |||||
fImg3rev(true), | |||||
fImg1(CatPics::cat1Data, CatPics::cat1Width, CatPics::cat1Height, GL_BGR), | |||||
fImg2(CatPics::cat2Data, CatPics::cat2Width, CatPics::cat2Height, GL_BGR), | |||||
fImg3(CatPics::cat3Data, CatPics::cat3Width, CatPics::cat3Height, GL_BGR) | |||||
{ | |||||
win.addIdleCallback(this); | |||||
} | |||||
private: | |||||
void idleCallback() override | |||||
{ | |||||
if (fImg1rev) | |||||
{ | |||||
fImg1x -= 2; | |||||
if (fImg1x <= -50) | |||||
{ | |||||
fImg1rev = false; | |||||
setNewTopImg(1); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
fImg1x += 2; | |||||
if (fImg1x >= kImg1max+50) | |||||
{ | |||||
fImg1rev = true; | |||||
setNewTopImg(1); | |||||
} | |||||
} | |||||
if (fImg2rev) | |||||
{ | |||||
fImg2x -= 1; | |||||
if (fImg2x <= -50) | |||||
{ | |||||
fImg2rev = false; | |||||
setNewTopImg(2); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
fImg2x += 4; | |||||
if (fImg2x >= kImg2max+50) | |||||
{ | |||||
fImg2rev = true; | |||||
setNewTopImg(2); | |||||
} | |||||
} | |||||
if (fImg3rev) | |||||
{ | |||||
fImg3y -= 3; | |||||
if (fImg3y <= -50) | |||||
{ | |||||
fImg3rev = false; | |||||
setNewTopImg(3); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
fImg3y += 3; | |||||
if (fImg3y >= kImg3max+50) | |||||
{ | |||||
fImg3rev = true; | |||||
setNewTopImg(3); | |||||
} | |||||
} | |||||
repaint(); | |||||
} | |||||
void onDisplay() override | |||||
{ | |||||
switch (fImgTop3rd) | |||||
{ | |||||
case 1: | |||||
fImg1.drawAt(fImg1x, kImg1y); | |||||
break; | |||||
case 2: | |||||
fImg2.drawAt(fImg2x, kImg2y); | |||||
break; | |||||
case 3: | |||||
fImg3.drawAt(kImg3x, fImg3y); | |||||
break; | |||||
}; | |||||
switch (fImgTop2nd) | |||||
{ | |||||
case 1: | |||||
fImg1.drawAt(fImg1x, kImg1y); | |||||
break; | |||||
case 2: | |||||
fImg2.drawAt(fImg2x, kImg2y); | |||||
break; | |||||
case 3: | |||||
fImg3.drawAt(kImg3x, fImg3y); | |||||
break; | |||||
}; | |||||
switch (fImgTop1st) | |||||
{ | |||||
case 1: | |||||
fImg1.drawAt(fImg1x, kImg1y); | |||||
break; | |||||
case 2: | |||||
fImg2.drawAt(fImg2x, kImg2y); | |||||
break; | |||||
case 3: | |||||
fImg3.drawAt(kImg3x, fImg3y); | |||||
break; | |||||
}; | |||||
} | |||||
void setNewTopImg(const int imgId) | |||||
{ | |||||
if (fImgTop1st == imgId) | |||||
return; | |||||
if (fImgTop2nd == imgId) | |||||
{ | |||||
fImgTop2nd = fImgTop1st; | |||||
fImgTop1st = imgId; | |||||
return; | |||||
} | |||||
fImgTop3rd = fImgTop2nd; | |||||
fImgTop2nd = fImgTop1st; | |||||
fImgTop1st = imgId; | |||||
} | |||||
int fImgTop1st, fImgTop2nd, fImgTop3rd; | |||||
int fImg1x, fImg2x, fImg3y; | |||||
bool fImg1rev, fImg2rev, fImg3rev; | |||||
Image fImg1, fImg2, fImg3; | |||||
}; | |||||
// ------------------------------------------------------ | |||||
// main entry point | |||||
int main() | |||||
{ | |||||
App app; | |||||
Window win(app); | |||||
ExampleImagesWidget images(win); | |||||
win.setResizable(false); | |||||
win.setSize(500, 400); | |||||
win.setTitle("Images"); | |||||
win.show(); | |||||
app.exec(); | |||||
return 0; | |||||
} | |||||
// ------------------------------------------------------ |
@@ -1,3 +0,0 @@ | |||||
cat1.png: http://www.flickr.com/photos/tomitapio/4305303148/ | |||||
cat2.png: http://www.flickr.com/photos/aigle_dore/6672148713/ | |||||
cat3.png: http://www.flickr.com/photos/aigle_dore/5889008066/ |
@@ -1,25 +0,0 @@ | |||||
/* (Auto-generated binary data file). */ | |||||
#ifndef BINARY_CATPICS_HPP | |||||
#define BINARY_CATPICS_HPP | |||||
namespace CatPics | |||||
{ | |||||
extern const char* cat1Data; | |||||
const unsigned int cat1DataSize = 216090; | |||||
const unsigned int cat1Width = 294; | |||||
const unsigned int cat1Height = 245; | |||||
extern const char* cat2Data; | |||||
const unsigned int cat2DataSize = 117600; | |||||
const unsigned int cat2Width = 245; | |||||
const unsigned int cat2Height = 160; | |||||
extern const char* cat3Data; | |||||
const unsigned int cat3DataSize = 111600; | |||||
const unsigned int cat3Width = 248; | |||||
const unsigned int cat3Height = 150; | |||||
} | |||||
#endif // BINARY_CATPICS_HPP | |||||
@@ -1,213 +0,0 @@ | |||||
/* | |||||
* DISTRHO Plugin Framework (DPF) | |||||
* Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
* or without fee is hereby granted, provided that the above copyright notice and this | |||||
* permission notice appear in all copies. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
*/ | |||||
// ------------------------------------------------------ | |||||
// DGL Stuff | |||||
#include "App.hpp" | |||||
#include "CairoWidget.hpp" | |||||
#include "Window.hpp" | |||||
#include <cstdio> | |||||
// ------------------------------------------------------ | |||||
// use namespace | |||||
using namespace DGL; | |||||
// ------------------------------------------------------ | |||||
// Background widget (cairo will be painted on top) | |||||
class BackgroundWidget : public Widget | |||||
{ | |||||
public: | |||||
BackgroundWidget(Window& parent) | |||||
: Widget(parent) | |||||
{ | |||||
} | |||||
private: | |||||
void onDisplay() override | |||||
{ | |||||
int x = 0; | |||||
int y = 0; | |||||
int width = getWidth(); | |||||
int height = getHeight(); | |||||
// paint bg color (in full size) | |||||
glColor3b(20, 80, 20); | |||||
glBegin(GL_QUADS); | |||||
glTexCoord2f(0.0f, 0.0f); | |||||
glVertex2i(x, y); | |||||
glTexCoord2f(1.0f, 0.0f); | |||||
glVertex2i(x+width, y); | |||||
glTexCoord2f(1.0f, 1.0f); | |||||
glVertex2i(x+width, y+height); | |||||
glTexCoord2f(0.0f, 1.0f); | |||||
glVertex2i(x, y+height); | |||||
glEnd(); | |||||
} | |||||
void onReshape(int width, int height) override | |||||
{ | |||||
// make this widget same size as window | |||||
setSize(width, height); | |||||
Widget::onReshape(width, height); | |||||
} | |||||
}; | |||||
// ------------------------------------------------------ | |||||
// Custom Cairo Widget | |||||
class CustomCairoWidget : public CairoWidget, | |||||
public IdleCallback | |||||
{ | |||||
public: | |||||
CustomCairoWidget(Window& parent) | |||||
: CairoWidget(parent), | |||||
value(0.0f), | |||||
pressed(false) | |||||
{ | |||||
setSize(100, 100); | |||||
} | |||||
private: | |||||
void idleCallback() override | |||||
{ | |||||
value += 0.001f; | |||||
if (value > 1.0f) | |||||
value = 0; | |||||
repaint(); | |||||
} | |||||
void cairoDisplay(cairo_t* const context) override | |||||
{ | |||||
const int w = getWidth(); | |||||
const int h = getHeight(); | |||||
float radius = 40.0f; | |||||
// * 0.9 for line width to remain inside redraw area | |||||
if (w > h) | |||||
radius = (h / 2.0f)*0.9f; | |||||
else | |||||
radius = (w / 2.0f)*0.9f; | |||||
cairo_save(context); | |||||
cairo_rectangle(context, 0, 0, w, h ); | |||||
cairo_set_source_rgba(context, 1.1, 0.1, 0.1, 0 ); | |||||
cairo_fill(context); | |||||
cairo_set_line_join(context, CAIRO_LINE_JOIN_ROUND); | |||||
cairo_set_line_cap(context, CAIRO_LINE_CAP_ROUND); | |||||
cairo_set_line_width(context, 5-0.2); | |||||
cairo_move_to(context, w/2, h/2); | |||||
cairo_line_to(context, w/2, h/2); | |||||
cairo_set_source_rgba(context, 0.1, 0.1, 0.1, 0 ); | |||||
cairo_stroke(context); | |||||
cairo_arc(context, w/2, h/2, radius, 2.46, 0.75 ); | |||||
cairo_set_source_rgb(context, 0.1, 0.1, 0.1 ); | |||||
cairo_stroke(context); | |||||
float angle = 2.46 + ( 4.54 * value ); | |||||
cairo_set_line_width(context, 5); | |||||
cairo_arc(context, w/2, h/2, radius, 2.46, angle ); | |||||
cairo_line_to(context, w/2, h/2); | |||||
cairo_set_source_rgba(context, 1.0, 0.48, 0, 0.8); | |||||
cairo_stroke(context); | |||||
cairo_restore(context); | |||||
} | |||||
bool onMouse(int button, bool press, int x, int y) | |||||
{ | |||||
if (button == 1) | |||||
{ | |||||
pressed = press; | |||||
if (press) | |||||
{ | |||||
setX(x-100/2); | |||||
setY(y-100/2); | |||||
} | |||||
return true; | |||||
} | |||||
return false; | |||||
} | |||||
bool onMotion(int x, int y) | |||||
{ | |||||
if (pressed) | |||||
{ | |||||
setX(x-100/2); | |||||
setY(y-100/2); | |||||
return true; | |||||
} | |||||
return false; | |||||
} | |||||
float value; | |||||
bool pressed; | |||||
}; | |||||
// ------------------------------------------------------ | |||||
// Custom window, with bg + cairo + image | |||||
class CustomWindow : public Window | |||||
{ | |||||
public: | |||||
CustomWindow(App& app) | |||||
: Window(app), | |||||
bg(*this), | |||||
cairo(*this) | |||||
{ | |||||
addIdleCallback(&cairo); | |||||
} | |||||
private: | |||||
BackgroundWidget bg; | |||||
CustomCairoWidget cairo; | |||||
}; | |||||
// ------------------------------------------------------ | |||||
// main entry point | |||||
int main() | |||||
{ | |||||
App app; | |||||
CustomWindow win(app); | |||||
win.setSize(300, 300); | |||||
win.setTitle("Cairo"); | |||||
win.show(); | |||||
app.exec(); | |||||
return 0; | |||||
} | |||||
// ------------------------------------------------------ |
@@ -1,208 +0,0 @@ | |||||
/* | |||||
* DISTRHO Plugin Framework (DPF) | |||||
* Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
* or without fee is hereby granted, provided that the above copyright notice and this | |||||
* permission notice appear in all copies. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
*/ | |||||
// ------------------------------------------------------ | |||||
// DGL Stuff | |||||
#define GL_GLEXT_PROTOTYPES | |||||
#include "App.hpp" | |||||
#include "Window.hpp" | |||||
#include "Widget.hpp" | |||||
#include "src/freetype-gl/text-buffer.h" | |||||
#include "src/freetype-gl/mat4.h" | |||||
#include <GL/glext.h> | |||||
#include <cstdio> | |||||
#include <cwchar> | |||||
// ------------------------------------------------------ | |||||
extern "C" { | |||||
int z_verbose = 0; | |||||
void z_error (char* message) | |||||
{ | |||||
d_stderr2(message); | |||||
} | |||||
} | |||||
// ------------------------------------------------------ | |||||
// use namespace | |||||
using namespace DGL; | |||||
// ------------------------------------------------------ | |||||
// Single color widget | |||||
class TextWidget : public Widget | |||||
{ | |||||
public: | |||||
TextWidget(Window& parent) | |||||
: Widget(parent), | |||||
#if 1 | |||||
atlas(nullptr), | |||||
fontmgr(nullptr), | |||||
font(nullptr), | |||||
#endif | |||||
textbuf(nullptr) | |||||
{ | |||||
vec2 pen = {{20, 200}}; | |||||
vec4 black = {{0.0, 0.0, 0.0, 1.0}}; | |||||
vec4 white = {{1.0, 1.0, 1.0, 1.0}}; | |||||
vec4 none = {{1.0, 1.0, 1.0, 0.0}}; | |||||
markup_t markup = { | |||||
"normal", | |||||
24.0f, 0, 0, | |||||
0.0, 0.0, 2.0f, | |||||
white, none, | |||||
0, white, | |||||
0, white, | |||||
0, white, | |||||
0, white, | |||||
0 | |||||
}; | |||||
wchar_t* text = L"A Quick Brown Fox Jumps Over The Lazy Dog 0123456789"; | |||||
#if 1 | |||||
atlas = texture_atlas_new(600, 300, 1); | |||||
DISTRHO_SAFE_ASSERT_RETURN(atlas != nullptr,); | |||||
//fontmgr = font_manager_new(600, 200, 2); | |||||
//DISTRHO_SAFE_ASSERT_RETURN(fontmgr != nullptr,); | |||||
//font = font_manager_get_from_filename(fontmgr, "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf", 12.0f); | |||||
//DISTRHO_SAFE_ASSERT_RETURN(font != nullptr,); | |||||
font = texture_font_new_from_file(atlas, 12.0f, "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf"); | |||||
DISTRHO_SAFE_ASSERT_RETURN(font != nullptr,); | |||||
#endif | |||||
textbuf = text_buffer_new(LCD_FILTERING_OFF); | |||||
DISTRHO_SAFE_ASSERT_RETURN(textbuf != nullptr,); | |||||
textbuf->base_color = black; | |||||
//markup.family = "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf"; | |||||
markup.font = font; | |||||
text_buffer_printf(textbuf, &pen, | |||||
&markup, text, nullptr); | |||||
text_buffer_add_text(textbuf, &pen, &markup, text, std::wcslen(text)); | |||||
mat4_set_identity(&projection); | |||||
mat4_set_identity(&model); | |||||
mat4_set_identity(&view); | |||||
} | |||||
~TextWidget() | |||||
{ | |||||
if (textbuf != nullptr) | |||||
{ | |||||
text_buffer_delete(textbuf); | |||||
textbuf = nullptr; | |||||
} | |||||
#if 1 | |||||
if (font != nullptr) | |||||
{ | |||||
texture_font_delete(font); | |||||
font = nullptr; | |||||
} | |||||
if (fontmgr != nullptr) | |||||
{ | |||||
font_manager_delete(fontmgr); | |||||
fontmgr = nullptr; | |||||
} | |||||
if (atlas != nullptr) | |||||
{ | |||||
texture_atlas_delete(atlas); | |||||
atlas = nullptr; | |||||
} | |||||
#endif | |||||
} | |||||
private: | |||||
void onDisplay() override | |||||
{ | |||||
DISTRHO_SAFE_ASSERT_RETURN(textbuf != nullptr,); | |||||
glClearColor(0.4f, 0.4f, 0.45f, 1.0f); | |||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f); | |||||
glUseProgram(textbuf->shader); | |||||
{ | |||||
glUniformMatrix4fv(glGetUniformLocation(textbuf->shader, "model"), 1, 0, model.data); | |||||
glUniformMatrix4fv(glGetUniformLocation(textbuf->shader, "view"), 1, 0, view.data); | |||||
glUniformMatrix4fv(glGetUniformLocation(textbuf->shader, "projection"), 1, 0, projection.data); | |||||
text_buffer_render(textbuf); | |||||
} | |||||
} | |||||
void onReshape(int width, int height) override | |||||
{ | |||||
// make widget same size as window | |||||
setSize(width, height); | |||||
//Widget::onReshape(width, height); | |||||
//mat4_set_identity(&projection); | |||||
//mat4_set_identity(&model); | |||||
//mat4_set_identity(&view); | |||||
glViewport(0, 0, width, height); | |||||
//mat4_set_orthographic(&projection, 0, width, 0, height, width, height); | |||||
mat4_set_orthographic(&projection, 0, width, 0, height, -1, 1); | |||||
} | |||||
texture_atlas_t* atlas; | |||||
font_manager_t* fontmgr; | |||||
texture_font_t* font; | |||||
text_buffer_t* textbuf; | |||||
mat4 model, view, projection; | |||||
}; | |||||
// ------------------------------------------------------ | |||||
// main entry point | |||||
int main() | |||||
{ | |||||
App app; | |||||
Window win(app); | |||||
TextWidget color(win); | |||||
win.setSize(600, 300); | |||||
win.setTitle("Text"); | |||||
win.show(); | |||||
app.exec(); | |||||
return 0; | |||||
} | |||||
// ------------------------------------------------------ |